Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logstash 把少量的食物合二为一_Logstash_Logstash Grok - Fatal编程技术网

Logstash 把少量的食物合二为一

Logstash 把少量的食物合二为一,logstash,logstash-grok,Logstash,Logstash Grok,我有下面的日志条目和grok模式 日志: 格罗克模式: grok { #grok general pattern match => { "message" => "%{TIMESTAMP_ISO8601:logdate}%{SPACE}\|%{SPACE}%{LOGLEVEL:level}%{SPACE}\|%{SPACE}%{DATA:thread}%{SPACE}\|%{SPACE}%{DATA:serviceName}%{SPACE}\|%{SPACE}%{DATA:bundl

我有下面的日志条目和grok模式

日志:

格罗克模式:

grok {
#grok general pattern
match => {
"message" => "%{TIMESTAMP_ISO8601:logdate}%{SPACE}\|%{SPACE}%{LOGLEVEL:level}%{SPACE}\|%{SPACE}%{DATA:thread}%{SPACE}\|%{SPACE}%{DATA:serviceName}%{SPACE}\|%{SPACE}%{DATA:bundle}%{SPACE}\|%{SPACE}%{GREEDYDATA:logdetails}"
}
}   
#Grok to get GUID
grok {
match => {
"logdetails" => "(?<=GUID:).%{DATA:guid}(?=\s)" 
}
}
#Grok to get ChannelID
grok {
match => {
"logdetails" => "(?<=ChannelID:).%{DATA:channelID}(?=\s)"   
}
}
#Grok to get ReferenceID
grok {
match => {
"logdetails" => "(?<=ReferenceID:).%{DATA:referenceID}(?=\s)"   
}
}
grok{
#格罗克通用模式
匹配=>{
“消息”=>“%{TIMESTAMP_ISO8601:logdate}%{SPACE}\\\{SPACE}%{LOGLEVEL:level}%{SPACE}\\\{124;%{SPACE}%{DATA:thread}%{SPACE}\\\{SPACE}%{DATA:serviceName}%{SPACE SPACE}\\\\{SPACE SPACE}%{DATA:bundle}%{SPACE}%{SPACE}\\\\\{greedydydydedData:logdetails}”
}
}   
#摸索获得GUID
格罗克{
匹配=>{

“logdetails”=>”(?最好了解您正在处理的日志类型,但当需要担心的类型太多时(但它们保持相同的格式),我会怎么做:

  • 确定基本格式
  • 将base之后的所有内容都视为“msg”或有效负载
  • 使用要查找的字段解析有效负载
  • 每个消息的基本格式为
    时间戳|日志级别|线程

    LINE %{BASE}\s?\|\s?%{GREEDYDATA:msg}
    
    # Patterns
    BASE %{CUSTTIME:timestamp}\s?\|\s?%{WORD:loglevel}\s?\|\s?%{NONNEGINT:thread}
    CUSTTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{MILLI}
    MILLI (?:([1-9][0-9]{0,2}|0))
    
    然后,您只需在同一个模式文件中为要查找的字段添加模式,因为所有值都非常类似于key=value,而是使用冒号:

    COMMAVALUE (\s?(.*?(?=\s\w+:|$))\s?)
    
    # Fields
    GUID GUID:%{COMMAVALUE:guid}
    CHANNELID ChannelID:%{COMMAVALUE:channel_id}
    REFERENCEID ReferenceID:%{COMMAVALUE:reference_id}
    
    因此,您可以使用两个相邻的grok过滤器来执行此操作,一个用于提取
    msg
    有效负载,另一个用于从所述msg提取字段

    filter {
        grok {
            patterns_dir   => "/etc/logstash/patterns"
            match => { "message" => "%{LINE}" }
        }
        grok {
            patterns_dir => "/etc/logstash/patterns"
            break_on_match => false
            match => [
                "msg", "%{GUID}",
                "msg", "%{CHANNELID}",
                "msg", "%{REFERENCEID}"
            ]
        }
    }
    
    output {
        stdout { codec => "rubydebug" }
    }
    

    最好了解您正在处理的日志的类型,但是如果需要担心的类型太多(但它们的格式仍然相同),我会怎么做:

  • 确定基本格式
  • 将base之后的所有内容都视为“msg”或有效负载
  • 使用要查找的字段解析有效负载
  • 每个消息的基本格式为
    时间戳|日志级别|线程

    LINE %{BASE}\s?\|\s?%{GREEDYDATA:msg}
    
    # Patterns
    BASE %{CUSTTIME:timestamp}\s?\|\s?%{WORD:loglevel}\s?\|\s?%{NONNEGINT:thread}
    CUSTTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{MILLI}
    MILLI (?:([1-9][0-9]{0,2}|0))
    
    然后,您只需在同一个模式文件中为要查找的字段添加模式,因为所有值都非常类似于key=value,而是使用冒号:

    COMMAVALUE (\s?(.*?(?=\s\w+:|$))\s?)
    
    # Fields
    GUID GUID:%{COMMAVALUE:guid}
    CHANNELID ChannelID:%{COMMAVALUE:channel_id}
    REFERENCEID ReferenceID:%{COMMAVALUE:reference_id}
    
    因此,您可以使用两个相邻的grok过滤器来执行此操作,一个用于提取
    msg
    有效负载,另一个用于从所述msg提取字段

    filter {
        grok {
            patterns_dir   => "/etc/logstash/patterns"
            match => { "message" => "%{LINE}" }
        }
        grok {
            patterns_dir => "/etc/logstash/patterns"
            break_on_match => false
            match => [
                "msg", "%{GUID}",
                "msg", "%{CHANNELID}",
                "msg", "%{REFERENCEID}"
            ]
        }
    }
    
    output {
        stdout { codec => "rubydebug" }
    }