docker 日志_阿里云日志服务docker容器小问题

我们一直在用阿里云的sls业务,主要是用以采集服务端的日志为主,有几次我发现突然不能采集上传了,然后看了看日志,然后发现还是很惊人的。这个阿里云的日志服务的agen的镜像做的其实很有问题。下面我来说一下有哪些问题:

  1. 没有使用stdout和stderr来处理日志

先说这个吧,阿里云的agent的运行方式如下:

我们看这里的时候没有什么问题,但是我们使用docker logs进行查看的时候,就会发现一个异常:

root@bj-meishi-dev-host:~# docker logs logtail
start umount useless mount points, /shm$|/merged$|/mqueue$ 
umount done
start logtail
ilogtail is running

这是使用docker logs的输出的结果,我们发现并没有什么有用的信息,经过询问得知在容器里面的/usr/local/ilogtail/下面有日志。并没有使用标准输出来处理,非常的不方便使用

2. 内部使用initd管理进程

我们看下它容器里面的pid为1的进程,我们发现实际上运行了一个shell脚本,找到这个shell脚本,我们看到这个shell脚本的内容:

#!/bin/bash

echo 'start umount useless mount points, /shm$|/merged$|/mqueue$ '
cat /proc/self/mountinfo | awk '{print $5}' | grep '^/' | grep -E '/shm$|/merged$|/mqueue$|volumes/kubernetes' | grep -v '/dev/' | xargs umount -l
echo 'umount done'

if [ "$ALIYUN_LOGTAIL_CONFIG" = "" ];then
    echo "no logtail config, use default config : /etc/ilogtail/conf/cn_hangzhou/ilogtail_config.json"
    cp /etc/ilogtail/conf/cn_hangzhou/ilogtail_config.json /usr/local/ilogtail/ilogtail_config.json
fi

echo start logtail
/etc/init.d/ilogtaild start

echo logtail status:
/etc/init.d/ilogtaild status

exit_handle()
{
    echo stop logtail
    /etc/init.d/ilogtaild stop
    echo stop logtail done, result $?
    exit 0
}

trap 'exit_handle' SIGTERM

while true
do
    sleep 3
done

这个诡异的脚本里面写了啥内容,只是用/etc/init.d的脚本去管理下进程,然后最后一句为了保持这个脚本一直在前台运行,写了一个while true,何必呢,为什么不直接把logtail程序放到前台让docker本身管理呢。

3. 程序异常没有抛出,自己程序本身内部不断尝试

更有意思的来了,如果我们docker daemon设置为live-restore: true的话,重启docker,是一定会触发logtail报错的,为什么呢,因为live-restore: true重启docker后,重建了docker.sock,原来的句柄没有释放,新的又读不到,简直是噩梦,询问了阿里工程师后给了我一个这样的答复:

1ab913a782e340af15f0dd69f5840c8c.png

想想也是很搞笑的,使用容器外部的一个健康检查去检查已经running的容器,自身的检查机制不好用。

不过目前使用外部脚本也是不好用,只能是重启docker也重启logtail了,或者尝试用systemd处理下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值