1、背景
在搭建了基于docker的ELK日志系统后,使用springboot(其实和什么开发的无关)开发web app,作为container运行在docker容器里,写入Logstash失败,但是本机运行调试的日志都可以写入。
因为docker的日志似乎必须使用 docker logs
指令来查看,记录到container目录下,也不知道为什么就是写入不了Logstash。
=======2021.03.11更新=======
偷懒的办法是直接把ip改为外网IP即可,费点云服务器流量
实际以下介绍的方法,日志格式有很大缺陷,不建议采用
2、解决办法
2.1、以前的错误配置
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="INFO"/>
<!-- 开发、测试环境 -->
<springProfile name="dev,test">
<appender name="LOGSTASH_dev" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>1.1.1.99:5000</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app_name":"app"}</customFields>
</encoder>
</appender>
<logger name="com.app" level="INFO">
<appender-ref ref="LOGSTASH_dev"/>
</logger>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<appender name="LOGSTASH_prod" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:5000</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"app_name":"app"}</customFields>
</encoder>
</appender>
<logger name="org.springframework.web" level="ERROR"/>
<logger name="com.yuren.yoga.app" level="WARN">
<appender-ref ref="LOGSTASH_prod"/>
</logger>
</springProfile>
</configuration>
启动web app
docker run --name api -d --net host my/api
2.1、正确配置
相当于直接输出日志到控制台,然后让docker输出到logstash。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<springProfile name="dev,test">
<logger name="org.springframework.web" level="INFO"/>
<logger name="com.app" level="INFO"/>
</springProfile>
<springProfile name="prod">
<root level="WARN"/>
<logger name="org.springframework.web" level="ERROR"/>
<logger name="com.app" level="WARN"/>
</springProfile>
</configuration>
启动时,加上几个参数就可以输出日志了
docker run --name api -d --net host --log-driver=syslog --log-opt syslog-address=tcp://127.0.0.1:5000 my/api
网友评论