Kibana:基于字段子字符串的饼图切片

时间:2016-09-26 10:37:35

标签: elasticsearch kibana

我正在尝试创建一个饼图可视化,它将显示前10个传入请求。 我有一个搜索查询,只过滤传入的请求,其中包含一个名为messages的字段,如下所示: "传入请求/ api / someaction"。 如何基于/ api / someaction部分而不是整个字符串进行聚合(因为那时" Incoming"被计为术语"。

或者......我可以创建自定义字段,例如,另一个字段的子字符串吗?

由于

1 个答案:

答案 0 :(得分:10)

如前面评论中所述,我已经找到了解决问题的方法。对我来说,我有foo bar baz之类的值,我需要提取第一个单词。我可以使用“高级→JSON”字段,使用以下脚本执行此操作:

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

因此,在Kibana界面中,这看起来像这样:

https://www.imagemagick.org/script/command-line-options.php#compress

因此,在您的情况下,脚本应该类似于:

{
    "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代码。所以你也应该能够使用Kibana visualisation config with scripted value或任何其他String方法来使用正则表达式......

我没有测试过这个。如果有人有任何相关信息,请随时发表评论。

相关问题