gpt4 book ai didi

spring-boot - 将spring boot日志直接发送到logstash,没有文件

转载 作者:行者123 更新时间:2023-12-04 04:25:43 26 4
gpt4 key购买 nike

所以,我正在使用 kubernetes 和 spring boot 构建一个完整的云解决方案。

我的 spring boot 应用程序部署到一个容器并直接在控制台上登录。
由于容器是短暂的,我还想将日志发送到远程 logstash 服务器,以便它们可以被处理并发送到弹性。

通常我会在托管我的应用程序的服务器上安装一个 filebeat,我可以,但是没有任何内置方法可以让我避免在发送之前将日志写入文件吗?

目前我正在使用 log4j,但我认为切换到另一个记录器没有问题,只要它有一个“logbackappender”。

最佳答案

您可以尝试在 logback.xml 文件夹中添加 resources :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>

<configuration scan="true">
<include resource="org/springframework/boot/logging/logback/base.xml"/>

<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<param name="Encoding" value="UTF-8"/>
<remoteHost>localhost</remoteHost>
<port>5000</port>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app_name":"YourApp", "app_port": "YourPort"}</customFields>
</encoder>
</appender>

<root level="INFO">
<appender-ref ref="logstash"/>
</root>

</configuration>

然后添加 logstash encoder 依赖项:

pom.xml
 <dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>

logstash.conf
input {
udp {
port => "5000"
type => syslog
codec => json
}
tcp {
port => "5000"
type => syslog
codec => json_lines
}
http {
port => "5001"
codec => "json"
}
}

filter {
if [type] == "syslog" {
mutate {
add_field => { "instance_name" => "%{app_name}-%{host}:%{app_port}" }
}
}
}

output {
elasticsearch {
hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
index => "logs-%{+YYYY.MM.dd}"
}
}

关于spring-boot - 将spring boot日志直接发送到logstash,没有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57399354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com