机器组心跳用于检测服务器与日志服务间的通信状态,若心跳异常将导致数据无法传输至日志服务。本文将分析心跳异常的产生原因及常见场景的解决方案。
心跳异常原因分析
服务器上的LoongCollector通过以下配置项,来确定目标Project并上报心跳,因此解决心跳异常并不复杂,仅需确认配置项取值,并检查网络情况即可。
日志服务Project所属阿里云主账号:指定该账号有权限访问、采集这台服务器的日志。
Project所属地域与传输方式:日志服务访问域名由地域和传输方式动态拼接生成,需确保服务器与访问域名之间网络通畅。相关概念请参考网络传输方式与域名。
用户自定义标识/IP:通过IP或用户自定义标识与机器组关联,建立心跳。
建立心跳的过程
LoongCollector获取配置的一个或多个阿里云账号ID信息,地域与传输方式拼接组成的访问域名,用户自定义标识或IP信息。
LoongCollector上报心跳与上述信息至指定地域中的Project。
符合条件的一个或多个Project比较机器组中IP或用户自定义标识与上送信息是否一致。
信息一致的一个或多个Project将成功建立心跳,机器组显示心跳为OK。
常见心跳异常场景
新增加的服务器心跳为FAIL
心跳为FAIL时,可能是初次建立心跳需要花费一些时间,请等待两分钟左右后刷新心跳状态,若仍为FAIL,请按如下步骤检查:
检查LoongCollector安装场景选择是否有误,若安装场景正确进行下一步。否则请卸载后重新安装。
安装方式
适用场景
仅当服务器为阿里云ECS,且ECS与Project属于同一个阿里云账号,所属地域也相同时适用。
当服务器为阿里云ECS,且ECS与Project属于同一个阿里云账号,但不属于同一个地域时适用。
当服务器为阿里云ECS,且ECS与Project属于同一个地域,但不属于同一个阿里云账号时适用。
当服务器不是阿里云ECS,例如自建服务器或其他云服务器时适用。
当服务器为阿里云ECS,但ECS与Project不属于同一个阿里云账号,也不在同一个地域时,可视为自建服务器。
在服务器上通过
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
若是跨账号场景(Project所属阿里云账号与服务器所属账号不同):需手动配置用户ID文件,使该账号有权限访问、采集这台服务器的日志。
确认地域与传输方式正确,并能联通访问域名:查看服务器上
/usr/local/ilogtail/ilogtail_config.json
文件中region
信息是否与日志服务Project地域的RegionID一致。一致则排查下一步,若不一致则修改:检查用户自定义标识或IP的值:
登录日志服务控制台。在Project列表中,单击目标Project。
单击
资源,单击机器组,在机器组中单击目标机器组。查看机器组配置页面,并确认机器组标识内容后选择对应操作:
用户自定义标识
确认服务器上是否存在
/etc/ilogtail/user_defined_id
文件,若不存在请创建。向该文件中写入自定义的字符串作为用户自定义标识,此处以
user-defined-test-1
为例。#向指定文件写入自定义字符串 echo "user-defined-test-1" > /etc/ilogtail/user_defined_id
修改用户自定义标识的取值为自定义的字符串,此例为
user-defined-test-1
。
IP地址
将服务器上
/usr/local/ilogtail/app_info.json
中ip
字段的信息添加到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,请参考如下步骤解决:
在服务器上重启LoongCollector以获取最新IP信息。
若使用的是Logtail采集器,重启命令为:
sudo /etc/init.d/ilogtaild restart
sudo /etc/init.d/loongcollectord restart
在服务器上查看
/usr/local/ilogtail/app_info.json
中ip
字段的信息。ip取值规则:若已在服务器的/etc/hosts文件中设置了主机名与IP地址绑定,则自动获取绑定的IP地址。若没有设置主机名绑定,自动获取本机第一块网卡的IP地址。若设置了/usr/local/ilogtail/ilogtail_config.json中的working_ip参数,则以working_ip值作为服务器的IP地址。
登录日志服务控制台。在Project列表中,单击目标Project。
单击
资源,单击机器组,在机器组中单击目标机器组。查看机器组配置页面,确认IP地址中信息是否包含
/usr/local/ilogtail/app_info.json
中ip
字段。若不包含则添加ip
字段的值到IP地址中。若一致但心跳仍为FAIL,则不适合使用IP型机器组,请切换机器组类型后尝试。
切换机器组标识类型后心跳FAIL
出现IP地址冲突或IP改变等情况时,不再适合使用IP型机器组,需切换为用户自定义标识型机器组。切换机器组类型并不影响网络联通情况,阿里云主账号信息,地域与传输方式等信息,因此仅需关注用户自定义标识取值是否正确。
确认是否存在
/etc/ilogtail/user_defined_id
文件,若不存在请创建。向该文件中写入自定义的字符串作为用户自定义标识,此处以
user-defined-test-1
为例。#向指定文件写入自定义字符串 echo "user-defined-test-1" > /etc/ilogtail/user_defined_id
登录日志服务控制台。在Project列表中,单击目标Project。
单击
资源,单击机器组,在机器组中单击目标机器组。查看机器组配置页面,并确认以下两项参数取值,若不正确请单击右上角修改,修改后保存。
机器组标识:用户自定义标识。
用户自定义标识:自定义的字符串,此例为
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
,该行日志会包含当前运行中使用的配置,检查是否和本地文件一致。