1. ホーム
  2. elasticsearch

[解決済み] LogstashでElasticsearchの出力テンプレートを設定する方法

2022-03-07 10:57:14

質問

私はKibanaとELK(Elasticsearch、Logstash、Kibana)スタックに比較的新しく、かなりうまくセットアップしてきましたが、私が奇妙だと思う問題に遭遇し、何が起こっているかを理解するためにいくつかの助けが必要です。

私はELKスタックを使ってApacheのログを解析していますが、独自のカスタムタイプ設定をしています。したがって、私はLogstash(またはKibana?)にデータマッピングが何であるかを推測させる代わりに、フィールドタイプとそのようなものを明示的に指定する必要があります。

から Logstashのドキュメントを読む を設定することができるのは明らかなようです。 template の値を output.elasticsearch というコンフィグのチャンクがあります。

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-apache"
    document_id => "%{[@metadata][fingerprint]}"
    manage_template => false
    template => "/path/to/logstash/logstash-apache.json"
    template_name => "logstash-apache"
    template_overwrite => true
  }
  stdout {
    codec => rubydebug
  }
}

100%正しいパスが設定されていることを確認しています。しかし、これを使用してLogstashを起動し、それを実行させると、何らかの理由で、私が logstash-apache.json が表示されない。Kibanaのインデックスは logstash-apache のように、これは正しく動作するはずです?

そこで、マッピング・テンプレートをElasticsearchに直接プリロードすることにしました。

curl -ss -XPUT "http://localhost:9200/_template/logstash-apache/" -H 'Content-Type: application/json' -d @"/path/to/logstash/logstash-apache.json";

しかし、このようなことをすると、かなり不格好になります。このようなことは、すべて logstash-apache.conf を設定しました。

では、私は何を間違えているのでしょうか?どうすればカスタムマッピングのテンプレートが logstash-apache.conf のような余分なフープを通さずに curl というコマンドがあるのでしょうか?

解決方法は?

問題は、あなたが manage_template から false この場合、このテンプレート作成機能は完全に無効となり、現在のように手動でテンプレートを作成する必要があります。

そのため、あなたの output セクションは次のようになります。

  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-apache"
    document_id => "%{[@metadata][fingerprint]}"
    manage_template => true                              <-- change this line
    template => "/path/to/logstash/logstash-apache.json"
    template_name => "logstash-apache"
    template_overwrite => true
  }