我如何在 logstash 5.1.2 中为 tomcat/java 配置多行

How i can config multiline in logstash 5.1.2 for tomcat/java

我使用 logstash、filebeat、elasticsearch 的 5.1.2 版本..."ELK"

我尝试从 tomcat 服务器发送日志(catalina.out 和 apps-java 日志)但是不能,因为 logstash 多行配置有问题 filter/codec。

我遵循这个指示
https://blog.lanyonm.org/articles/2014/01/12/logstash-multiline-tomcat-log-parsing.html


Logstash.conf是这样的:

input {
    beats {
    port => 9000
    }
}

filter {
  if [type] == "tomcat-pro" {
    codec => "multiline" {
      patterns_dir => "/opt/logstash/patterns"
      pattern => "(^%{TOMCAT_DATESTAMP})|(^%{CATALINA_DATESTAMP})"
      negate => true
      what => "previous"
    }
  }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "tomcat-pro"
    }   
}

Logstash接收filebeat的文件。
Filebeat.yml

filebeat.prospectors:
- input_type: log
  document_type: tomcat-pro
  paths:
  - /opt/tomcat-test/logs/catalina.out

当我启动服务时,控制台向我显示:

[2017-01-26T13:10:33,712][ERROR][logstash.agent           ] fetched an invalid config {:config=>"input {\n    beats {\n    port => 9000\n    }\n}\n\nfilter {\n  if [type] == \"tomcat-pro\" {\n    codec => \"multiline\" {\n      patterns_dir => \"/opt/logstash/patterns\"\n      pattern => \"(^%{TOMCAT_DATESTAMP})|(^%{CATALINA_DATESTAMP})\"\n      negate => true\n      what => \"previous\"\n    }\n  }\n}\n\noutput {\n    elasticsearch {\n        hosts => [\"localhost:9200\"]\n        index => \"tomcat-pro\"\n    }   \n}\n", :reason=>"Expected one of #, { at line 9, column 11 (byte 96) after filter {\n  if [type] == \"tomcat-pro\" {\n    codec "}

总结:

fetched an invalid config
reason=>"Expected one of #, { at line 9, column 11 (byte 96) after filter {\n  if [type] == \"tomcat-pro\" {\n    codec "}

我在 google 中读到建议在 filebeat 而不是在 logstash 中使用多行,但我配置得不是很好...

有人可以帮助我吗? :(

PD:我是西班牙语,对不起 "google translate"。 Si puedes responder en español, sería mucho mejor ;)

我认为在 Filebeat 中进行多行处理是可行的方法,因此我不会调试您发布的 Logstash 配置错误,而是展示一个 Filebeat 配置,其中 Filebeat 在发送事件之前合并了行。

如果您只将 Logstash 用于多行过滤器,那么您可以直接从 Filebeat 输出到 Elasticsearch。但是,如果您确实需要输出到 Logstash,请按照 instructions 配置 Filebeat 以与 Logstash 一起使用。

我在下面使用的模式还没有完全tested所以请根据实际日志进行测试。

filebeat.prospectors:
- document_type: catalina-wine-mixer
  paths:
  - /opt/tomcat-test/logs/catalina.out
  multiline.pattern: '^([0-9]{4}-[0-9]{2}-[0-9]{2})|([J|F|M|A|M|S|O|N|D][a-z]{2} [0-9]{1,2}, [0-9]{2})'
  multiline.negate: true
  multiline.match: after

output.elasticsearch:
  hosts: ['http://localhost:9200']

回答的模式对我来说不太适用,对于 catalina/tomcat 日志,我目前正在使用以下 filebeat.yml 模式:

multiline.pattern: '^[[:alpha:]]{3} [0-9]{2}, [0-9]{4}'
multiline.negate: true
multiline.match: after