首页 > 解决方案 > Kibana 仪表板:部分消息匹配的聚合

问题描述

我正在开发一项服务,该服务允许用户填写和提交多个表格。提交每个表单后,都会记录一条消息,例如:

Form submitted Form-001 with draftId (unique Id) and submissionRef (unique ref)

我想汇总(和计数)并可视化每个表单(基于表单名称Form-xxx)提交的数量。

我对 kibana 仪表板相当陌生。因此,所有建议都值得赞赏。

标签: kibanamessageaggregationmatchingpartial

解决方案


我终于想出了如何实现这一目标。我在这里发布它是为了关闭和将来参考:

这样做的方法是使用Kibana中的脚本字段。脚本化字段可以读取消息并根据需要聚合它们。Kibana 接受 2 种不同语言的脚本化字段:Lucene 表达式Painless

我的解决方案是用painless编写的:

def msg = doc['message.raw'].value;
if(msg != null){ 
    int flagIndex = msg.indexOf('Form submitted');
    if(flagIndex>0){ 
        int toIndex = msg.indexOf(' with draftId');
        return msg.substring(flagIndex+14,toIndex);
    }
}
return "";

推荐阅读