Kibana 在 Visualize table buckets 中從 field 取部份值做為 row

為了後續 support 需要,想要在原本的 dashboard 中加上一個 visualize table 用來提供更詳細的資訊,原本也不是太困難的事,只是這次需要用來 group by 的資料放在類似 message 這種未切分的欄位中

基本環境說明

  1. macOS Big Sur 11.6
  2. docker desktop 3.6.0(67351)
  3. docker images
    • elasticsearch:7.11.2
    • yowko/fluentd-elasticsearch:1.0.0
    • fluent/fluentd:v1.12.0-debian-1.0
    • kibana:7.11.2
  4. sample log

    2021-11-01 09:00:38.192 [172][ERR][Yowko.DomainService.Test.Application.Utilities.ExceptionInterceptor]UserId:TW001|Name:Yowko|DepartmentId:D01
    traceId:b9e680d30a025e7a
    

設定方式

  1. 新增 Visualize (Data table)

    1visualize

    2createvisualize

    3aggrgation

    4datatable

    5datasource

  2. DepartmentId 為 row 切分基準

    • Spilt rows

      6spiltrows

    • Aggregation : Terms

      7terms

    • Field : message.keyword

      8field

    • Advanced –> JSON Input

      9advanced

      {
          "script": "_value.substring(_value.lastIndexOf('|')).replace('|DepartmentId:','')"
      }
      

      JSON Input 中的 _value 也可以使用 doc['message.keyword'].value

  3. UserId 為 row 切分基準

    重複上述步驟,僅最後 JSON Input 改為

    {
        "script": "_value.substring(0, _value.indexOf('|')).replace('UserId:','')"
    }
    

心得

google 的過程中一直找到 Painless scriptscripted field 但似乎都是在 index level 直接多個欄位,但我並非所有的 record 都需要切欄位,最後還是請教同事搞定的

另外我在開發時有遇到 Error executing runtime field or scripted field on index patternError executing Painless script 後來查到是因為並非所有 record 都有對應的資料內容造成 parse fail

  • 實際效果

    10result

參考資訊

  1. Elasticsearch failed to execute script