将Tomcat日志发送到Logstash



我正在尝试使用ELK堆栈实现一个集中式日志服务器:Elasticsearch,Logstash,Kibana。它将从许多应用程序接收日志。基本上我有一个使用具有以下配置的登录的Tomcat应用程序:

<appender name="ROLLING"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    [...]
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%date %-5level %logger - %msg%n</pattern>
    </encoder>
</appender>

<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <remoteHost>my_remote_host</remoteHost>
    <port>5000</port>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>

<root level="DEBUG">
    <appender-ref ref="ROLLING" />
    <appender-ref ref="STDOUT" />
    <appender-ref ref="stash" />
</root>

所以从理论上讲,这应该通过TCP发送所有日志...在my_remote_host我部署了 elasticsearch、logstash 和 kibana。它们似乎都有效。这是日志的配置:

input {
  stdin {
    type => "human"
  }
  tcp {
    port => 5000
    codec => "json"
    mode => "server"
  }
}
output {
  stdout {}
  elasticsearch {
    host => "my_remote_host"
  }
}

如果我在我的 logstash 实例中键入 stdin 的内容,它会成功索引我的输入。此外,如果我通过 http 向 my_remote_host:5000 发送请求,它会成功记录它收到的数据。

问题是logback似乎没有使用LogstashTcpSocketAppender发送任何数据。即使使用简单的套接字Appender,它也不起作用...我做错了什么吗?出于某种原因,它似乎拒绝写入该套接字,但它并没有抱怨任何事情。

在 catalina.out 中查找 logbacks 启动日志。 还要确保您没有任何防火墙(如果您在 AWS 中,则为安全组)

从Tomcat/logback向logstach发送日志时,我也使用不同的编解码器

    tcp {
      port => 4560
      codec => json_lines
      tags => ["app"]
    }

我在过滤器和输出部分中使用此标签,因为 logback 正在消耗来自多个位置的日志。

我对解决方案有点晚了,因为我今天遇到了同样的问题。以防将来有其他人遇到类似的问题。

我设置了登录<configuration debug="true">

您会注意到它无法写入输出流。所以我查找了 LogstashEncoder 使用的 Logback 库版本,它们是 1.1.6 的旧版本,而我使用的是 1.2.1。我切换到旧版本,一切正常。

相关内容

  • 没有找到相关文章

最新更新