【问题标题】:Grok match json field and valueGrok 匹配 json 字段和值
【发布时间】:2016-02-25 14:14:25
【问题描述】:

我使用 koajs 和 bunyan 将错误日志保存到我的服务器,然后我使用 filebeat 将它们发送到我的 logstash 应用程序。

我的错误日志被正确转发,但是我现在想创建一个过滤器,它将标签添加到特定日志。

{"name":"myapp","hostname":"sensu-node-dev","pid":227,"level":50,"err":{"message":"Cannot find module 'lol'","name":"Error","stack":"Error: Cannot find module 'lol'\n    at Function.Module._resolveFilename (module.js:339:15)\n    at Function.Module._load (module.js:290:25)\n    at Module.require (module.js:367:17)\n    at require (internal/module.js:16:19)\n    at Object.<anonymous> (/srv/www/dev.site/app.js:27:6)\n    at next (native)\n    at Object.<anonymous> (/srv/www/dev.site/node_modules/koa-compose/index.js:29:5)\n    at next (native)\n    at onFulfilled (/srv/www/dev.site/node_modules/co/index.js:65:19)\n    at /srv/www/dev.site/node_modules/co/index.js:54:5","code":"MODULE_NOT_FOUND"},"msg":"Cannot find module 'lol'","time":"2016-02-24T22:04:26.492Z","v":0}

现在,该特定日志中有趣的部分是 "err":{...}"name":"Error" 位。为简单起见,我只想创建一个过滤器来检测日志中的"name":"Error"(如果存在),然后将标签add_tag =&gt; ["error"] 应用于日志。

这是我的/etc/logstash/conf.d/logstash.conf 文件:

input {
  beats {
   port => 5044
   type => "logs"
  }
}
filter {
  grok { 
    type => "log"
    pattern => "???" // <--- have no idea what to do here
    add_tag => ["error"]
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200"
    sniffing => true
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
  http {
    http_method => "post"
    url => "<MY_URL>"
    format => "message"
    message => "{"text":"dis is workinz, you has error"}"
    tags => ["error"]
  }
}

我尝试了以下方法:

pattern => ""name":"Error""

但出现以下错误:

Error: Expected one of #, {, } at line 9, column 31 (byte 107) after filter {
  grok {
    match => { "message" => ""
You may be interested in the '--configtest' flag which you can
use to validate logstash's configuration before you choose
to restart a running system.

在任何地方都没有这种特定类型匹配的简单示例。

奖励:还有一个人是如何在 logstash 中逃脱的,我在这个主题上找不到任何东西?

【问题讨论】:

    标签: json logstash grok


    【解决方案1】:

    如果您只想查看消息中是否存在字符串,请尝试以下操作:

    if [message] =~ /"name":"Error"/ {
        mutate {
            add_tag { ... }
        }
    }
    

    如果您真的想将输入转换为字段,请查看 json 编解码器或过滤器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多