2016-09-26 44 views
3

我試圖創建一個餅圖圖表,它將顯示前10個傳入請求。 我有一個搜索查詢,只過濾傳入的請求,其中有一個名爲消息的字段,如下所示: 「傳入的請求/ api/someaction」。 我該怎麼做基於/ api/someaction部分而不是整個字符串的聚合(因爲那麼「傳入」被視爲一個術語「Kibana:基於字段子字符串的餅圖切片

或者...我可以創建自定義字段例如,另一場的子?

感謝

+0

你使用Logstash還是別的?如果Logstash,你的配置如何? – Val

+0

我相信有一種使用「高級」JSON輸入的方法。我目前也正在研究這個,但到目前爲止還沒有能夠找到的東西。 – exhuma

回答

1

正如前面的評論中提及,我想出了一個解決我的問題。對我來說,我喜歡價值觀和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領域的「腳本」鍵使用任何Java代碼。所以你也應該能夠使用正則表達式使用String.replaceAll或任何其他字符串的方法...

我還沒有測試過這個。如果有人有這方面的任何信息,請隨時發表評論。