LogstashをElasticsearchに接続しようとしていますが、動作しません。
ここに私のlogstash confがあります:
input {
stdin {
type => "stdin-type"
}
file {
type => "syslog-ng"
# Wildcards work, here :)
path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
}
}
output {
stdout { }
elasticsearch{
type => "all"
embedded => false
Host => "192.168.0.23"
port => "9300"
cluster => "logstash-cluster"
node_name => "logstash"
}
}
そして、私はelasticsearch.ymlでこれらの詳細を変更しただけです
cluster.name: logstash-cluster
node.name: "logstash"
node.master: false
network.bind_Host: 192.168.0.23
network.publish_Host: 192.168.0.23
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["localhost"]
これらの構成では、LogstashをESに接続できませんでした。誰かが私が間違っている場所を提案してもらえますか?
まず、「タイプ」属性を一致させることをお勧めします。入力には2つの異なるタイプがあり、出力には、どの入力にも存在しないタイプがあります。
テストのために、出力を次のように変更します。
output {
stdout { }
elasticsearch{
type => "stdin-type"
embedded => false
Host => "192.168.0.23"
port => "9300"
cluster => "logstash-cluster"
node_name => "logstash"
}
}
次に、ESインスタンスにインデックスを作成しましたか?
私が使用したガイドと私自身の経験から(他の人が動作する別の方法があるかもしれません)私はESに何かをプッシュするときにES APIを使用してデータが入ったかどうか。
もう1つの提案は、Logstashフォワーダーとインデクサーをデバッグフラグで実行して、舞台裏で何が起こっているかを確認することです。
127.0.0.1のESインスタンスに接続できますか?また、ポートとホストを試してみてください。 Logstashシステムのかなり新しいユーザーとして、最初の理解がセットアップの現実に反することがわかりました。ホストIPがポートと同じように見えない場合があります。ネットワークを確認し、リッスンしているポートとIPを特定する場合は、これを整理できます。そうでない場合は、インテリジェントな試行錯誤を行います。
包括的な出発点としてこれを強くお勧めします guide 私が言及した両方の点は、ガイドで直接触れられています。このガイドの出発点はやや複雑ですが、アイデアと概念は完全です。
LogstashをESに接続できませんでした
logstashとelasticsearchのバージョンが同期していなかったのときにこれが起こりました
ドキュメントから:
バージョン注:ElasticsearchクラスターはElasticsearch 1.1.1を実行している必要があります。 Elasticsearchの他のバージョンを使用する場合は、
protocol => http
このプラグイン。
設定protocol => http
上記のように明示的に修正してくれました。
Adamが言ったように、問題はプロトコルの設定だったので、テストのためだけに行いました。
logstash -e 'input { stdin { } } output { elasticsearch { Host => localhost protocol => "http" port => "9200" } }'
そして、それはOSXで働いているようです。問題 こちら 。
以下がテストされています
elasticsearch:5.4.0
そして
logstash:5.4.0
(OpenStackでdockerコンテナーを使用しています)
Elasticsearchの場合:
/usr/share/elasticsearch/config/elasticsearch.yml
は次のようになります-
cluster.name: "docker-cluster"
network.Host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
/usr/share/elasticsearch/config/
の他のファイルを変更する必要はありません
簡単なコマンドを使用してElasticsearchを実行します-
Sudo docker run --name elasticsearch -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.4.0
Logstashの場合:
/usr/share/logstash/config/logstash.yml
は次のようになります-
http.Host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
# http://111.*.*.11:9200 is the IP & Port of Elasticsearch's server
xpack.monitoring.elasticsearch.url: http://111.*.*.11:9200
# "elastic" is the user name of Elasticsearch's account
xpack.monitoring.elasticsearch.username: elastic
# "changeme" is the password of Elasticsearch's "elastic" user
xpack.monitoring.elasticsearch.password: changeme
/usr/share/logstash/config/
の他のファイルを変更する必要はありません
/usr/share/logstash/pipeline/logstash.conf
は次のようになります-
input {
file {
path => "/usr/share/logstash/test_i.log"
}
}
output {
elasticsearch {
# http://111.*.*.11:9200 is the IP & Port of Elasticsearch's server
hosts => ["http://111.*.*.11:9200"]
# "elastic" is the user name of Elasticsearch's account
user => "elastic"
# "changeme" is the password of Elasticsearch's "elastic" user
password => "changeme"
}
}
簡単なコマンドを使用してLogstashを実行します-
Sudo docker run --name logstash --expose 25826 -p 25826:25826 docker.elastic.co/logstash/logstash:5.4.0 --debug
注:Dockerコンテナを実行する前に設定を行う必要はありません。最初に、上記の簡単なコマンドを使用してコンテナを実行します。次に、対応するディレクトリに移動し、必要な変更を加えて保存し、コンテナを終了してコンテナを再起動すると、変更が反映されます。
まず、ESでインデックスを作成する必要はありません。
あなたはdon`tがelasticsearchで「インデックス」を作成する必要があるため、logstashがインデックスを割り当てると、インデックスが自動的に作成されます。
ちなみに、インデックス値を設定しなかった場合、「logstash-%{+ YYYY.MM.dd}」としてデフォルト値として設定されます
(これは logstash公式ガイド )で確認できます〜
第二に、not「弾性型」を「入力型」と同じ型に保つことができます。出力を次のように書くこともできます。
output {
stdout { }
elasticsearch{
embedded => false
Host => "192.168.0.23"
port => "9300"
index => "a_new_index"
cluster => "logstash-cluster"
node_name => "logstash"
document_type =>"my-own-type"
}
}
「document_type」を使用すると、ログを任意のタイプに保存できます〜
最後に、「document_type」を割り当てたくない場合は、「input type」と同じに設定されます
または、「すべての構成ファイル」でタイプを割り当てることを忘れても、タイプはデフォルト値としてlogs〜として設定されます
OK、楽しんで〜
同じエラーメッセージが表示されましたが、IPアドレスlogstashが使用していたのがelasticsearchのディスカバリプロセスのTRACEログで間違っていることを見つけるのに時間がかかりました。
複数のIPアドレスがあり、logstashは間違ったアドレスを使用しました。その後、すべてが順調に進みました。
Elasticsearchの2ノードクラスターがあり、logstashには1つしかありません。
この設定は私のために機能します:
ノードelk1:
#/etc/elasticsearch/elasticsearch.yml
script.disable_dynamic: true
cluster.name: elk-fibra
node.name: "elk1"
node.master: true
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elk1.lab.fibra"]
root @ elk1:
#/etc/logstash/conf.d/30-lumberjack-output.conf
output {
elasticsearch { Host => localhost protocol => "http" port => "9200" }
stdout { codec => rubydebug }
}
ノードelk2:
#/etc/elasticsearch/elasticsearch.yml
script.disable_dynamic: true
cluster.name: elk-fibra
node.name: "elk2"
node.master: false
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elk1.lab.fibra"]