标签: logstash-grok

如何处理不匹配的Logstash grok过滤器

我想知道使用Logstash Grok过滤器的最佳方法是什么.我有一些特定日志条目的过滤器,不适用于所有条目.那些不适用的标签始终生成_grokparsefailure标签.例如,我有一个grok过滤器,用于每个日志条目,它工作正常.然后我有另一个过滤器,用于带有回溯的错误消息.回溯过滤器为每个没有回溯的日志条目抛出grokparsefailure.

如果没有匹配而不是添加parsefailure标记,我宁愿让它只是通过规则.我使用parsefailure标签来查找未正确解析的内容,而不是与特定过滤器不匹配的内容.也许只是命名"解析失败"才能得到我.对我而言,这意味着过滤器出现了问题(例如格式错误),而不是它不匹配.

所以问题是,我该如何处理?

  • 使用过滤器模式可选吗?

  • (ab)使用tag_on_failure选项将其设置为空[]

  • 使用诸如"if ifback in message"之类的东西使过滤器有条件

  • 还有别的什么我不考虑?

提前致谢.

编辑

我采取了在过滤器周围添加条件的路径:

    if [message] =~ /took\s\d+/ {
        grok {
            patterns_dir => "/etc/logstash/patterns"
            match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
            add_tag => [ "stats", "servicetime" ]
        }
    }
Run Code Online (Sandbox Code Playgroud)

仍然对反馈感兴趣.什么被认为是"最佳实践"?

filter logstash logstash-grok

50
推荐指数
3
解决办法
6万
查看次数

在Elasticsearch中将字符串的默认映射更改为"未分析"

在我的系统中,数据的插入总是通过logstash通过csv文件完成.我从未预先定义映射.但每当我输入一个字符串,它总是被认为是analyzed,作为结果的条目一样hello I am Sinha被分为hello,I,am,Sinha.无论如何我可以更改elasticsearch的默认/动态映射,以便所有字符串,无论索引如何,无论类型如何都被认为是not analyzed?或者有没有办法在.conf文件中设置它?说我的conf文件看起来像

input {  
      file {
          path => "/home/sagnik/work/logstash-1.4.2/bin/promosms_dec15.csv"
          type => "promosms_dec15"
          start_position => "beginning"
          sincedb_path => "/dev/null"
      }
}
filter {

    csv {
        columns => ["Comm_Plan","Queue_Booking","Order_Reference","Multi_Ordertype"]
        separator => ","
    }  
    ruby {
          code => "event['Generation_Date'] = Date.parse(event['Generation_Date']);"
    }

}
output {  
    elasticsearch { 
        action => "index"
        host => "localhost"
        index => "promosms-%{+dd.MM.YYYY}"
        workers => 1
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要所有的字符串 …

elasticsearch logstash logstash-grok elasticsearch-mapping

35
推荐指数
3
解决办法
4万
查看次数

如何使用logstash过滤器处理多行日志条目?

背景:

我有一个自定义生成的日志文件,具有以下模式:

[2014-03-02 17:34:20] - 127.0.0.1|ERROR| E:\xampp\htdocs\test.php|123|subject|The error message goes here ; array (
  'create' => 
  array (
    'key1' => 'value1',
    'key2' => 'value2',
    'key3' => 'value3'
  ),
)
[2014-03-02 17:34:20] - 127.0.0.1|DEBUG| flush_multi_line
Run Code Online (Sandbox Code Playgroud)

第二个条目[2014-03-02 17:34:20] - 127.0.0.1|DEBUG| flush_multi_line是一个虚拟行,只是为了让logstash知道多行事件结束,稍后将删除此行.

我的配置文件如下:

input {
  stdin{}
}

filter{
  multiline{
      pattern => "^\["
      what => "previous"
      negate=> true
  }
  grok{
    match => ['message',"\[.+\] - %{IP:ip}\|%{LOGLEVEL:loglevel}"]
  }

  if [loglevel] == "DEBUG"{ # the event flush  line
    drop{}
  }else if [loglevel] == "ERROR"  { …
Run Code Online (Sandbox Code Playgroud)

regex multiline logstash logstash-grok

27
推荐指数
3
解决办法
4万
查看次数

如何在grok/logstash中匹配换行符?

我有一个远程机器,它结合了多行事件并通过伐木工人协议发送它们.

是什么东西看起来像这样:

{
     "message" => "2014-10-20T20:52:56.133+0000 host 2014-10-20 15:52:56,036 [ERROR   ][app.logic     ] Failed to turn message into JSON\nTraceback (most recent call last):\n  File \"somefile.py", line 249, in _get_values\n    return r.json()\n  File \"/path/to/env/lib/python3.4/site-packages/requests/models.py\", line 793, in json\n    return json.loads(self.text, **kwargs)\n  File \"/usr/local/lib/python3.4/json/__init__.py\", line 318, in loads\n    return _default_decoder.decode(s)\n  File \"/usr/local/lib/python3.4/json/decoder.py\", line 343, in decode\n    obj, end = self.raw_decode(s, idx=_w(s, 0).end())\n  File \"/usr/local/lib/python3.4/json/decoder.py\", line 361, in raw_decode\n    raise ValueError(errmsg(\"Expecting value\", s, err.value)) from None\nValueError: Expecting value: line 1 column 1 (char 0), …
Run Code Online (Sandbox Code Playgroud)

regex logstash logstash-grok

24
推荐指数
2
解决办法
3万
查看次数

Logstash日志文件中的可选字段

我正在尝试使用grok解析日志文件

日志文件的每一行都有以逗号分隔的字段:

13,home,ABC,Get,,Private, Public,1.2.3 ecc...
Run Code Online (Sandbox Code Playgroud)

我正在使用这样的匹配: match => [ "message", "%{NUMBER:requestId},%{WORD:ServerHost},%{WORD:Service},...

我的问题是:我可以允许可选字段吗?有时一些文件可能是空的,,

有没有匹配像这样的字符串的模式2.3.5?(一种版本号)

regex logstash logstash-grok

23
推荐指数
1
解决办法
3万
查看次数

用于logstash的grok的SYNTAX列表

grok模式的语法是%{SYNTAX:SEMANTIC}.如何生成所有可用SYNTAX关键字的列表?我知道我可以使用grok调试器从文本中发现模式.但是有一个我可以扫描的列表吗?

logstash logstash-grok

17
推荐指数
2
解决办法
3万
查看次数

Logstash - 从json文件中删除深字段

我有JSON文件,我通过logstash发送给ES.我想在JSON中删除1个字段(它是深字段) - 仅当值为NULL时才会删除.

JSON的一部分是:

"input": {
        "startDate": "2015-05-27",
        "numberOfGuests": 1,
        "fileName": "null",
        "existingSessionId": "XXXXXXXXXXXXX",
        **"radius": "null",**
        "nextItemReference": "51",
        "longitude": -99.12,
        "endDate": "2015-05-29",
        "thumbnailHeight": 200,
        "thumbnailWidth": 300,
        "latitude": 19.42,
        "numOfRooms": "1"
    },
Run Code Online (Sandbox Code Playgroud)

logstash.conf文件的一部分是:

if [input.radius] == "null" {
                mutate {
                        remove_field => [ "input.radius" ]
                }
        }
Run Code Online (Sandbox Code Playgroud)

当然这是在过滤器内部.

如果值为null,如何删除此字段?

logstash logstash-grok logstash-configuration

16
推荐指数
1
解决办法
9141
查看次数

使用Grok for Logstash解析Apache2错误日志

我试图解析我的apache2错误日志,我有点麻烦..它似乎没有匹配过滤器.我很确定时间戳是错误的,但我不确定,我真的找不到任何文件来解决它.另外,有没有办法让fields.errmsg我得到什么@message

日志

[Wed Jun 26 22:13:22 2013] [error] [client 10.10.10.100] PHP Fatal error:  Uncaught exception '\Foo\Bar'
Run Code Online (Sandbox Code Playgroud)

托运人配置

input {
        file {
                'path' => '/var/log/apache2/*-error.log'
                'type' => 'apache-error'
        }

}

filter {
        grok {
                type => "apache-error"
                pattern => "\[%{HTTPDATE:timestamp}\] \[%{WORD:class}\] \[%{WORD:originator} %{IP:clientip}\] %{GREEDYDATA:errmsg}"
        }
}


output {
        stdout {}
        redis {
                'data_type' => 'list'
                'host' => 'logstash.server.net'
                'key' => 'logstash'
        }
}
Run Code Online (Sandbox Code Playgroud)

apache apache2 logstash logstash-grok

14
推荐指数
2
解决办法
3万
查看次数

Logstash关闭文件描述符?

背景:

我们rsyslog创建了日志文件目录,例如:/var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME 因此,多个服务器将不同日期的日志分发到中心位置.

现在阅读这些日志并将它们存储在elasticsearch中进行分析我的logstash配置文件是这样的:

file{
   path => /var/log/rsyslog/**/*.log
}
Run Code Online (Sandbox Code Playgroud)

问题 :

现在,随着目录中日志文件数量的增加,logstash会为新文件打开文件描述符(FD),并且不会为已读取的日志文件释放FD.由于日志文件是按日期生成的,因此一旦读取它,之后就没有用了,因为在该日期之后它不会被更新.

我已将文件开口限制增加到65K in /etc/security/limits.conf

我们可以在一段时间后让logstash关闭句柄,这样打开的文件句柄数量不会增加太多?

elasticsearch logstash logstash-grok logstash-file

13
推荐指数
1
解决办法
1575
查看次数

logstash _grokparsefailure问题

我遇到了grok解析的问题.在ElasticSearch/Kibana中,我匹配的行带有标签_grokparsefailure.

这是我的logstash配置:

input { 
    file { 
     type => logfile 
     path => ["/var/log/mylog.log"] 
    } 
  } 
filter { 
    if [type] == "logfile" 
    { 
      mutate {
      gsub => ["message","\"","'"]
      }  

    grok 
        { match => { "message" => "L %{DATE} - %{TIME}: " } } 
    } 
} 

output { 
   elasticsearch { host => localhost port => 9300 } 
}
Run Code Online (Sandbox Code Playgroud)

线条/图案我想要匹配:L 08/02/2014 - 22:55:49:日志文件已关闭:"已完成"

我在http://grokdebug.herokuapp.com/上尝试了调试器,它运行正常,我的模式匹配正确.

我想解析的行可能包含双引号,我读过可能存在grok处理和转义它们的问题.所以我试图改变以替换"与'以避免问题,但没有运气.

有任何想法吗 ?我该怎么调试呢?

谢谢

logstash logstash-grok

12
推荐指数
1
解决办法
3万
查看次数