web-dev-qa-db-ja.com

Elasticsearchを使用したLogstash

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に接続できませんでした。誰かが私が間違っている場所を提案してもらえますか?

14
Fatih Karatana

まず、「タイプ」属性を一致させることをお勧めします。入力には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 私が言及した両方の点は、ガイドで直接触れられています。このガイドの出発点はやや複雑ですが、アイデアと概念は完全です。

18
Adam

LogstashをESに接続できませんでした

logstashとelasticsearchのバージョンが同期していなかったのときにこれが起こりました

ドキュメントから:

バージョン注:ElasticsearchクラスターはElasticsearch 1.1.1を実行している必要があります。 Elasticsearchの他のバージョンを使用する場合は、protocol => httpこのプラグイン。

設定protocol => http上記のように明示的に修正してくれました。

11
lfender6445

Adamが言ったように、問題はプロトコルの設定だったので、テストのためだけに行いました。

logstash -e 'input { stdin { } } output { elasticsearch { Host => localhost protocol => "http" port => "9200" } }'

そして、それはOSXで働いているようです。問題 こちら

4
facundofarias

以下がテストされています

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コンテナを実行する前に設定を行う必要はありません。最初に、上記の簡単なコマンドを使用してコンテナを実行します。次に、対応するディレクトリに移動し、必要な変更を加えて保存し、コンテナを終了してコンテナを再起動すると、変更が反映されます。

3
CR Sardar

まず、ESでインデックスを作成する必要はありません。

あなたはdon`tがelasticsearchで「インデックス」を作成する必要があるため、logstashがインデックスを割り当てると、インデックスが自動的に作成されます。

ちなみに、インデックス値を設定しなかった場合、「logstash-%{+ YYYY.MM.dd}」としてデフォルト値として設定されます

enter image description here

(これは 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、楽しんで〜

1
M.Chen

同じエラーメッセージが表示されましたが、IPアドレスlogstashが使用していたのがelasticsearchのディスカバリプロセスのTRACEログで間違っていることを見つけるのに時間がかかりました。

複数のIPアドレスがあり、logstashは間違ったアドレスを使用しました。その後、すべてが順調に進みました。

1
Hadrien

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"]
0
José Ibañez