前言
机器组有心跳是Logtail正常运行的重要基础,然而,机器组无心跳却是Logtail使用过程中非常常见的问题。事实上,这一类问题的排查有一套非常系统的流程,绝大多数问题均可在这个排查过程中得以解决。因此,本文将重点介绍如何系统排查主机场景下的机器组无心跳问题。
排查流程
步骤1:检查Logtail是否正常运行
登录Logtail所在的机器,根据下列方法进行检查:
- Linux系统
在命令行运行以下命令:
ps -ef | grep ilogtail
正常情况下,返回的结果中应包含如下两条信息,说明Logtail正在运行(一条代表的是Logtail的守护进程,一条代表的是Logtail工作进程):
UID PID PPID C STIME TTY TIME CMD
...
root 12 1 0 Nov10 ? 00:00:00 /usr/local/ilogtail/ilogtail
root 14 12 0 Nov10 ? 03:07:43 /usr/local/ilogtail/ilogtail
...
⚠️注意:如果返回的结果中出现3条及以上的ilogtail运行命令,则说明当前环境中有多个Logtail实例在运行,有重复采集的风险,请检查是否为预期行为。
- Windows系统
- 打开运行窗口,输入
services.msc
,打开服务窗口。 - 查看LogtailDaemon服务和LogtailWorker服务的运行状态。如果正在运行,表示已安装Logtail。
检查结果:
- 如果Logtail未运行,请参见安装Logtail(Linux系统)或安装Logtail(Windows系统)。安装时,请务必按照您日志服务Project所属地域以及网络类型进行安装。
- 如果Logtail运行正常,请执行下一步检查。
步骤2:确认机器组中涉及的IP地址为Logtail获取的IP
Logtail获取服务器IP地址的方式如下:
- 如果没有设置主机名绑定,则获取服务器中第一块网卡的IP地址。
- 如果在/etc/hosts文件中设置了主机名绑定,则会获取绑定的主机名对应的IP地址。
步骤2.1:寻找app_info.json文件
Logtail将获取的IP地址记录在app_info.json文件的ip字段中,该文件在不同系统下的默认路径如下:
- Linux系统:/usr/local/ilogtail/app_info.json
- 64位Windows系统:C:\Program Files (x86)\Alibaba\Logtail\app_info.json
- 32位Windows系统:C:\Program Files\Alibaba\Logtail\app_info.json
{
"UUID" : "",
"hostname" : "iZ8vbdlzf******azuhZ",
"instance_id" : "E9633380-***********-00163E1AA597_172.16.2.200_166****11",
"ip" : "172.16.2.200",
"logtail_version" : "1.3.1",
"os" : "Linux; 4.19.91-26.1.al7.x86_64; #1 SMP Tue Jul 26 17:52:28 CST 2022; x86_64",
"update_time" : "2022-12-27 05:38:33"
}
步骤2.2:确认在机器组中使用的是Logtail获取的IP地址
机器组中涉及的IP地址均为Logtail获取的IP地址。请检查如下内容:
检查结果:
- 机器组标识为IP地址:如果在机器组的IP地址框内填写了目标Logtail的其它IP地址(如公网地址),则请将该地址修改为Logtail获取的IP地址后,重新观察机器心跳是否正常,若正常,则结束本次排查流程。
- 机器组标识为用户自定义标识:如果在搜索机器组状态信息时使用了其它IP地址,则请重新使用Logtail获取的IP地址进行搜索,若搜索成功,则结束本次排查流程。
- 其余情况,请执行下一步检查。
步骤3:检查Logtail启动参数是否正确
步骤3.1:寻找Logtail配置文件
ilogtail_config.json文件记录了Logtail的相关启动参数,为了找到该文件,首先需要查看环境变量中是否指定了该文件的存储路径:
echo $ALIYUN_LOGTAIL_CONFIG
如果返回的结果非空,则该文件的存储路径即为该环境变量的值,一般为/etc/ilogtail/conf/<project地域>/ilogtail_config.json;如果返回的结果为空,则该文件在不同系统下的默认路径如下:
- Linux系统:/usr/local/ilogtail/ilogtail_config.json
- 64位Windows系统:C:\Program Files (x86)\Alibaba\Logtail\ilogtail_config.json
- 32位Windows系统:C:\Program Files\Alibaba\Logtail\ilogtail_config.json
步骤3.2:确认配置文件参数是否正确
Logtail配置文件如下所示:
{
"config_server_address" : "http://logtail.<config_region>.log.aliyuncs.com",
"data_server_list" :
[
{
"cluster" : "<project地域>",
"endpoint" : "<endpoint>"
}
],
...
}
其中,<·>代表变量,具体参数选择方式如下表:
场景 |
网络类型 |
<config_region> |
<endpoint> |
服务器为ECS,且与Project同属同一地域 |
阿里云内网 |
<project地域>-intranet |
<project地域>-intranet.log.aliyuncs.com |
其它情况 |
公网 |
<project地域> |
<project地域>.log.aliyuncs.com |
全球加速 |
log-global.aliyuncs.com |
步骤4:检查网络是否通畅
要保证Logtail上传数据的成功,至少需要保证Logtail能够连通下列几个地址:
- ilogtail_config.json文件中config_server_address字段指定的地址及其https版本;
- http://<project名>.<endpoint>,其中<endpoint>为ilogtail_config.json文件中data_server_list.endpoint字段指定的地址;
- http://ali-<project地域>-sls-admin.<endpoint>,其中<endpoint>为ilogtail_config.json文件中data_server_list.endpoint字段指定的地址。
(其中[-intranet]代表根据是否使用内网,若是,则添加-intranet)
网络调试方法如下:
- Linux系统
在命令行调用curl
命令依次尝试连接前述地址:
curl xxx
如果所有地址都返回如下类似内容,说明网络畅通:
{"Error":{"Code":"OLSInvalidMethod","Message":"The script name is invalid : /","RequestId":"5D****09"}}
- Windows系统
在命令行调用telnet
命令依次尝试连接前述地址:
telnet xxx 80 # 如果是https则为443
如果所有地址都返回如下类似内容,说明网络畅通:
Trying 100*0*7*5...
Connected to xxx.
Escape character is '^]'.
检查结果:
- 如果网络不畅通,则请首先检查网络环境中80和443端口是否已经开放,目标地址是否被拦截,以及其他网络侧的检查(如DNS配置、安全组等)。
- 如果网络畅通,请执行下一步检查。
步骤5:检查Logtail所处环境的系统时间是否正确
- Linux系统
在命令行运行date
命令查看系统时间:
Wed Dec 28 06:59:26 UTC 2022
- Windows系统
查看桌面右下角任务栏中时间信息。
检查结果:
- 如果系统时间显著快于或慢于当前真实时间,请重新调整系统时间至真实时间后重启Logtail,或者修改Logtail启动参数后重启,即在配置文件ilogtail_config.json中增加一个键值对
"enable_log_time_auto_adjust": true
。配置文件的具体路径可参考步骤3.1中的描述,重启Logtail方法参见附录。 - 如果系统时间与真实时间一致,请执行下一步检查。
步骤6:检查是否配置用户标识
如果Logtail所在的服务器为ECS但是与日志服务不属于同一账号、或为其他云厂商的服务器及自建IDC时,需要为Logtail配置Project所属主账号为用户标识,表示该账号有权限通过Logtail采集该服务器日志。
为了检查Logtail是否正确配置了用户标识,首先查看环境变量ALIYUN_LOGTAIL_USER_ID中是否已经指定了用户标识:
echo $ALIYUN_LOGTAIL_USER_ID
如果返回的结果非空,则比较该值中是否有与project主账号ID相等的分量;如果返回的结果为空,则用户标识文件在不同系统下的默认目录如下:
- Linux系统:/etc/ilogtail/users/。
- Windows系统:C:\LogtailData\users\。
检查结果:
- 如果Logtail未配置用户标识或用户标识配置错误,则:
- 如果配置了ALIYUN_LOGTAIL_USER_ID环境变量,则修改该环境变量的值为project所属的主账号ID,或在现有值的最后增加project所属的主账号ID,以逗号分隔。
- 反之,增加或修改用户标识文件:
- Linux系统:在命令行运行
cd /etc/ilogtail/users/ && touch <uid>
,其中<uid>为project所属的主账号ID;
- Windows系统:进入C:\LogtailData\users\目录并创建一个名为<uid>的空文件。
修改之后需要重启Logtail,重启方法见附录。
- 如果用户标识已正确配置,请执行下一步检查。
步骤7:若机器组标识为自定义标识,检查是否配置自定义标识
为了检查Logtail是否正确配置了自定义标识,首先查看环境变量ALIYUN_LOGTAIL_USER_DEFINED_ID中是否已经指定了自定义标识:
echo $ALIYUN_LOGTAIL_USER_DEFINED_ID
如果返回的结果非空,则比较该值中是否有与机器组中配置的自定义标识相等的分量;如果返回的结果为空,则自定义标识文件在不同系统下的默认路径如下:
- Linux系统:/etc/ilogtail/user_defined_id。
- Windows系统:C:\LogtailData\user_defined_id。
检查结果:
- 如果Logtail未配置自定义标识或自定义标识配置错误,则:
- 如果配置了ALIYUN_LOGTAIL_DEFINED_ID环境变量,则修改该环境变量的值为机器组的用户自定义标识,或在现有值的最后增加机器组的用户自定义标识,以逗号分隔。
- 反之,如果自定义标识文件不存在,则新增一个名为user_defined_id的文件,文件中填写机器组的用户自定义标识;反之,在现有文件中新增一行填写机器组的用户自定义标识。
修改之后需要重启Logtail,重启方法见附录。
后续步骤
绝大多数的机器组心跳问题均可以通过上述排查流程得以解决,如果仍未能解决,请提工单。
附录
重启Logtail方法
- Linux系统:在命令行运行sudo /etc/init.d/ilogtaild restart;
- Windows系统:
- 打开运行窗口,输入services.msc,打开服务窗口。
- 重启LogtailWorker服务。