配置Logstash以获取Appid,响应时间

时间:2015-08-04 03:40:07

标签: logstash logstash-grok logstash-configuration

我正在尝试将时间戳,AppName(mm1-spring-music.example.com)和Proc ID作为[RTR],AppID(存在于app_id之后的日志中),响应时间(存在于根据Logstash中的Syslog 5424格式

,从以下日志中的response_time :)之后进行日志记录
2015-08-03T09:51:15.000+00:00 [RTR] OUT mm1-spring-music.example.com - [03/08/2015:09:51:15 +0000] "GET /assets/templates/status.html HTTP/1.1" 200 428 "http://mm1-spring-music.example.com/" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36" X.X.X.XX:37610 x_forwarded_for:"X.X.X.XX, X.X.X.XX" vcap_request_id:5ad09855-f9f3-46a9-7fa7-2095952faf78 response_time:0.002043376 app_id:08be9fc8-c7a3-4613-bf12-1a9c7d98cc27

我对logstash非常新,使用以下配置我无法获得所需的输出任何建议会有很大的帮助

input {
  stdin{}
}
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}" }
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
    if !("_grokparsefailure" in [tags]) {
      mutate {
        replace => [ "@source_host", "%{syslog_hostname}" ]
        replace => [ "@message", "%{syslog_message}" ]
      }
    }
    mutate {
      remove_field => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
    }
  }
}
output {
 # elasticsearch {
  #  host => "X.X.0.103"
#   protocol => "http"
 # }

stdout { codec => rubydebug }
#stdout { }
}

2 个答案:

答案 0 :(得分:1)

我建议使用此网站来测试grok过滤器: http://grokconstructor.appspot.com/do/match

答案 1 :(得分:0)

您的示例输入以日期开头,但您的示例grok模式以syslog优先级开头。当你继续前进时,我不会看到主机名周围的括号。

使用grok最好的想法是从调试器开始。从左到右,一次一个字段,让每个字段在工作之前工作。