我想创建一个像这样的grok模式
********************************************************
18.03.13, 10:14:25: Starting new session
********************************************************
12:43:38 Warning: X-Ray blocked because signal XRAY_ENABLE_FPD is high.
13:31:08 Error 770.999 (DigitizerPt1000Pixium):
OffsetCalibration: mode not active
13:31:21 Error 770.999 (DigitizerPt1000Pixium):
Cannot stop grabbing
然而13:31:08 Error 770.999 (DigitizerPt1000Pixium):
OffsetCalibration: mode not active
这是一个日志条目,而不是两个(grok将其视为两个不同的条目)有没有任何图案在grok或任何其他过滤器,我可以使用?
我还想将第一行给出的日期与警告和错误日志条目相关联
注意:我已经为它创建了grok模式,只有以下问题没有解决。
我已经尝试使用以下代码(对于这里给出的整个日志文件)。但是我无法将第一行的日期与错误和警告条目
联系起来。input {
file {
path => "E:Softwareslogstash-1.5.4binError_log_29092015.txt"
start_position => beginning
sincedb_path => "E:/sincedb"
}
}
filter {
multiline {
pattern => "^%{NOTSPACE}"
what => previous
}
if "Starting" in [message]{
grok {
match => [ "message", "%{DATE_EU:Start_date}, %{TIME:Start_time}: %{WORD:session_status}"]
}
}
else if "Terminating" in [message] {
grok{
match => [ "message", "%{DATE_EU:Terminate_date}, %{TIME:Terminate_time}: %{WORD:session_status}"]
}
}
else if "Warning" in [message] {
grok {
match => [ "message", "%{TIME:Warning_time} t%{WORD:Indicator}: %{GREEDYDATA:Warning_Message}r"]
}
}
else if "Error" in [message] {
if "Generator" in [message]{
grok{
match => ["message","%{TIME:Error_time} t%{WORD:Indicator} G %{NOTSPACE:Error_Num} %{NOTSPACE:Error_Type}: rn%{GREEDYDATA:Error_Message}r"]
}
}
else{
grok {
match => [ "message", "%{TIME:Error_time} t%{WORD:Indicator} %{NOTSPACE:Error_Num} %{NOTSPACE:Error_Type}: rn%{GREEDYDATA:Error_Message}r"]
}
}
}
else if "Invalid" in [message]{
grok {
match => [ "message", "%{TIME:InvalidCode_time} t%{WORD:Type} Code. %{GREEDYDATA:InvalidCode_Message}"]
}
}
else if "Sedecal" in [message]{
grok {
match => [ "message", "%{TIME:Sedecal_time} t%{GREEDYDATA:Type}: %{GREEDYDATA:InvalidCode_Message}"]
}
}
else if "UIMS" in [message]{
grok {
match => [ "message", "%{TIME:UIMSInternalState_time} t%{GREEDYDATA:Type}: %{GREEDYDATA:UIMSInternalState_Message}"]
}
}
else {
drop{}
}
}
output {
stdout{ codec => rubydebug}
elasticsearch{
cluster => "My_ProjectC"
host => localhost
codec => rubydebug}
}
你可以使用多行插件
input {
stdin {
}
}
filter{
multiline{
pattern => "^%{TIME}"
negate => "true"
what => "previous"
}
}
output {
stdout{codec => "rubydebug"}
}
所有不以TIME开头的日志将被合并到前一个日志行。
合并多行日志后,您可以使用grok来过滤您想要的字段
您需要的不是合并,而是记忆 logstash过滤器插件。它让您记住以前日志消息中的日期和时间,以便稍后将其添加为字段。已经有一个SO线程显示了它的基本用途。
记忆插件不再显示在当前过滤器插件列表中,但它应该仍然可以在logstash 2中使用