如何对自建 K8S 日志采集进行排查?
按照自建 K8S 集群安装 LogListener 部署完成后,就可以通过创建 LogConfig 或者通过控制台去设置采集配置,开始日志采集了。
如果出现日志采集异常,首先按照以下流程进行自查。
1. 确认 logconfig 状态
执行
kubectl get logconfig
命令查看集群所有的采集配置。执行
kubectl get logconfig xxx -o yaml
命令查看具体某一个采集配置。查看 logconfig 同步的状态,status 非 Synced 状态都是异常的,异常信息会在 reason 里面,正常都是 success 的状态。
如上 logconfig 的状态同步是成功的,那么采集异常的原因就是其他方面的。如下图所示:
想要进一步了解同步错误的原因,可以查看 cls-provisioner 的日志。2. 查看 cls-provisioner 日志
执行以下命令确定 cls-provisioner 的 Pod 名称。
kubectl get pods -n kube-system -o wide |grep cls-provisioner
获取到 cls-provisioner 的 Pod 名称后, 执行以下命令查看 cls-provisioner 日志,并定位错误的具体原因。
kubectl logs cls-provisioner-xxx -n kube-system
注意
cls-provisioner 组件的作用是和 CLS 服务端通信,将 logconfig 采集配置经过转换,同步到 CLS 服务端,这样采集器才能从服务端获取到采集配置,进而进行正常日志采集。
3. 查看采集端日志
如果采集配置同步正常,但是日志还是采集有异常,可以具体看下采集端的相关日志。
查看软连是否建立成功。
我们以采集标准输出为例:
会在/var/log/tke-log-agent/<采集配置名称(logconfig 名称)>/stdout-docker-json 下创建需要采集的 Pod 的标准输出日志的软连,创建好之后才能正常采集。
我们是以 Docker 为例的,如果 runtime 是 containerd,那么路径是/var/log/tke-log-agent/<采集配置名称(logconfig 名称)>/stdout-containerd。
采集 contianer file 的软连建立方式如下:
/var/log/tke-log-agent/<采集配置名称(logconfig 名称)>/
如下图:
确认按照上面示例的软连是否建立 OK,如果未建立,则是有异常的。如果建立成功,则要继续看下采集器 loglistener 的日志。
执行以下命令,查看采集器 loglistener 日志。
kubectl get pods -n kube-system -o wide |grep tke-log-agent
首先找到日志采集异常 Pod 对应宿主机上的 tke-log-agent 的 Pod名称,然后执行以下命令查看 loglistener 日志。
kubectl logs tke-log-agent-xxx -n kube-system -c loglistener
如果已经采集到了 topic,但是检索不到,可以先看下是否打开 topic 的全文索引。