elasticsearch,logstash,kibana,Logging,elasticsearch,Logstash,Kibana" /> elasticsearch,logstash,kibana,Logging,elasticsearch,Logstash,Kibana" />

Logging 如何在日志存储的分离字段中获取日志消息

Logging 如何在日志存储的分离字段中获取日志消息,logging,elasticsearch,logstash,kibana,Logging,elasticsearch,Logstash,Kibana,我正试图以一种特殊的方式从logstash获得我在kibana的日志,但没有成功 我将举例说明。然后,如果我的日志文件中有以下行: 2015-06-17 13:08:45 INFO connectionpool Starting new HTTPS connection (1): SSX9FSMULE.algolia.net MYLOGTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME} 我希望在kibana中有这些字段和值: DateT

我正试图以一种特殊的方式从logstash获得我在kibana的日志,但没有成功

我将举例说明。然后,如果我的日志文件中有以下行:

2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net
MYLOGTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}
我希望在kibana中有这些字段和值:

DateTime : 2015-06-17 13:08:45
LogType : INFO
ModuleName : connectionpool
Message :   connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net
LogType : %{LOGELEVEL}
ModuleName : %{WORD}
Message :  2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net
datetime字段实际上并不重要,因为默认情况下,ES包含时间戳

我尝试以下代码:

if [type] == "mylog" {
    grok {
      match => { "message" => "%{MYLOGTIME:DateTime} %{LOGLEVEL:LogType} %{WORD:ModuleName}  %{GREEDYDATA:Message}" }
    }
  }
patterns目录中的文件mylog包含以下行:

2015-06-17 13:08:45      INFO    connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net
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}" ]
    }
  }
在基巴纳得到了这个:

DateTime : 2015-06-17 13:08:45
LogType : INFO
ModuleName : connectionpool
Message :   connectionpool  Starting new HTTPS connection (1): SSX9FSMULE.algolia.net
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获得我想要的部分信息,以及如何实现我在这里的目标


谢谢

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

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

它应该跳过这些多个空格
\s+
表示一个或多个空格(可以包括选项卡)。

最后我这样做了,它可以工作:

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}" ]
    }
  }

是的,Alcanzar,我试过这个:
if[type]=“mylog”{grok{match=>{“message”=>“%{MYLOGDATETIME:time}\s+%{LOGLEVEL:type}\s+%{WORD:module}\s+%{greedyddata:msg}}add齌field=>[“DateTime”,“{time}]add field=>[“LogType”,“{type}]add field add“Message”、“%{msg}”]}
但它不起作用。现在我的所有字段都在kibana中,没有DateTime字段(我不知道为什么)。但是所有这些字段(LogType、ModuleName、Message)都不包含任何数据。它们显示emty行。还请注意,它们提供了一个%{SPACE}模式,即\s*。