Logstash: как сделать ссылку на метку времени из предыдущего сообщения журнала

Я пытаюсь создать шаблон 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:\Softwares\logstash-1.5.4\bin\Error_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}: \r\n%{GREEDYDATA:Error_Message}\r"]
                            }
                        }
                        else{
                                grok {
                                     match => [ "message", "%{TIME:Error_time} \t%{WORD:Indicator} %{NOTSPACE:Error_Num} %{NOTSPACE:Error_Type}: \r\n%{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} 
}

person Prasad    schedule 07.10.2015    source источник


Ответы (2)


Вы можете использовать многострочный плагин

input {
        stdin {
        }
}

filter{
        multiline{
                pattern => "^%{TIME}"
                negate => "true"
                what => "previous"
        }
}

output {
  stdout{codec => "rubydebug"}
}

Все журналы, которые не начинаются с TIME, будут объединены с предыдущей строкой журнала.

После слияния многострочного журнала вы можете использовать grok для фильтрации нужного поля.

person Ben Lim    schedule 08.10.2015
comment
Спасибо, Бен, ценю ваш ответ, но есть одна проблема в том, что, как вы можете видеть в первой строке, есть 18.03.13, 10:14:25: запуск нового сеанса, и по вашему коду это также будет перемещено на предыдущую строку, которую я не знаю хотите, если есть какой-либо другой способ ... Также, если есть какой-либо способ, я могу добавить эту дату (18.03.13) в строку ошибок и предупреждений - person Prasad; 08.10.2015