首页 > 解决方案 > 使用 grok 拆分消息

问题描述

我有以下格式的日志:

2018-09-17 15:24:34;Count of files in error folder in;C:\Scripts\FOLDER\SUBFOLDER\error;1

我想在一个单独的字段中输入文件夹的路径和后面的数字。喜欢

dirTEST=C:\Scripts\FOLDER\SUBFOLDER\
count.of.error.filesTEST=1

或者

dir=C:\Scripts\FOLDER\SUBFOLDER\
count.of.error.files=1

我在 logstash 配置中使用这个 grok 模式:

if  "TestLogs" in [tags] {
    grok{
    match => { "message" => "%{DATE:date_in_log}%{SPACE}%{TIME:time.in.log};%{DATA:message.text.log};%{WINPATH:dir};%{INT:count.of.error.files}" }
    add_field => { "dirTEST" => "%{dir}" } 
    add_field => { "count.of.error.filesTEST" => "%{count.of.error.files}" }
    }

}

logstash 日志中没有错误。

但是在 Kibana 中,我得到了没有新字段的通常日志。 在此处输入图像描述

标签: elasticsearchlogstashlogstash-grokfilebeat

解决方案


这里有几点说明。首先,必须说解决方案似乎在做你所期望的,所以问题可能是你的索引模式没有用新字段更新。要在 Kibana 中执行此操作,您可以转到 Management -> Kibana -> Index Patterns 并刷新右上角的字段列表(在删除索引模式按钮旁边)。

其次,您必须考虑到使用点来分隔术语会使结构化数据看起来像这样:

{
  "date_in_log": "18-09-17",
  "count": {
    "of": {
      "error": {
        "files": "1"
      }
    }
  },
  "time": {
    "in": {
     "log": "15:24:34"
    }
  },
  "message": {
    "text": {
      "log": "Count of files in error folder in"
    }
  },
  "dir": "C:\\Scripts\\FOLDER\\SUBFOLDER\\error"
}

我不知道这是否是您希望数据表示的方式,但也许您应该考虑其他解决方案来更改 grok 模式中字段的命名。


推荐阅读