2016-08-29 3 views
0

私は、デバイスがログを送信してから、それを解析してelasticsearchに入れてログアウトするというプロトタイプを持っています。Elasticsearchとlogstashに動的ホストを追加するには

Logstash出力コード: -

output{ 
    if [type] == "json" { 
    elasticsearch { 
    hosts => ["host1:9200","host2:9200","host3:9200"] 
    index => "index-metrics-%{+xxxx.ww}" 
    } 
    } 

} 

今、私の質問は:

私は、このソリューションを生成します。簡単にするために、1つのクラスターがあり、そのクラスター内に5つのノードがあると仮定します。

私はelasticsearch出力プラグインで5ノードのIP /ホスト名の配列を与えることができることを知っています。そして、データを配布するためにロビンを丸めます。

すべてのノードIP /ホスト名をlogstash設定ファイルに入れないでください。

システムが稼動するにつれて、手動で各logstashインスタンスに入り、これらのホストを更新したくありません。

この場合、ベストプラクティスは何ですか?

私の要件は次のとおりです。

私はESクラスタを実行したいと私は追加/削除/任意の時点でのノードの任意の数を更新します。 ES側の変更に関係なく、すべてのログスタッシュインスタンスがデータを送信する必要があります。

ありがとうございました。

答えて

0

追加/削除/更新する場合は、サービスの起動前にsedなどの文字列の置換を実行する必要があります。 Logstashの設定は "コンパイル"され、そのように変更することはできません。

hosts => [$HOSTS] ... $ HOSTS="\"host1:9200\",\"host2:9200\"" $ sed "s/\$HOSTS/$HOSTS/g" $config

あなたの他のオプションは、動的な部分の環境変数を使用することですが、それはあなたがホストの動的な量を使用することはできません。

+0

お返事ありがとうございます。 hosts => [$ HOSTS]は設定ファイルに追加され、ホストを動的に追加するには以下の行を正しく実行する必要があります。 $ HOSTS = "\" host1:9200 \ "、\" host2:9200 \ "" $ sed "s/\ $ HOSTS/$ HOSTS/g" $ config – sundar

関連する問題