一、背景
浏览器访问konga没有响应,习惯性地认为是磁盘空间满导致,因为kong是运行正常的。
当然磁盘满,对于这个机器来说,安装了Kong/Konga、docker的几个容器,并没有部署java或者其他语言的项目。
所以有可能是下面几个导致:
- kong的log日志
- docker日志
他俩都不是,后面使用Linxu大杀器,找到了漏网之鱼konga,它是一个Nodejs前端程序,没想到蛀虫会是它!!!
二、排查过程
1、Kong日志治理
这个我们做过日志治理,和jvm日志一样。见下图
- 具体kong网关的日志如何治理,本文不再赘述。
2、docker日志治理
我们已做了全局设置。
vi /etc/docker/daemon.json
- log-driver
- log-opts
{
"registry-mirrors": ["https://nbi3meca.mirror.aliyuncs.com"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3",
"labels": "production_status",
"env": "os,customer"
},
"insecure-registries" : [
"harbor.xx.cloud"
]
}
进一步确认,切到docker日志所在的目录,也证实docker容器的日志治理正常。
注意:下面的10d03463ced439106824202b443f28a32b46529f2be2b7a76a1400846889495e-json.log这个便是docker容器的日志文件。
[root@APIGateWay containers]# cd 10d03463ced439106824202b443f28a32b46529f2be2b7a76a1400846889495e/
[root@APIGateWay 10d03463ced439106824202b443f28a32b46529f2be2b7a76a1400846889495e]# ll -h
total 23M
-rw-r----- 1 root root 23M Jun 14 14:47 10d03463ced439106824202b443f28a32b46529f2be2b7a76a1400846889495e-json.log
-rw------- 1 root root 3.1K May 11 09:31 config.v2.json
-rw-r--r-- 1 root root 1.6K May 11 09:31 hostconfig.json
-rw-r--r-- 1 root root 13 May 11 09:31 hostname
-rw-r--r-- 1 root root 174 May 11 09:31 hosts
drwx------ 2 root root 6 May 11 09:31 mounts
-rw-r--r-- 1 root root 54 May 11 09:31 resolv.conf
-rw-r--r-- 1 root root 71 May 11 09:31 resolv.conf.hash
[root@APIGateWay 10d03463ced439106824202b443f28a32b46529f2be2b7a76a1400846889495e]#
3、使用原始的Linux日志排查方案
切到顶层目录下,
du -a|sort -rn|head -5
发现在./konga下有个40多G的庞然大物。nohup.log
它又是怎么来的呢??
三、konga的安装
1、下载
把官网的https://github.com/pantsel/konga下载到本地。
2、运行
它已经提供了一个start.sh,但是不是后台运行的,需要我们简单封装一把。
于是有了下面的shell命令:
nohup node --harmony app.js > nohup.log &
因为start.sh也就是一个核心语句“node --harmony app.js”,这里只是把它nohup了一把。
可是,这里必须要说可是,它会输入一个日志文件nohup.log。
而我们任由它野蛮生长,也就有了今天的恶果。
既然konga的日志没有什么作用,就不要保存到磁盘了,我决定修改一把run.sh命令,如下:
nohup node --harmony app.js >/dev/null 2>&1 &
这样就一劳永逸了,都不会治理Konga的日志了。
四、konga的start.sh完整文本
[root@APIGateWay konga]# cat start.sh
#!/bin/bash
#bash start.sh -c prepare -a postgres -u postgresql://postgres:postgres@localhost:5432/konga
if [ $# -eq 0 ]
then
# If no args are set, start the app as usual
node --harmony app.js
else
while getopts "c:a:u:" option
do
case "${option}"
in
c) COMMAND=${OPTARG};;
a) ADAPTER=${OPTARG};;
u) URI=${OPTARG};;
esac
done
# echo $COMMAND
# echo $ADAPTER
# echo $URI
# echo $PORT
if [ "$COMMAND" == "prepare" ]
then
node ./bin/konga.js $COMMAND --adapter $ADAPTER --uri $URI
else
echo "Invalid command: $COMMAND"
exit
fi
fi