当前位置: 首页 > 面试题库 >

我如何在Logstash 5.1.2中为Tomcat / Java配置多行

漆雕绍晖
2023-03-14
问题内容

我使用logtash,filebeat,elasticsearch的5.1.2版本…“ ELK

我尝试从tomcat服务器发送日志(catalina.out和apps-
java日志),但是无法完成,因为存在logstash多行过滤器/编解码器的配置问题。

我遵循以下说明
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:我是西班牙人,对“谷歌翻译”感到抱歉。Si puedes响应者,西班牙语,大量


问题答案:

我认为在Filebeat中进行多行处理是解决问题的方法,因此与其调试您发布的Logstash配置错误,不如我展示一个Filebeat配置,其中Filebeat在发送事件之前将这些行合并在一起。

如果仅将Logstash用于多行过滤器,则可以直接从Filebeat输出到Elasticsearch。但是,如果确实需要输出到Logstash,请按照说明配置与Logstash一起使用的Filebeat。

我在下面使用的模式尚未经过全面测试,因此请对照实际日志进行测试。

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']


 类似资料:
  • 问题内容: 阅读Jeff关于保护您的Cookie的博客文章:HttpOnly。我想在我的Web应用程序中实现HttpOnly cookie。 您如何告诉tomcat在会话中仅使用http cookie? 问题答案: 从Tomcat 6.0.19和Tomcat 5.5.28开始支持httpOnly。 请参阅更改日志条目以获取错误44382。 错误44382的最后一条评论指出:“此错误已应用于5.5.

  • 我将Web服务部署为Tomcat 8.0.24上的Web应用程序(war)。应用程序罐已经过测试,它们工作正常。现在,为了配置和测试log4j,我引发了一个运行时错误(没有连接db)。 我试图只为应用程序日志设置log4j2(而不是tomcat),并使用Netbeans 8.0.2构建war。 我在类路径中包含了以下罐子: 和log4j2。WEB-INF中的xml,只有根记录器配置为捕获来自WEB

  • 我又不明白该怎么办了。我已经重复了两天了。拜托,有什么帮忙吗?

  • 我有一个Windows服务器,目前运行两个不同的Tomcat实例作为Windows服务。两者都有自己的目录,并且在它们之间不共享任何文件。通过设置向导安装的第一个Tomcat实例设置了CATALINA_HOME和CATALINA_BASE环境变量。第二个以相同的方式安装。它忽略全局设置并作为独立的实例运行。 问题来了。我需要安装一个自带Tomcat的产品。我已经完成了产品的安装,但是现在我需要配置

  • 我最近将tomcat应用程序从一台Linux服务器迁移到另一台。从那以后,我在新服务器上面临一个新的文件创建问题。在新服务器中,当我尝试创建文件时失败,这在旧服务器中运行良好: 为了调查这个问题,我使用以下工具打印了工作目录: 这个调试揭示了问题背后的根本原因:旧服务器返回:var/lib/tomcat,而新服务器返回:/(根目录),因为tomcat用户没有(也不应该)对根目录的写入权限,所以无法

  • 在建造中。我有: