当您使用Logtail采集容器(标准容器、Kubernetes)日志时,如果采集状态异常,可以根据本文进行问题排查、运行状态检查等运维操作。
排查机器组心跳是否异常
您可以通过检查机器组心跳的状态来判断容器中的Logtail是否已正确安装。
- 查看机器组心跳状态。 - 登录日志服务控制台。 
- 在Project列表区域,单击目标Project。  
- 在左侧导航栏中,选择。 
- 在机器组列表中,单击目标机器组。 
- 在机器组配置页面,查看机器组状态并记录心跳状态为OK的节点数。 
 
- 检查容器集群中Worker节点数。 - 连接集群。 
- 执行如下命令,查看集群中Worker节点数。 - kubectl get node | grep -v master- 系统会返回如下类似结果。 - NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp17enxc2us3624wexh2 Ready <none> 238d v1.10.4 cn-hangzhou.i-bp1ad2b02jtqd1shi2ut Ready <none> 220d v1.10.4
 
- 对比心跳状态为OK的节点数是否和容器集群中Worker节点数一致。根据对比结果选择排查方式。 - 机器组中所有节点的心跳状态均为Failed。 - 如果您要采集标准Docker容器日志,请参见采集Docker容器日志(标准输出/文件),检查 - ${your_region_name}、- ${your_aliyun_user_id}、- ${your_machine_group_user_defined_id}是否填写正确。
- 如果您使用的是阿里云Kubernetes集群,请提交工单。 
- 如果您使用的是自建Kubernetes集群,请参见通过Sidecar方式采集Kubernetes容器文本日志,检查 - {regionId}、- {aliuid}、- {access-key-id}和- {access-key-secret}是否已正确填写。- 如果填写错误,请执行 - helm del --purge alibaba-log-controller命令,删除安装包,然后重新安装。
 
- 机器组心跳状态为OK的节点数量少于集群中的Worker节点数量。 - 判断是否已使用YAML文件手动部署DaemonSet。 - 执行如下命令。如果存在返回结果,则表示您之前已使用YAML文件手动部署DaemonSet。 - kubectl get po -n kube-system -l k8s-app=logtail
- 根据实际值,配置${your_region_name}、${your_aliyun_user_id}、${your_machine_group_name}等参数。 
- 执行如下命令,更新文件。 - kubectl apply -f ./logtail-daemonset.yaml
 
- 其他情况,请提交工单。 
 
 
排查容器日志采集是否异常
如果您在日志服务控制台的预览或Logstore查询页面未查到日志,则说明日志服务未采集到您的容器日志。请确认容器状态,然后执行如下检查。
- 查看机器组心跳是否存在异常。具体操作,请参见排查机器组心跳是否异常。 
- 检查Logtail配置是否正确。 - 检查Logtail配置中的IncludeLabel、ExcludeLabel、IncludeEnv、ExcludeEnv等配置是否符合您的采集需求。 说明- 其中此处的Label为容器Label,即Docker inspect中的Label,不是Kubernetes中的Label。 
- 您可以将IncludeLabel、ExcludeLabel、IncludeEnv和ExcludeEnv配置临时去除,查看是否可以正常采集到日志。如果可以,则说明是上述参数的配置存在问题。 
 
其他运维操作
登录Logtail容器
- 普通Docker - 在宿主机上执行如下命令,查询Logtail容器。 - docker ps | grep logtail- 系统将返回如下类似结果。 - 223****6e registry.cn-hangzhou.aliyuncs.com/log-service/logtail "/usr/local/ilogta..." 8 days ago Up 8 days logtail-iba
- 执行如下命令,在Logtail容器内启动bash shell。 - docker exec -it 223****6e bash- 其中, - 223****6e为容器ID,请根据实际值替换。
 
- Kubernetes - 执行如下命令,查询Logtail的Pod。 - kubectl get po -n kube-system | grep logtail- 系统将返回如下类似结果。 - logtail-ds-****d 1/1 Running 0 8d logtail-ds-****8 1/1 Running 0 8d
- 执行如下命令,登录Pod。 - kubectl exec -it -n kube-system logtail-ds-****d -- bash- 其中, - logtail-ds-****d为Pod ID,请根据实际值替换。
 
查看Logtail的运行日志
Logtail日志存储在Logtail容器中的/usr/local/ilogtail/目录中,文件名为ilogtail.LOG和logtail_plugin.LOG。 
- 登录Logtail容器。具体操作,登录Logtail容器。 
- 打开/usr/local/ilogtail/目录。 - cd /usr/local/ilogtail
- 查看ilogtail.LOG和logtail_plugin.LOG文件。 - cat ilogtail.LOG cat logtail_plugin.LOG
Logtail容器的标准输出(stdout)说明
Logtail容器中的标准输出并不具备参考意义,请忽略以下标准输出内容。
start umount useless mount points, /shm$|/merged$|/mqueue$
umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount
umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount
......
xargs: umount: exited with status 255; aborting
umount done
start logtail
ilogtail is running
logtail status:
ilogtail is running查看Kubernetes集群中日志服务相关组件的状态
执行如下命令,查看日志服务的Deployment的状态和信息。
kubectl get deploy -n kube-system | grep -E 'alibaba-log-controller|loongcollector-operator'返回结果:
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
alibaba-log-controller   1/1     1            1           11d执行以下命令,查看关于DaemonSet资源的状态信息。
kubectl get ds  -n kube-system | grep -E 'logtail-ds|loongcollector-ds'返回结果:
NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR  AGE
logtail-ds   2         2         2       2            2           **ux           11d查看Logtail的版本号、IP地址、启动时间
- 在宿主机执行如下命令,查看Logtail的版本号、IP地址、启动时间。 - 相关信息存储在Logtail容器的 - /usr/local/ilogtail/app_info.json文件中。- kubectl exec logtail-ds-****k -n kube-system cat /usr/local/ilogtail/app_info.json- 系统将返回如下类似结果。 - { "UUID" : "", "hostname" : "logtail-****k", "instance_id" : "0EB****_172.20.4.2_1517810940", "ip" : "172.20.4.2", "logtail_version" : "0.16.2", "os" : "Linux; 3.10.0-693.2.2.el7.x86_64; #1 SMP Tue Sep 12 22:26:13 UTC 2017; x86_64", "update_time" : "2018-02-05 06:09:01" }
误删由CRD创建的Logstore后,如何处理
如果您删除了由CRD自动创建出的Logstore,则已采集的数据无法恢复,并且针对此Logstore的CRD配置会失效,您可以选择以下方案避免日志采集异常。
- 在CRD配置中使用其他Logstore,避免使用手动误删的Logstore。 
- 重启alibaba-log-controller Pod。 - 您可通过如下命令查找该Pod。 - kubectl get po -n kube-system | grep alibaba-log-controller