You need to enable JavaScript to run this app.
导航
机器组心跳问题排查(容器)
最近更新时间:2024.12.11 14:27:26首次发布时间:2023.03.10 17:41:34
我的收藏
有用
有用
无用
无用

通过 LogCollector 采集容器文本日志或标准输出时,如果机器组中的 LogCollector 心跳状态异常,会造成日志采集失败等问题。LogCollector 心跳异常时,您可以参考本文档逐步排查问题、恢复 LogCollector 心跳状态。

背景信息

LogCollector 是日志服务自研的日志采集客户端,用于快速上报容器日志数据。在容器上安装 LogCollector 之后,LogCollector 会定时向服务端发送心跳包。如果在日志服务控制台的机器组配置页面中显示 LogCollector 无心跳,说明客户端和服务端连接失败。

问题现象

在日志服务控制台的机器组详情页面,如果心跳状态信息区域中,某些 IP 地址对应的状态栏显示异常,表示此容器 LogLollector 心跳状态异常,容器上的 LogCollector 客户端与服务端连接失败。
在心跳异常的状态下,容器上的 LogCollector 客户端无法将采集到的日志数据正常上报至服务端,导致日志无法正常采集到日志主题中,控制台上也无法实时查询并检索到新的日志数据。
Image

注意事项

LogCollector 会读取所在 Pod 第一块网卡的 IP 地址,并将其作为 Pod 的 IP 地址通过心跳上报至机器组。
当 Daemonset 滚动升级或重启时,现存的 Pod 将被删除,现存的 LogCollector 将停止运行,导致这些现存 Pod 的 IP 地址对应的状态栏显示异常。因为 Daemonset 滚动升级或重启之后,新的 Pod 将被创建,新的 LogCollector 将开始运行,这些新 Pod 的 IP 地址将通过心跳上报至机器组。

排查方案

本文档以在 Kubernetes 集群中使用 Daemonset 方式安装 LogCollector 为例进行说明。

1 检查 LogCollector 状态

登录 Kubernetes 集群后,执行以下命令查看 LogCollector 的运行状态。

kubectl -n ${namespace}  get pods  | grep ${Daemonset}

在以下示例中,Daemonset 的名称是 log-collector,所属的 namespace 是 tls-log。

kubectl -n tls-log  get pods  | grep log-collector

回显信息说明:

  • 如果回显信息中 NAME 字段没有名为 “log-collector-xxxxx” 的 Pod,表示该 Kubernetes 集群尚未安装 LogCollector,请参考没有状态信息进行处理。
  • 如果回显信息中 STATUS 字段中存在 Running 以外的值,表示当前容器已经安装 LogCollector,但是该 Pod 上的 LogCollector 运行状态异常。请参考容器 LogCollector 运行状态问题排查进行处理。
  • 如果回显信息显示 STATUS 字段值全部为 Running,表示当前 Kubernetes 集群已经成功安装 LogCollector,且运行状态正常。
    此时若控制台上 LogLollector 心跳状态仍然显示异常,请执行以下步骤继续排查。
    Image

2 检查鉴权参数配置

以 Daemonset 方式安装 LogCollector 时,需要首先创建 ConfigMap,并在 logcollector_config.yaml 文件的 output.tls 字段中添加日志服务的配置信息,用于鉴权和连接日志服务。如果参数配置错误,可能会造成 LogLollector 心跳异常。
执行以下命令打开 filebeat.yml 文件,检查创建 ConfigMap 时配置的鉴权参数。在以下示例中,Daemonset 的名称是 log-collector,所属的 namespace 是 tls-log。

kubectl -n tls-log describe configmaps log-collector-config

鉴权参数相关说明如下。

参数

示例

说明

获取方式

endpoint

https://tls-cn-beijing.ivolces.com

日志服务连接域名,即服务地址。

登录火山引擎控制台后,在日志项目的详情页中查看连接域名。

secret_id

AKLY*********

火山引擎主账号的 Access Key ID。

以主账号登录火山引擎控制台后,在页面右上角下拉列表中单击密钥管理,根据页面提示查看并复制 Access Key ID。

secret_key

TUdZ********

火山引擎主账号的 Secret Access Key。

以主账号登录火山引擎控制台后,在页面右上角下拉列表中单击密钥管理,根据页面提示查看并复制 Secret Access Key。

region

cn-beijing

日志项目所在的地域(Region)。

在日志服务控制台顶部导航栏中可以查看当前日志项目所在地域。

说明

output.tls 中,不能同时配置 ip 和 label 参数,否则也会造成心跳失败。

配置文件示例如下。
Image
如果鉴权参数配置错误,请修改后重启 Daemonset,稍后查看机器组状态。若控制台上 LogCollector 心跳状态仍然显示异常,请执行以下步骤继续排查。

3 检查 LogCollector 是否为最新版本

LogCollector 1.0.1 版本开始支持机器组,如果容器中安装的 LogCollector 版本号不是 1.0.1 或后续版本,可能会出现 LogCollector 心跳异常的现象,服务端无法识别该 LogCollector。所以 LogCollector 心跳异常时需检查 LogCollector 的版本是否符合要求。
执行以下命令,查看 LogCollector 的版本。回显信息中 “Image” 会展示当前安装的 LogCollector 的镜像地址,如果不是 1.0.1 或以上版本,或者不是 latest,请参考升级 LogCollector将 LogCollector 升级至最新版本。

kubectl -n tls-log describe daemonsets.apps log-collector

回显信息示例如下。
Image
升级 LogCollector 的版本后,若控制台上 LogCollector 心跳状态仍然显示异常,请执行以下步骤继续排查。

4 检查机器标识配置

说明

  • 机器标识地址类型的机器组,请参考此步骤进行排查。
  • 通过 LogCollector 采集容器文本日志或标准输出日志时,建议创建机器标识类型的机器组。

在机器标识地址类型的机器组中,已配置的机器标识必须和 LogCollector 配置文件中配置的机器 Label 一致,否则机器组中没有 LogCollector 的心跳状态。
执行以下命令,查看 LogCollector 的配置文件。

kubectl -n tls-log describe configmaps log-collector-config

系统回显信息如下,其中 label 的值即为 LogCollector 中配置的机器 Label。如果此值与机器组中配置的机器标识不一致,请修改机器组配置,并稍后再次检查机器状态。
Image

5 检查机器组 IP 地址配置

说明

IP 地址类型的机器组,请参考此步骤进行排查。

默认情况下,LogCollector 会读取所在 Pod 第一块网卡的 IP 地址,并将其作为 Pod 的 IP 地址记录在文件 agent_info.json 中。在控制台创建 IP 类型的机器组时,您需要将 agent_info.json 中记录的 IP 地址作为 Pod 的 IP 地址填写到机器组中,以此将指定 Pod 的 LogCollector 加入到机器组。
如果机器组中配置的 IP 地址和 agent_info.json 中的 IP 地址不一致,控制台会显示此容器 LogCollector 心跳状态异常、无法采集日志。
您可以通过以下命令查看 agent_info.json,检查 ip 字段中填写的 IP 地址与控制台显示的 IP 地址是否一致。

  1. 查看agent_info.json

    kubectl -n tls-log exec -it log-collector-9ph8j -- bash
    
    cat agent_info.json
    

    回显信息中,ip 字段表示 LogCollector 获取的当前 Pod IP 地址。

    {
        hostname :  C02G64T1MD6R ,
        ip : 10.*.*.* ,
        logcollect_version :  1.0.2 ,
        update_time :  2022.01.07 18:38:12 
    }
    
  2. 查看控制台配置的 IP 地址。
    在机器组的详情页面可以查看机器组内所有 Pod 的 IP 地址。如果此处配置的 IP 地址与 agent_info.json 中显示的 IP 地址不一致,请修改机器组配置,并稍后再次检查机器状态。
    Image