【问题标题】:What is the pattern to match complete input in Logstash?在 Logstash 中匹配完整输入的模式是什么?
【发布时间】:2016-07-18 07:04:46
【问题描述】:

我正在使用带有 filebeat 的 ELK 堆栈。

filebeat.conf

filebeat:
  prospectors:
    -
      paths:
        - /home/ubuntu/logs_*
      input_type: log
output:
  logstash:
    hosts: [${LOGSTASH_PORT_5044_TCP_ADDR}]
    index: filebeat
  console:
    pretty: true

这是从文件 logs_test

传递日志

示例日志

{"name":"test","statusCode":0,"deployment":"production","hostname":"ip-random-address","level":30,"jobName":"testJob","date":"2016-07-18T03:15:02.075Z","jobType":"script","msg":"","time":"2016-07-18T03:15:02.076Z","v":0}

当字段 statusCode 为 1 时,我想对外部 URL 进行 HTTP 调用

整个日志对象正在传递给logstash。

我的 logstash 配置

input {
    beats { 
        port => 5044
        codec => "json"
    }
}



output {
  if ([statusCode] and [statusCode] == 1) {
        http {
            format=>"message"
            http_method=>"post"
            url=>"http://www.example.com"
            message=>'{"text": "%{some_pattern_matcher}"}'
             }
      }
}

[问题] "some_pattern_matcher" 应该是什么来将所有字段发送到 HTTP 请求。

PS:%{mesage} 不起作用。

【问题讨论】:

  • 你试过%{source}吗?

标签: logstash logstash-grok elastic-stack


【解决方案1】:
input {
    beats { 
        port => 5044
        codec => "json"
    }
}
filter{
     grok{
          match => { "message" => "%{GREEDYDATA:data}" }
     }
}
output {
  if ([statusCode] and [statusCode] == 1) {
        http {
            format=>"message"
            http_method=>"post"
            url=>"http://www.example.com"
            message=> %{data}
           }
      }
}

我还没试过。所以试试这个,让我知道这个解决方案是否有效。如果不是,请发布您遇到的错误。

【讨论】:

  • 当然,让我试试。先试试 %{source}。
  • 我认为应该是“%{data}”。如果这也不起作用,那么我们可以考虑另一种方法。
  • 我实际上尝试了“%{data}”,因为我有其他以这种方式工作的字段“%{fieldName}”。但是,“%{data}”不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多