t-nakata
(NAKATA)
June 2, 2022, 8:57am
1
JSON形式のログを、logstashのjsonフィルターを使用して取り込んでおります。
現状の問題として、ドキュメントにより同じフィールド名(以下、fieldA)でも数値型の場合と文字列型の場合があります。その場合、初回にドキュメントを取り込んだ際に、fieldAが数字の場合、数値型で動的にマッピングされますが、その後に数値以外の文字列がfieldAに設定されていた場合はマッピングエラーとなってしまいます。
例えば、fieldAの値を事前に解析し、数字の場合はfieldA_numberフィールド、その他の文字列の場合はfieldA_textフィールドに格納するといったことは可能でしょうか?
なお、当該ドキュメントはキー名が多岐に渡るため、インデックステンプレートにて予め型を決めておくことが困難です
@t-nakata さん、
なかなか厄介な状況ですね。
他に解決方法があるような気もしますが、興味本位で Logstash の ruby filter を使ってカスタムスクリプトを書いてみました。こちらからダウンロードできます。 rename_by_data_type.rb
使用例:
filter {
ruby {
path => '/{path_of_the_ruby_script}/rename_by_data_type.rb'
script_params => { 'field' => 'the_name_of_target_field' }
}
}
実行時のイメージ:
二件のメッセージが渡ってきて、同じフィールド名なのに型が違う場合のイメージです。型の名前を元々のフィールド名の末尾に追記するようにしています。
Input:
[
{"values": {"fieldA": "a", "fieldB": "b", "fieldC": "c"}},
{"values": {"fieldA": 1, "fieldB": 2, "fieldC": 3}}
]
Output:
[
{"values": {"fieldA_String": "a", "fieldB_String": "b", "fieldC_String": "c"}},
{"values": {"fieldA_Integer": 1, "fieldB_Integer": 2, "fieldC_Integer": 3}}
]
system
(system)
Closed
July 13, 2022, 9:42am
3
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.