現在、多数のログ出力を格納している標準のELKスタックがあります。ソース固有になるようにインデックスを分離しようとしています。
私のFileBeats構成の一部として、いくつかの標準フィールドは常にすべてのメッセージの一部として生成され(場所固有)、ESインデックスの基礎として使用します。
output {
elasticsearch {
hosts => ["http://elasticsearch.mydomain.com:80"]
index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}"
}
}
ただし、フィールドには大文字が含まれているため、ESは一部のインデックスを拒否しています。識別子にはmyfooのような許容値がありますが、MyBarの場合もあります。
[logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {"reason"=>"Invalid index name [logstash-2017.06.02-MyBar], must be lowercase"}
大文字小文字の区別は必須ではなく、問題のフィールドを強制的に小文字にするためにmutateフィルターを追加できますが、適切な大文字小文字で識別子フィールドを格納し、インデックス名には小文字バージョンを使用することをお勧めします。
問題のフィールドを小文字にするために、elasticsearchの出力で呼び出すことができる関数はありますか?何かのようなもの
index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}.lowercase()"
これは、もう少し変則的な手法で行うことができます。
そのようです:
filter {
mutate {
add_field => { "lc_identifier" => "%{fields}%{identifier}" }
}
mutate {
lowercase => [ "lc_identifier" ]
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch.example.com:80"]
index => "logstash-%{+YYYY.MM.dd}-%{[lc_identifier]}"
}
}
インデックスにはlc_identifier
フィールドが含まれますが、それほど重要ではありません。
Sysadmin1138のビルド answer :
@ metadata フィールドを使用して、lc_identifier
フィールドは、インデックス作成中にドキュメントに表示されません。
フィルターで、以下を変更します。
filter {
mutate {
add_field => { "lc_identifier" => "%{fields}%{identifier}" }
}
mutate {
lowercase => [ "lc_identifier" ]
}
}
に:
filter {
mutate {
add_field => { "[@metadata][lc_identifier]" => "%{fields}%{identifier}" }
}
mutate {
lowercase => [ "[@metadata][lc_identifier]" ]
}
}
そしてあなたの出力でそれを呼び出すには:
output {
elasticsearch {
hosts => ["http://elasticsearch.example.com:80"]
index => "logstash-%{+YYYY.MM.dd}-%{[@metadata][lc_identifier]}"
}
}
この方法では、小文字の識別子を使用してインデックスパターンを作成できますが、ドキュメント自体に小文字のフィールドを表示することは避けてください。