概述

当您使用Logtail采集容器(Kubernetes)的日志时,如果采集状态异常,可以通过本文进行排查问题、检查运行状态等运维操作。

详细信息

查看机器组和日志采集是否异常

查看机器组心跳是否存在异常

您可以通过检查机器组心跳状态的方式,判断容器内是否已正确安装Logtail。

  1. 查看机器组的心跳状态。
    1. 登录日志服务控制台,单击Project名称。
    2. 单击页面左侧的机器组,选择目标机器组名称。
    3. 机器组配置页面,查看机器组状态记录心跳状态为OK的节点数。
  2. 检查集群中Worker节点的数量。
    1. 登录Kubernetes集群的Master节点,请参见通过kubectl连接Kubernetes集群
    2. 执行以下命令,查看集群中Worker节点的数量。
      kubectl get node | grep -v master
      系统显示类似如下。
      NAME                                 STATUS    ROLES    AGE     VERSION 
      cn-hangzhou.i-bp17XXXXXXX3624wexh2 Ready <none> 238d v1.10.4
      cn-hangzhou.i-bp1aXXXXXXXqd1shi2ut Ready <none> 220d v1.10.4
  3. 对比心跳状态为OK的节点数量,是否和集群中Worker节点的数量一致。根据结果选择以下对应的排查方式:
    • 机器组中所有节点的心跳状态均为Failed
      • 若您使用标准Docker日志采集流程,请参见参数说明,检查${your_region_name}${your_aliyun_user_id}${your_machine_group_user_defined_id}参数是否填写正确。
      • 若您使用阿里云容器服务Kubernetes安装方式,请提交工单联系阿里云技术支持。
      • 若您使用自建Kubernetes安装方式,请检查{your-project-suffix}{regionId}{aliuid}{access-key-id}{access-key-secret}参数是否已正确填写,若填写错误请执行helm del --purge alibaba-log-controller命令,删除安装包,并重新安装。
    • 机器组心跳状态为OK的节点数量少于集群中的Worker节点数量。
      • 查看是否使用.yaml文件手动部署DaemonSet。
        1. 执行以下命令,查看返回结果,确认使用.yaml文件手动部署了DaemonSet。
          kubectl get po -n kube-system -l k8s-app=logtail
        2. 建议下载最新版本的DaemonSet模板
        3. 将其中的${your_region_name}${your_aliyun_user_id}${your_machine_group_name}替换为您的真实内容。
        4. 执行以下命令,更新logtail-daemonset.yaml文件。
          kubectl apply -f ./logtail-daemonset.yaml
      • 若为其它情况,请提交工单联系阿里云技术支持。

查看容器日志是否采集异常

如果您在日志服务控制台的预览查询页面未查看到日志数据,说明日志服务并未采集到您的容器日志数据。请确认容器状态后,执行以下步骤,进行检查。

  1. 请参见查看机器组的心跳是否存在异常
  2. 查看配置中IncludeLabelExcludeLabelIncludeEnvExcludeEnv是否和您需要采集的容器配置匹配。
    说明:其中的Label为容器Label(docker inspect中的Label信息),并不是Kubernetes中定义的Label。您可以通过将IncludeLabelExcludeLabelIncludeEnvExcludeEnv配置临时去除,查看是否可以正常采集到日志,若可以采集则确定为标记配置问题。
  3. 若您配置采集容器内文件,请注意以下事项:
    • 若下发采集配置后文件没有修改事件,Logtail则不采集日志。
    • 采集容器日志文件,只支持采集容器默认存储或挂载到本地的文件,暂不支持其他存储方式。

其他运维操作

登录Logtail容器

请根据现场情况,选择以下对应的步骤:

  • Docker
    • 登录宿主机,执行以下命令,查看并记录Logtail容器ID。
      docker ps | grep logtail
    •  执行以下命令,登录Logtail容器。
      docker exec -it [$ID] bash
      说明:[$ID]为Logtail容器ID。
    • Kubernetes
      • 执行以下命令,查看并记录Logtail的Pod。
        kubectl get po -n kube-system | grep logtail
      • 执行以下命令,登录Logtail的Pod。
        kubectl exec -it -n kube-system [$Pod_ID] bash
        说明:[$Pod_ID]为Pod的ID。

    查看Logtail的运行日志

    Logtail日志存储在Logtail容器中的/usr/local/ilogtail/目录中,文件名称为ilogtail.LOGlogtail_plugin.LOG

    1. 登录Logtail容器,详情请参见登录Logtail容器
    2. 执行以下命令,进入指定目录。
      cd /usr/local/ilogtail
    3. 依次执行以下命令,查看ilogtail.LOGlogtail_plugin.LOG日志文件
      cat ilogtail.LOG
      cat logtail_plugin.LOG

    Logtail的容器标准输出

    容器的标准输出(stdout)并不具备参考意义,请忽略以下标准输出。
    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集群中日志相关组件状态

    1. 登录Kubernetes集群的Master节点,请参见通过kubectl连接Kubernetes集群
    2. 执行以下命令,查看Kubernetes集群中日志相关组件状态。
      helm status alibaba-log-controller

    查看Logtail的版本号信息、IP地址、启动时间

    1. 登录Logtail容器,详情请参见登录Logtail容器
    2. 执行以下命令,查看Logtail的版本号信息、IP地址、启动时间。
      kubectl exec logtail-ds-gb92k -n kube-system cat /usr/local/ilogtail/app_info.json
      系统显示类似如下。
      {
         "UUID" : "",
         "hostname" : "logtail-gb92k",
         "instance_id" : "0EBB2B0E-0A3B-11E8-B0CE-0A58AC140402_172.20.X.X_1517810940",
         "ip" : "172.20.X.X",
         "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。
    • 该POD可通过kubectl get po -n kube-system | grep alibaba-log-controller命令查找,然后重新启动alibaba-log-controller POD。

    适用于

    • 日志服务