心跳异常问题汇总排查

更新时间:
复制 MD 格式

机器组心跳用于检测服务器与日志服务间的通信状态,若心跳异常将导致数据无法传输至日志服务。本文将分析心跳异常的产生原因及常见场景的解决方案。

心跳异常原因分析

服务器上的LoongCollector通过以下配置项,来确定目标Project并上报心跳,因此解决心跳异常并不复杂,仅需确认配置项取值,并检查网络情况即可。

  • 日志服务Project所属阿里云主账号:指定该账号有权限访问、采集这台服务器的日志。

  • Project所属地域与传输方式:日志服务访问域名由地域和传输方式动态拼接生成,需确保服务器与访问域名之间网络通畅。相关概念请参考网络传输方式与域名

  • 用户自定义标识/IP:通过IP或用户自定义标识与机器组关联,建立心跳。

建立心跳的过程

image
  1. LoongCollector获取配置的一个或多个阿里云账号ID信息,地域与传输方式拼接组成的访问域名,用户自定义标识或IP信息。

  2. LoongCollector上报心跳与上述信息至指定地域中的Project。

  3. 符合条件的一个或多个Project比较机器组中IP或用户自定义标识与上送信息是否一致。

  4. 信息一致的一个或多个Project将成功建立心跳,机器组显示心跳为OK。

常见心跳异常场景

新增加的服务器心跳为FAIL

心跳为FAIL时,可能是初次建立心跳需要花费一些时间,请等待两分钟左右后刷新心跳状态,若仍为FAIL,请按如下步骤检查:

  1. 检查LoongCollector安装场景选择是否有误,若安装场景正确进行下一步。否则请卸载后重新安装。

    安装方式

    适用场景

    同账号同地域

    仅当服务器为阿里云ECS,且ECSProject属于同一个阿里云账号,所属地域也相同时适用。

    同账号不同地域

    当服务器为阿里云ECS,且ECSProject属于同一个阿里云账号,但不属于同一个地域时适用。

    不同账号同地域

    当服务器为阿里云ECS,且ECSProject属于同一个地域,但不属于同一个阿里云账号时适用。

    其他云/自建服务器

    • 当服务器不是阿里云ECS,例如自建服务器或其他云服务器时适用。

    • 当服务器为阿里云ECS,但ECSProject不属于同一个阿里云账号,也不在同一个地域时,可视为自建服务器。

  2. 在服务器上通过sudo /etc/init.d/loongcollectord status 查看LoongCollector启动状态,返回loongcollector is running表示启动成功。否则执行如下命令启动LoongCollector:

    若使用的是Logtail采集器,则查看Logtail启动状态命令为:sudo /etc/init.d/ilogtaild status,启动Logtail命令为:sudo /etc/init.d/ilogtaild start
    sudo /etc/init.d/loongcollectord start
  3. 若是跨账号场景(Project所属阿里云账号与服务器所属账号不同):需手动配置用户ID文件,使该账号有权限访问、采集这台服务器的日志。

    检查用户ID文件内容

    1. 请检查是否存在/etc/ilogtail/users/{阿里云账号ID}文件,若不存在请创建。

      1. 登录日志服务控制台,鼠标悬浮在右上角用户头像上,在弹出的标签页中查看并复制账号ID。注意需要复制主账号ID。

      2. 在安装了LoongCollector的服务器上,以主账号ID作为文件名,创建用户ID文件。

        touch /etc/ilogtail/users/{阿里云账号ID} #以主账号ID作为文件名,无需配置文件后缀。
    2. 检查文件名是否满足下列要求,不满足请修改。

      • {阿里云账号ID}必须为主账号ID。

      • {阿里云账号ID}应为日志服务Project所属的主账号ID,而非服务器所属的账号。

  4. 确认地域与传输方式正确,并能联通访问域名:查看服务器上/usr/local/ilogtail/ilogtail_config.json文件中region信息是否与日志服务Project地域的RegionID一致。一致则排查下一步,若不一致则修改:

    测试访问域名联通性并修改服务器配置

    1. 登录日志服务控制台,在Project列表中,单击目标Project。

    2. 单击Project名称右侧的image进入项目概览页面。

    3. 访问域名中可查看当前Project的域名信息,替换${project名称}Project名称,${域名信息}为公网域名后在服务器上执行命令。

      curl https://${project名称}.${域名信息}
    4. 返回类似信息{"Error":{"Code":"OLSInvalidMethod","Message":"The script name is invalid : /","RequestId":"5D****09"}},说明网络畅通。否则检查目标地址是否被拦截以及其他网络方面的检查(例如出口方向是否开放80(HTTP)端口和443(HTTPS)端口、DNS配置、安全组等)。

      返回Error信息是因为访问链接缺少必要参数。当前测试仅验证网络连通性,未使用完整链接,因此在网络正常的情况下会显示Error的提示信息。
    5. 修改/usr/local/ilogtail/ilogtail_config.json中参数:

      • config_servers:此参数为获取采集配置路径,修改为"http://logtail.${域名信息}",其中${域名信息}替换为公网域名。

      • data_servers:

        • region:此参数为数据传输使用的地域信息,修改为"${RegionID}",其中${RegionID}替换为日志服务Project地域的RegionID

        • endpoint_list:此参数为数据传输使用的路径,修改为"${域名信息}",其中${域名信息}替换为公网域名。

    6. 保存修改后重启LoongCollector。

      若使用的是Logtail采集器,重启命令为:sudo /etc/init.d/ilogtaild restart
      sudo /etc/init.d/loongcollectord restart
  5. 检查用户自定义标识或IP的值:

    1. 登录日志服务控制台Project列表中,单击目标Project。

    2. 单击image资源,单击机器组,在机器组中单击目标机器组。

    3. 查看机器组配置页面,并确认机器组标识内容后选择对应操作:

      用户自定义标识

      1. 确认服务器上是否存在/etc/ilogtail/user_defined_id文件,若不存在请创建。

      2. 向该文件中写入自定义的字符串作为用户自定义标识,此处以user-defined-test-1为例。

        #向指定文件写入自定义字符串
        echo "user-defined-test-1" > /etc/ilogtail/user_defined_id 
      3. 修改用户自定义标识的取值为自定义的字符串,此例为user-defined-test-1

      IP地址

      将服务器上/usr/local/ilogtail/app_info.jsonip字段的信息添加到IP地址中。

      ip取值规则:若已在服务器的/etc/hosts文件中设置了主机名与IP地址绑定,则自动获取绑定的IP地址。若没有设置主机名绑定,自动获取本机第一块网卡的IP地址。若设置了/usr/local/ilogtail/ilogtail_config.json中的working_ip参数,则以working_ip值作为服务器的IP地址。请至少保证一种情况下能获取到ip,否则ip字段值为空,无法建立心跳。

服务器曾经心跳成功但当前为FAIL

曾经心跳成功说明配置项正确,若机器组类型为用户自定义标识型,则配置项中阿里云主账号信息,地域与传输方式,用户自定义标识等是固定值,未修改不会改变心跳状态,可能需要检查网络能否联通访问域名。若机器组类型为IP型,则最有可能是IP地址冲突或IP改变导致心跳为FAIL,请参考如下步骤解决:

  1. 在服务器上重启LoongCollector以获取最新IP信息。

    若使用的是Logtail采集器,重启命令为:sudo /etc/init.d/ilogtaild restart
    sudo /etc/init.d/loongcollectord restart
  2. 在服务器上查看/usr/local/ilogtail/app_info.jsonip字段的信息。

    ip取值规则:若已在服务器的/etc/hosts文件中设置了主机名与IP地址绑定,则自动获取绑定的IP地址。若没有设置主机名绑定,自动获取本机第一块网卡的IP地址。若设置了/usr/local/ilogtail/ilogtail_config.json中的working_ip参数,则以working_ip值作为服务器的IP地址。
  3. 登录日志服务控制台Project列表中,单击目标Project。

  4. 单击image资源,单击机器组,在机器组中单击目标机器组。

  5. 查看机器组配置页面,确认IP地址中信息是否包含/usr/local/ilogtail/app_info.jsonip字段。若不包含则添加ip字段的值到IP地址中。

  6. 若一致但心跳仍为FAIL,则不适合使用IP型机器组,请切换机器组类型后尝试。

切换机器组标识类型后心跳FAIL

出现IP地址冲突或IP改变等情况时,不再适合使用IP型机器组,需切换为用户自定义标识型机器组。切换机器组类型并不影响网络联通情况,阿里云主账号信息,地域与传输方式等信息,因此仅需关注用户自定义标识取值是否正确。

  1. 确认是否存在/etc/ilogtail/user_defined_id文件,若不存在请创建。

  2. 向该文件中写入自定义的字符串作为用户自定义标识,此处以user-defined-test-1为例。

    #向指定文件写入自定义字符串
    echo "user-defined-test-1" > /etc/ilogtail/user_defined_id 
  3. 登录日志服务控制台Project列表中,单击目标Project。

  4. 单击image资源,单击机器组,在机器组中单击目标机器组。

  5. 查看机器组配置页面,并确认以下两项参数取值,若不正确请单击右上角修改,修改后保存。

    • 机器组标识:用户自定义标识。

    • 用户自定义标识:自定义的字符串,此例为user-defined-test-1

常见问题

按文档排查后,各项配置均正确添加,为何心跳仍FAIL?

如果确认配置正确且网络正常,心跳为FAIL一般有两种可能:

  • 在该区域较长一段时间内无采集配置,心跳发送间隔被抑制

    • 向每个返回的区域发送请求获取配置时,为了降低对服务端的压力,如果从一个区域得不到采集配置,会降低对该区域的请求频率,最长间隔可达到 12 分钟,如果该值超过了该区域心跳 FAIL 的阈值,就会导致心跳 FAIL。

    • 解决办法:忽略心跳 FAIL,直接向该机器所在的机器组上应用采集配置,然后等待下一次向该区域发起请求,心跳即可恢复。如果希望立即恢复的话,重启即可。

  • 当前使用的配置并不是 ilogtail_config.json 中配置

    • 示例:使用了一个非默认配置启动后,运行期间 ilogtail_config.json 被修改而未重启。

    • 检查方法:

      • 最简单的办法:重启后自动加载最新配置。

      • 查看日志:如果担心对采集有影响,可以查看 /usr/local/ilogtail/ilogtail.LOG 文件,从开头处查找关键字 load logtail config file,该行日志会包含当前运行中使用的配置,检查是否和本地文件一致。

LoongCollector 报错“fetch ecs token fail Timeout was reached”如何处理?

问题现象

LoongCollector 报错fetch ecs token fail Timeout was reached,无法获取 ECS Metadata 服务信息。

问题原因

LoongCollector 无法访问 ECS Metadata 服务100.100.100.200

解决方案

  1. 在 ECS 上执行以下命令,测试 ECS Metadata 服务连通性。

    curl http://100.100.100.200/latest/meta-data/instance-id
  2. 如果命令无法连接到 Metadata 服务,检查 ECS 安全组配置,确认未限制对100.100.100.200的访问;放行后重新执行该命令确认连通性。

同地域 ECS 访问 SLS 内网 Endpoint 连接超时如何排查?

问题现象

同地域 ECS 访问 SLS 内网 Endpoint 时连接超时。

问题原因

ECS 与 SLS Project 不在同一地域、内网 Endpoint 的 DNS 解析或网络连通性异常、ECS 内部防火墙或安全软件拦截阿里云内网网段,或者 DNS 未指向阿里云内网 DNS,均可能导致连接超时。

解决方案

按以下顺序排查:

  1. 确认 ECS 与 SLS Project 位于同一地域。

  2. 测试内网 OSS Endpoint 和 SLS Endpoint 的 DNS 解析及连通性。执行命令前,将<OSS内网Endpoint>替换为当前地域的 OSS 内网 Endpoint,将<Project名称>替换为目标 Project 名称,并将<SLS内网Endpoint>替换为当前地域的 SLS 内网 Endpoint。

    curl -v http://<OSS内网Endpoint>
    curl -v http://<Project名称>.<SLS内网Endpoint>

    如果命令提示域名无法解析或连接超时,继续排查防火墙和 DNS 配置。

  3. 检查 ECS 内部防火墙(iptables)或安全软件(例如 Tailscale)是否拦截阿里云内网网段100.64.0.0/10100.115.0.0/16等;如果存在拦截规则,将这些网段加入白名单。

  4. 检查 DNS 配置是否正确指向阿里云内网 DNS100.100.2.136100.100.2.138,修正后再次执行 curl 命令确认连通性。

ACK 集群中 NodeLocalDNS 导致 LoongCollector 获取错误 IP 如何处理?

问题现象

ACK 集群中启用 NodeLocalDNS 后,LoongCollector 获取到错误的 IP 地址,导致机器组心跳异常。

问题原因

NodeLocalDNS 创建的虚拟网卡可能干扰 LoongCollector 或 Logtail 获取服务器 IP 地址。

解决方案

  1. 在 LoongCollector 或 Logtail 的配置文件中添加working_ip参数,并将其设置为正确的物理 IP 地址。

  2. 保存配置后重启采集器,使working_ip配置生效。使用 LoongCollector 时执行以下命令;使用 Logtail 时执行sudo /etc/init.d/ilogtaild restart

    sudo /etc/init.d/loongcollectord restart

SLS 自动安装 Logtail 时报错 ClientNotRunning 且 aliyun service 未启动如何处理?

问题现象

SLS 自动安装 Logtail 时出现ClientNotRunning错误,且 ECS 实例上的 aliyun service 未启动。

问题原因

自动安装依赖 Cloud Assistant 服务;该服务未启动时,无法完成 Logtail 的自动安装。

解决方案

  1. 在 ECS 实例上执行以下命令,启动并设置 Cloud Assistant 服务开机自动启动。

    systemctl enable aliyun.service --now
  2. 命令执行成功后,重新执行 SLS 采集组件的自动安装操作。

LoongCollector 启动失败报错“daemon not found, but found orphaned workers”如何处理?

问题现象

LoongCollector 启动失败,并报错daemon not found, but found orphaned workers

问题原因

组件进程异常或服务器资源使用率过高,可能导致残留 worker 进程并使 LoongCollector 无法启动。

解决方案

按以下顺序处理:

  1. 检查服务器内存和 CPU 监控,确认资源使用率是否过高;资源使用率过高时,先恢复可用资源后再启动 LoongCollector。

  2. 组件管理中尝试升级 LoongCollector 组件版本。

  3. 如果升级后问题仍未解决,卸载 LoongCollector 组件并重新安装。

  4. 检查机器组心跳状态是否正常,并核对采集配置是否正确。