如何在logstash的分隔字段中获取日志消息

时间:2015-06-17 13:59:00

标签: logging elasticsearch logstash kibana

我正在尝试从logstash以kibana中的特定方式登录,但我没有成功。

我将通过例子解释。然后,如果我在我的日志文件中有这一行:

2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net

我想在kibana中拥有这些字段和值:

DateTime : 2015-06-17 13:08:45
LogType : INFO
ModuleName : connectionpool
Message :   connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net

日期时间字段并不重要,因为默认情况下ES包含时间戳

我试试这段代码:

if [type] == "mylog" {
    grok {
      match => { "message" => "%{MYLOGTIME:DateTime} %{LOGLEVEL:LogType} %{WORD:ModuleName}  %{GREEDYDATA:Message}" }
    }
  }

在patterns目录中包含该行的文件mylog:

MYLOGTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}

但它没有用,我在kibana中没有上述所需的字段,只有消息

2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net

我试过了:

if [type] == "autosuggest" {
    grok {
      match => { "message" => "%{GREEDYDATA:Message}" }
      add_field => [ "LogType", "%{LOGLEVEL}" ]
      add_field => [ "ModuleNAme", "%{WORD}" ]
    }
  }

并在kibana得到了这个:

LogType : %{LOGELEVEL}
ModuleName : %{WORD}
Message :  2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net

在标准的kibana消息字段中,我有上面的消息:

 2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net

虽然我希望只将消息的最后部分(模块名称后面的部分)作为消息。

我正在谷歌搜索,因为几个小时成功

请有人解释如何使用grok获取我想要的部分信息,以及如何实现我在这里尝试做的事情。

由于

2 个答案:

答案 0 :(得分:0)

看起来你遇到的问题与空间有关。如果你使用这样的模式:

%{DATESTAMP:DateTime}\s+%{LOGLEVEL:LogType}\s+%{WORD:ModuleName}\s+%{GREEDYDATA:Message}

它应该跳过那些多个空格。 \s+表示一个或多个空格(可以包含制表符)。

答案 1 :(得分:0)

最后我做了这个,它的确有效:

if [type] == "mylog" {
    grok {
      match => { "message" => "%{MYLOGDATETIME:my_time}\s+ %{LOGLEVEL:my_type}\s+ %{WORD:my_module_name}\s+ %{GREEDYDATA:my_msg}" }
      add_field => [ "DateTime", "%{my_time}" ]
      add_field => [ "LogType", "%{my_type}" ]
      add_field => [ "ModuleNAme", "%{my_module_name}" ]
      add_field => [ "Message", "%{my_msg}" ]
    }
  }