web-dev-qa-db-ja.com

Kibana:フィールドの部分文字列に基づく円グラフのスライス

上位10件の受信リクエストを表示する円グラフの視覚化を作成しようとしています。 「Incomingrequest/api/someaction」のようなメッセージというフィールドを持つ受信リクエストのみをフィルタリングする検索クエリがあります。文字列全体ではなく/ api/someaction部分に基づいて集計を行うにはどうすればよいですか(「Incoming」は用語としてカウントされるため)。

または...たとえば、別のフィールドの部分文字列であるカスタムフィールドを作成できますか?

ありがとう

16
Lior Ohana

コメントで前述したように、私は自分の問題の解決策を考え出しました。私の場合、foo bar bazのような値があり、最初の単語を抽出する必要がありました。次のスクリプトを使用して、[詳細設定]→[JSON]フィールドを使用してこれを行うことができました。

{
    "script": "( _value.indexOf(' ') > 0 ? _value.substring(0, _value.indexOf(' ')) : _value )"
}

したがって、Kibanaインターフェースでは、これは次のようになります。

Kibana visualisation config with scripted value


したがって、あなたの場合、スクリプトはおそらく次のようになります。

{
    "script": "( _value.indexOf(' ') > 0 ? _value.substring(_value.lastIndexOf(' ')) : _value )"
}

明らかに、これは、抽出するメッセージの部分が文字列の最後のスペースの後に続くことを前提としています。上記をテストするために、使い捨てのJavaクラスを作成しました:

public class Foo {

    public static void main(String[] args){
        String tester = "Incoming request /api/someaction";
        String result = tester.substring(tester.lastIndexOf(" "));
        System.out.println(result);
    }

}

私の知る限り、JSONフィールドの「script」キーで任意のJavaコードを使用できます。したがって、 String.replaceAll)を使用して正規表現を使用することもできます。 またはその他のStringメソッド...

私はこれをテストしていません。誰かがこれについて何か情報を持っているならば、コメントを残してください。

20
exhuma