一、现象
1. docker部署springBoot项目,服务正常启动,使用docker -it启动,日志能够实时输出,
而docker logs -f --tail="100" 服务名 查看日志,却总是会延后几分钟,
2. 当调用该服务的一个接口大量输出日志时,输出到中途会突然停住,且该服务阻塞
一段时间后恢复正常,从docker logs看无异常,
3. 可能抛出异常 java.io.IOException: Broken pipe,(此报错因为后端服务返回结果超时,是衍生问题,并不关键)
二、原因&解决方法
原因:docker启动脚本设置了日志往loki里输出,但是loki却没有启动,而服务启动后一直往loki里写日志失败,进而导致服务阻塞, 通过 tail -1000f /var/log/messages 命令查看系统报错日志。
解决:启动脚本里去除 --log-driver=loki 等指定日志输出的4行 ,改为 -v /home/logs:/home/logs
修改启动脚本并重启后,docker logs 日志实时输出,且插入大量数据也恢复正常
三、总结&反思
此系统在客户处部署,之前部署的同事配置了loki等日志监控的工具但是离职了,交接质量稀烂,根本没提,经历了一次断电重启后,不知道要启动loki,进而导致的这个问题。
关键从 docker logs里看不到异常,并且在日志输出量较低时,系统也能正常使用,所以给排查问题带来了麻烦。
启动脚本里写的loki,排查错误时却无视这个loki配置,想当然以为这个无所谓,也不知道要通过 tail -1000f /var/log/messages 来看日志。。。
附:对 tail -f /var/log/...的介绍
tail -f /var/log/syslog 查看系统日志,帮助排查错误 - pig2的日志 - About云开发 - Powered by Discuz!