ログの保存にelasticsearchとkibanaを使用しています。ここで必要なのは、フィールドから数値を抽出して、新しいフィールドに格納することです。
したがって、たとえば、これを持っている:
accountExist実行時間:1046ミリ秒
番号(1046)を抽出して、キバナの新しいフィールドで確認したいと思います。
出来ますか?どうやって?助けてくれてありがとう
インデックス作成前/インデックス作成中にこれを行う必要があります。
Elasticsearch内で、インデックス作成中に必要なものを取得できます。
Analyze API は、テストの目的に役立ちます。
パフォーマンスは劣りますが、インデックスの再作成をしなければならない場合は、kibanaでスクリプトフィールドを使用できます。
ここでの紹介: https://www.elastic.co/blog/using-painless-kibana-scripted-fields
script.painless.regex.enabled:true
def logMsg = params ['_ source'] ['log_message']; if(logMsg == null){ return -10000; } def m = /。* accountExist実行時間:([0-9] +)ms。* $ /。matcher(params ['_ source'] ['log_message']); if(m .matches()){ return Integer.parseInt(m.group(1)) } else { return -10000 }
何百万ものログエントリのフィールドをスクリプト化するのはパフォーマンスが悪いことは理解していますが、私のユースケースは非常に特殊なログエントリであり、1日に合計10回ログに記録され、結果のフィールドのみを使用して視覚化を作成します。事前に定期的なクエリで候補者を減らす分析。
これらのフィールドを必要な状況でのみ計算できる場合(または、最初から意味があり、計算可能である場合、つまり「return-1000」を不要にする場合)は興味深いでしょう。現在、それらは適用され、すべてのログエントリに表示されます。
次のようなクエリ内でスクリプトフィールドを生成できます: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html しかし、それは簡単に維持するには、ボンネットの下に埋もれすぎているようです:/