我如何在 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
我使用 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