过滤Bluemix云代工厂ERR登录logstash

时间:2016-05-24 18:19:33

标签: containers logstash ibm-cloud elastic-stack docker-container

我目前正致力于在Bluemix容器上设置ELK堆栈。通过遵循此blog,我能够创建一个logstash Drain,并将Bluemix Web应用程序中的所有Cloud Foundry日志记录到logstash中。

有没有办法根据日志级别过滤掉日志?我试图在logstash输出中过滤掉ERR并将它们发送给Slack。

以下代码是logstash.conf文件的过滤器配置:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOG5424PRI}%{NONNEGINT:syslog5424_ver} +(?:%{TIMESTAMP_ISO8601:syslog5424_ts}|-) +(?:%{HOSTNAME:syslog5424_host}|-) +(?:%{NOTSPACE:syslog5424_app}|-) +(?:%{NOTSPACE:syslog5424_proc}|-) +(?:%{WORD:syslog5424_msgid}|-) +(?:%{SYSLOG5424SD:syslog5424_sd}|-|) +%{GREEDYDATA:syslog5424_msg}" }
    }

我正在尝试将Slack webhook添加到logstash.conf输出,以便在检测到具有ERR的日志级别时,错误消息将发布到Slack通道。

我的Slack HTTP帖子的输出conf文件看起来像这样的代码:

output {

 if [loglevel] == "ERR" {
        http {
            http_method => "post"
            url => "https://hooks.slack.com/services/<id>"
            format => "json"
            mapping => {
                "channel" => "#logstash-staging"
                "username" => "pca_elk"
                "text" => "%{message}"
                "icon_emoji" => ":warning:"
            }
        }
    }

    elasticsearch { }
}

来自Cloud Foundry的示例日志:

2016-05-25T13:14:51.269-0400[App/0]ERR npm ERR! There is likely additional logging output above.
2016-05-25T13:14:51.269-0400[App/0]ERR npm ERR! npm owner ls pca-uiapi
2016-05-25T13:14:51.274-0400[App/0]ERR npm ERR! /home/vcap/app/npm-debug.log
2016-05-25T13:14:51.274-0400[App/0]ERR npm ERR! Please include the following file with any support request:
2016-05-25T13:14:51.431-0400[API/1]OUT App instance exited with guid cc73db5d-   6e8c-4ff4-b20f-a69d7c2ba9f4 payload: {"cc_partition"=>"default", "droplet"=>"cc73db5d-6e8c-4ff4-b20f-a69d7c2ba9f4", "version"=>"f9fb3e09-f234-43d4-94b1-a337f8ad72ad", "instance"=>"9d7ad0585b824fa196a2a64e78df9eef", "index"=>0, "reason"=>"CRASHED", "exit_status"=>1, "exit_description"=>"app instance exited", "crash_timestamp"=>1464196491}
2016-05-25T13:16:10.948-0400[DEA/50]OUT Starting app instance (index 0) with guid cc73db5d-6e8c-4ff4-b20f-a69d7c2ba9f4
2016-05-25T13:16:36.032-0400[App/0]OUT > pca-uiapi@1.0.0-build.306 start /home/vcap/app
2016-05-25T13:16:36.032-0400[App/0]OUT > node server.js
2016-05-25T13:16:36.032-0400[App/0]OUT
2016-05-25T13:16:37.188-0400[App/0]OUT PCA REST Service is listenning on port: 62067
2016-05-25T13:19:02.241-0400[App/0]ERR at Layer.handle_error (/home/vcap/app/node_modules/express/lib/router/layer.js:71:5)
2016-05-25T13:19:02.241-0400[App/0]ERR at /home/vcap/app/node_modules/body-parser/lib/read.js:125:7
2016-05-25T13:19:02.241-0400[App/0]ERR at Object.module.exports.log (/home/vcap/app/utils/Logger.js:35:25)

有没有办法让这个工作?有没有办法检查每条消息的日志级别?我有点卡住,想知道你是否可以帮助我。

在Bluemix UI中,可以根据通道ERR或OUT过滤日志。我无法想象如何在logstash上做同样的事情。

感谢您调查此问题。

1 个答案:

答案 0 :(得分:0)

该文章中提供的grok旨在解析端口5000上的syslog消息。在所有syslog过滤器运行之后,您的应用程序日志(即您在问题中显示的示例日志行)是在@message字段中。

所以你需要另一个grok才能解析那条消息。所以在最后mutate之后你可以添加:

grok {
    match => {"@message" => "%{TIMESTAMP_ISO8601:timestamp}\[%{WORD:app}/%{NUMBER:num}\]%{WORD:loglevel} %{GREEDYDATA:log}"}
}

此过滤器运行后,您将拥有一个名为loglevel的字段,该字段将包含ERROUT,前一种情况将激活您的slack输出。

相关问题