ネストされたハッシュの一部に値を入れたいのですが、上流のフィルターに応じてその部分に名前を付けます。これは、現在 20 以上の着信イベント タイプのそれぞれが、logstash ファイルに 18 行のこのような独自のセクションを持っているため、全体のコード サイズをリファクタリングして削減するためです (ただし、現在 %{detail_part} ビットはハードコーディングされています)。
# Working code
filter {
if [result] == 0 {
# Success
mutate {
add_field => {
"[Thing][ThingDetail][OtherThing][MoreDetail]" => "true"
}
}
}
else {
# Failed
mutate {
add_field => {
"[Thing][ThingDetail][OtherThing][MoreDetail]" => "false"
}
}
}
}
上記は「OtherThing」にハードコードされています。以下には変数がありますが、機能しません。
# Non-Working code
filter {
if [result] == 0 {
# Success
mutate {
add_field => {
"[Thing][ThingDetail][%{detail_part}][MoreDetail]" => "true"
}
}
}
else {
# Failed
mutate {
add_field => {
"[Thing][ThingDetail][%{detail_part}][MoreDetail]" => "false"
}
}
}
}
上記 (非動作コード) では、detail_part が上流のフィルターで "OtherThing" のような文字列値に設定されています。これは現在コンパイルおよび実行されていますが、XML は出力されていないため、これらのステートメントの結果としてハッシュに何も設定されていないと思います。
Rubyコードを埋め込んで実行できることはわかっていますが、できるだけ簡単な方法が欲しいです。このプロセスの出力は XML になるため、この種のネストされたハッシュを使用する必要があります。
これは Logstash で可能ですか?