用于logstash的自定义grok过滤器

时间:2017-06-18 07:55:38

标签: elastic-stack logstash-grok

我有一个如下所示的日志文件,我需要使用grok过滤器进行解析。请引导我了解过滤器的内容

登录

.error()

预期过滤器

id:twsoper  AIX230 
JOB:load_data /jobs/system/load_data.bat 2017-05-14
trying to connect to database
connected to database Target_DB

1 个答案:

答案 0 :(得分:1)

使用grok时,您需要知道正则表达式(用于模式匹配)。

此外,在将其放入logstash之前,您需要使用该模式,因为这里有一些在线模式测试人员

  • https://grokdebug.herokuapp.com/
  • http://grokconstructor.appspot.com/do/match

    现在开始你的例子。假设所有这些都是文件中的单独行,您将最终获得弹性搜索所有这些文档。除非您在filebeat或logstash中查看多行,以将多行合并为一条消息。

    filter {
        grok {
            # get the entire message 
            match => ["message", "%{GREEDYDATA:message}"]
            overwrite => [ "message" ] 
            # get ID and server
            match => ["message", "id:%{WORD:ID}\s+%{WORD:server}"]
            # get Date
            match => ["message", "JOB.+%{DATE:Date}"]
            #get database
            match => ["message", "connected to database %{WORD:database}"]
        }
    }
    

    如果您不想使用多行,则需要if语句匹配消息然后匹配字段,如下所示:

    filter {
        #if line starts with id 
        if [message] =~ /^id/ {
            grok {
                # get ID and server
                match => ["message", "id:%{WORD:ID}\s+%{WORD:server}"]
        }
        #if line starts with JOB
        if [message] =~ /^JOB/ {
            grok {
                # get Date
                match => ["message", "JOB.+%{DATE:Date}"]
        }
        .
        .
        .
        .
    }
    
  • 相关问题