Logtail具备自身健康度以及日志采集进度查询的功能,便于您对于日志采集问题进行自检,同时您可基于该功能定制日志采集的状态监控。
使用指南
确认已安装支持状态查询功能的Logtail客户端之后,在客户端输入对应命令即可查询本地采集状态。如何安装Logtail,请参见安装Logtail(Linux系统)。
在客户端输入命令/etc/init.d/ilogtaild -h
,确认当前客户端是否支持本地采集状态查询功能。若输出logtail insight, version
关键字则表示已安装支持此功能的Logtail。
/etc/init.d/ilogtaild -h
Usage: ./ilogtaild { start | stop (graceful, flush data and save checkpoints) | force-stop | status | -h for help}$
logtail insight, version : 0.1.0
commond list :
status all [index]
get logtail running status
status active [--logstore | --logfile] index [project] [logstore]
list all active logstore | logfile. if use --logfile, please add project and logstore. default --logstore
status logstore [--format=line | json] index project logstore
get logstore status with line or json style. default --format=line
status logfile [--format=line | json] index project logstore fileFullPath
get log file status with line or json style. default --format=line
status history beginIndex endIndex project logstore [fileFullPath]
query logstore | logfile history status.
index : from 1 to 60. in all, it means last $(index) minutes; in active/logstore/logfile/history, it means last $(index)*10 minutes
命令 | 功能 | 可查询时间区间 | 统计窗口 |
---|---|---|---|
all | 查询Logtail的运行状态 | 最近60分钟 | 1分钟 |
active | 查询当前活跃(有数据采集)的Logstore或日志文件 | 最近600分钟 | 10分钟 |
logstore | 查询Logstore的采集状态 | 最近600分钟 | 10分钟 |
logfile | 查询日志文件的采集状态 | 最近600分钟 | 10分钟 |
history | 查询Logstore或日志文件一段时间内的采集状态 | 最近600分钟 | 10分钟 |
- 命令中的
index
参数代表查询的时间窗口索引值,有效值为1~60,从当前时间开始计算。若统计窗口是1分钟,则查询距当前(index, index-1]
分钟内的窗口;若统计窗口是10分钟,则查询距当前(10*index, 10*(index-1)]
分钟内的统计窗口。 - 所有查询命令均属于status子命令,因此主命令为status。
all命令
/etc/init.d/ilogtaild status all [ index ]
/etc/init.d/ilogtaild status all 1
ok
/etc/init.d/ilogtaild status all 10
busy
项目 | 描述 | 紧急度 | 解决方法 |
---|---|---|---|
ok | 当前状态正常。 | 无 | 无需处理。 |
busy | 当前采集速度较高,Logtail状态正常。 | 无 | 无需处理。 |
many_log_files | 当前正在采集的日志数较多。 | 低 | 检查配置中是否包含无需采集的文件。 |
process_block | 当前日志解析出现阻塞。 | 低 | 检查日志产生速度是否过高,若一直出现,按需修改CPU使用上限或网络发送并发限制。更多信息,请参见设置Logtail启动参数。 |
send_block | 当前发送出现阻塞。 | 较高 | 检查日志产生速度是否过高以及网络状态是否正常,若一直出现,按需修改CPU使用上限或网络发送并发限制。更多信息,请参见设置Logtail启动参数。 |
send_error | 日志数据上传失败。 | 高 | 上传失败。更多信息,请参见如何查看Logtail采集错误信息。 |
active命令
/etc/init.d/ilogtaild status active [--logstore] index
/etc/init.d/ilogtaild status active --logfile index project-name logstore-name
- 命令
active [--logstore] index
用来查看当前活跃的Logstore,--logstore
参数可以省略,命令含义不变。 - 命令
active --logfile index project-name logstore-name
用来查看某Project中Logstore下的所有活跃日志文件。 - active命令用来逐级查看活跃的日志文件。建议您先定位当前活跃的Logstore,再定向查询该Logstore下的活跃日志文件。
/etc/init.d/ilogtaild status active 1
sls-zc-test : release-test
sls-zc-test : release-test-ant-rpc-3
sls-zc-test : release-test-same-regex-3
/etc/init.d/ilogtaild status active --logfile 1 sls-zc-test release-test
/disk2/test/normal/access.log
- 执行命令
active --logstore index
,则以project-name : logstore-name
形式输出当前所有活跃Logstore;若执行命令active --logfile index project-name logstore-name
,则输出活跃日志文件的完整路径。 - 若Logstore或日志文件在查询窗口期内没有日志采集活动,则不会出现在active命令的输出信息中。
logstore命令
/etc/init.d/ilogtaild status logstore [--format={line|json}] index project-name logstore-name
- 使用logstore命令查询Logstore的采集状态时,只返回采集文本文件时的采集状态。不支持查询采集容器标准输出的采集状态。
- logstore命令指定以line或JSON形式输出指定Project和Logstore的采集状态。
- 如果不配置
--format=
参数,则默认选择--format=line
,按照line形式输出回显信息。--format
参数需位于logstore
之后。 - 若无该Logstore或该Logstore在当前查询窗口期没有日志采集活动,则line形式输出为空,JSON下为
null
。
/etc/init.d/ilogtaild status logstore 1 sls-zc-test release-test-same
time_begin_readable : 17-08-29 10:56:11
time_end_readable : 17-08-29 11:06:11
time_begin : 1503975371
time_end : 1503975971
project : sls-zc-test
logstore : release-test-same
status : ok
config : ##1.0##sls-zc-test$same
read_bytes : 65033430
parse_success_lines : 230615
parse_fail_lines : 0
last_read_time : 1503975970
read_count : 687
avg_delay_bytes : 0
max_unsend_time : 0
min_unsend_time : 0
max_send_success_time : 1503975968
send_queue_size : 0
send_network_error_count : 0
send_network_quota_count : 0
send_network_discard_count : 0
send_success_count : 302
send_block_flag : false
sender_valid_flag : true
/etc/init.d/ilogtaild status logstore --format=json 1 sls-zc-test release-test-same
{
"avg_delay_bytes" : 0,
"config" : "##1.0##sls-zc-test$same",
"last_read_time" : 1503975970,
"logstore" : "release-test-same",
"max_send_success_time" : 1503975968,
"max_unsend_time" : 0,
"min_unsend_time" : 0,
"parse_fail_lines" : 0,
"parse_success_lines" : 230615,
"project" : "sls-zc-test",
"read_bytes" : 65033430,
"read_count" : 687,
"send_block_flag" : false,
"send_network_discard_count" : 0,
"send_network_error_count" : 0,
"send_network_quota_count" : 0,
"send_queue_size" : 0,
"send_success_count" : 302,
"sender_valid_flag" : true,
"status" : "ok",
"time_begin" : 1503975371,
"time_begin_readable" : "17-08-29 10:56:11",
"time_end" : 1503975971,
"time_end_readable" : "17-08-29 11:06:11"
}
关键字 | 含义 | 单位 |
---|---|---|
status | 该Logstore整体状态。具体状态、含义以及修改方式见下表。 | 无 |
time_begin_readable | 可读的开始时间。 | 无 |
time_end_readable | 可读的截止时间。 | 无 |
time_begin | 统计开始时间。 | Unix时间戳,秒 |
time_end | 统计结束时间。 | Unix时间戳,秒 |
project | Project名。 | 无 |
logstore | Logstore名。 | 无 |
config | 采集配置名(由##1.0## + project + $ + config组成的全局唯一配置名)。
|
无 |
read_bytes | 窗口内读取日志数。 | 字节 |
parse_success_lines | 窗口内日志解析成功的行数。 | 行 |
parse_fail_lines | 窗口日志解析失败的行数。 | 行 |
last_read_time | 窗口内最近的读取时间。 | Unix时间戳,秒 |
read_count | 窗口内日志读取次数。 | 次数 |
avg_delay_bytes | 窗口内平均每次读取时当前偏移量与文件大小差值的平均值。 | 字节 |
max_unsend_time | 窗口结束时发送队列中未发送数据包的最大时间,队列空时为0。 | Unix时间戳,秒 |
min_unsend_time | 窗口结束时发送队列中未发送数据包的最小时间,队列空时为0。 | Unix时间戳,秒 |
max_send_success_time | 窗口内发送成功数据的最大时间。 | Unix时间戳,秒 |
send_queue_size | 窗口结束时当前发送队列中未发送数据包数。 | 个 |
send_network_error_count | 窗口内因网络错误导致发送失败的数据包个数。 | 个 |
send_network_quota_count | 窗口内因quota超限导致发送失败的数据包个数。 | 个 |
send_network_discard_count | 窗口内因数据异常或无权限导致丢弃数据包的个数。 | 个 |
send_success_count | 窗口内发送成功的数据包个数。 | 个 |
send_block_flag | 窗口结束时发送队列是否阻塞。 | 无 |
sender_valid_flag | 窗口结束时该Logstore的发送标志位是否有效,true代表正常,false代表可能因为网络错误或quota错误而被禁用。 | 无 |
状态 | 含义 | 处理方式 |
---|---|---|
ok | 状态正常 | 无需处理。 |
process_block | 日志解析阻塞 | 检查日志产生速度是否过高,若一直出现,按需修改CPU使用上限或网络发送并发限制。更多信息,请参见设置Logtail启动参数。 |
parse_fail | 日志解析失败 | 检查日志格式与日志采集配置是否一致。 |
send_block | 当前发送出现阻塞 | 检查日志产生速度是否过高以及网络状态是否正常,若一直出现,按需修改CPU使用上限或网络发送并发限制。更多信息,请参见设置Logtail启动参数。 |
sender_invalid | 日志数据发送异常 | 检查网络状态。更多信息,请参见如何查看Logtail采集错误信息。 |
logfile命令
/etc/init.d/ilogtaild status logfile [--format={line|json}] index project-name logstore-name fileFullPath
- logfile命令指定以line或JSON形式输出指定日志文件的采集状态。
- 如果不配置
--format=
参数,则默认选择--format=line
,按照line形式输出回显信息。 - 若无该logfile或该logfile在当前查询窗口期没有日志采集活动,则line形式输出为空,JSON下为
null
。 --format
参数需位于logfile
之后。filefullpath
必须是全路径名。
/etc/init.d/ilogtaild status logfile 1 sls-zc-test release-test-same /disk2/test/normal/access.log
time_begin_readable : 17-08-29 11:16:11
time_end_readable : 17-08-29 11:26:11
time_begin : 1503976571
time_end : 1503977171
project : sls-zc-test
logstore : release-test-same
status : ok
config : ##1.0##sls-zc-test$same
file_path : /disk2/test/normal/access.log
file_dev : 64800
file_inode : 22544456
file_size_bytes : 17154060
read_offset_bytes : 17154060
read_bytes : 65033430
parse_success_lines : 230615
parse_fail_lines : 0
last_read_time : 1503977170
read_count : 667
avg_delay_bytes : 0
/etc/init.d/ilogtaild status logfile --format=json 1 sls-zc-test release-test-same /disk2/test/normal/access.log
{
"avg_delay_bytes" : 0,
"config" : "##1.0##sls-zc-test$same",
"file_dev" : 64800,
"file_inode" : 22544456,
"file_path" : "/disk2/test/normal/access.log",
"file_size_bytes" : 17154060,
"last_read_time" : 1503977170,
"logstore" : "release-test-same",
"parse_fail_lines" : 0,
"parse_success_lines" : 230615,
"project" : "sls-zc-test",
"read_bytes" : 65033430,
"read_count" : 667,
"read_offset_bytes" : 17154060,
"status" : "ok",
"time_begin" : 1503976571,
"time_begin_readable" : "17-08-29 11:16:11",
"time_end" : 1503977171,
"time_end_readable" : "17-08-29 11:26:11"
}
关键字 | 含义 | 单位 |
---|---|---|
status | 该日志文件当前窗口期的采集状态,参见logstore命令的status。 | 无 |
time_begin_readable | 可读的开始时间。 | 无 |
time_end_readable | 可读的截止时间。 | 无 |
time_begin | 统计开始时间。 | Unix时间戳,秒 |
time_end | 统计结束时间。 | Unix时间戳,秒 |
project | Project名。 | 无 |
logstore | Logstore名。 | 无 |
file_path | 该日志文件路径。 | 无 |
file_dev | 该日志文件的device id。 | 无 |
file_inode | 该日志文件的inode。 | 无 |
file_size_bytes | 窗口内最近一次扫描到的该文件大小。 | 字节 |
read_offset_bytes | 当前该文件解析偏移量。 | 字节 |
config | 采集配置名(由##1.0## + project + $ + config组成的全局唯一配置名)。
|
无 |
read_bytes | 窗口内读取日志数。 | 字节 |
parse_success_lines | 窗口内日志解析成功的行数。 | 行 |
parse_fail_lines | 窗口内日志解析失败的行数。 | 行 |
last_read_time | 窗口内最近的读取时间。 | Unix时间戳,秒 |
read_count | 窗口内日志读取次数。 | 次数 |
avg_delay_bytes | 窗口内平均每次读取时当前偏移量与文件大小差值的平均值。 | 字节 |
history命令
/etc/init.d/ilogtaild status history beginIndex endIndex project-name logstore-name [fileFullPath]
- history命令用来查询Logstore或日志文件一段时间内的采集状态。
beginIndex
、endIndex
分别为代码查询窗口索引的起始值和终止值,需确保beginIndex <= endIndex
。- 若参数中不输入
fileFullPath
,则代码查询Logstore的采集信息;否则查询日志文件的采集信息。
/etc/init.d/ilogtaild status history 1 3 sls-zc-test release-test-same /disk2/test/normal/access.log
begin_time status read parse_success parse_fail last_read_time read_count avg_delay device inode file_size read_offset
17-08-29 11:26:11 ok 62.12MB 231000 0 17-08-29 11:36:11 671 0B 64800 22544459 18.22MB 18.22MB
17-08-29 11:16:11 ok 62.02MB 230615 0 17-08-29 11:26:10 667 0B 64800 22544456 16.36MB 16.36MB
17-08-29 11:06:11 ok 62.12MB 231000 0 17-08-29 11:16:11 687 0B 64800 22544452 14.46MB 14.46MB
$/etc/init.d/ilogtaild status history 2 5 sls-zc-test release-test-same
begin_time status read parse_success parse_fail last_read_time read_count avg_delay send_queue network_error quota_error discard_error send_success send_block send_valid max_unsend min_unsend max_send_success
17-08-29 11:16:11 ok 62.02MB 230615 0 17-08-29 11:26:10 667 0B 0 0 0 0 300 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 11:26:08
17-08-29 11:06:11 ok 62.12MB 231000 0 17-08-29 11:16:11 687 0B 0 0 0 0 303 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 11:16:10
17-08-29 10:56:11 ok 62.02MB 230615 0 17-08-29 11:06:10 687 0B 0 0 0 0 302 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 11:06:08
17-08-29 10:46:11 ok 62.12MB 231000 0 17-08-29 10:56:11 692 0B 0 0 0 0 302 false true 70-01-01 08:00:00 70-01-01 08:00:00 17-08-29 10:56:10
- 该命令以列表形式输出Logstore或日志文件的历史采集信息,每个窗口期一行。
- 输出字段含义请参见
logstore
和logfile
命令。
命令返回值
正常返回值
/etc/init.d/ilogtaild status logfile --format=json 1 error-project error-logstore /no/this/file
null
echo $?
0
/etc/init.d/ilogtaild status all
ok
echo $?
0
异常返回值
返回值 | 类型 | 输出 | 问题排查 |
---|---|---|---|
10 | 无效命令或缺少参数 | invalid param, use -h for help. |
输入-h 查看帮助。
|
1 | 查询超过1-60的时间窗口 | invalid query interval |
输出-h 查看帮助。
|
1 | 无法查询到指定时间窗口 | query fail, error: $(error) 。更多信息,请参见errno释义。
|
可能原因是logtail启动时间小于查询时间跨度。 |
1 | 查询窗口时间不匹配 | no match time interval, please check logtail status |
检查Logtail是否在运行。 |
1 | 查询窗口内没有数据 | invalid profile, maybe logtail restart |
检查Logtail是否在运行。 |
/etc/init.d/ilogtaild status nothiscmd
invalid param, use -h for help.
echo $?
10
/etc/init.d/ilogtaild status/all 99
invalid query interval
echo $?
1
功能使用场景示例
通过Logtail健康度查询可以获取Logtail当前整体状态;通过采集进度查询可以获取采集过程中的相关指标信息。用户可根据获取的这些信息实现自定义的日志采集监控。
监控Logtail运行状态
通过all
命令实现Logtail运行状态监控。
实现方式:每隔一分钟定期查询Logtail当前状态,若连续5分钟状态处于process_block
、send_block
、send_error
则触发报警。
具体报警持续时间以及监控的状态范围可根据具体场景中日志采集重要程度调整。
监控日志采集进度
通过logstore
命令实现具体日志库采集进度监控。
实现方式:定期每隔10分钟调用logstore
命令获取该logstore的状态信息,若avg_delay_bytes
超过1MB(1024*1024)或status
不为ok
则触发报警。
具体avg_delay_bytes
报警阈值可根据日志采集流量调整。
判断日志文件是否采集完毕
通过logfile
命令判断日志文件是否采集完毕。
实现方式:日志文件已经停止写入后,定期每隔10分钟调用logfile
命令获取该文件的状态信息,若该文件read_offset_bytes
与file_size_bytes
一致,则该日志文件已经采集完毕。
日志采集问题排查
若发现某台服务器日志采集进度延迟,可用history
命令查询该服务器上相关的采集信息。
send_block_flag
为true,则说明日志采集进度延迟block在网络部分。- 若
send_network_quota_count
大于0时,需要对Logstore的Shard进行分裂。更多信息,请参见管理Shard。 - 若
send_network_error_count
大于0时,需要检查网络连通性。 - 若无相关network error,则需要调整Logtail的发送并发以及流量限制。更多信息,请参见发送并发以及流量限制。
- 若
- 发送部分相关参数正常但
avg_delay_bytes
较高。- 可根据
read_bytes
计算出日志平均解析速度,判断日志产生流量是否异常。 - 可适当调整logtail的资源使用限制。更多信息,请参见设置Logtail启动参数。
- 可根据
parse_fail_lines
大于0。检查日志采集解析配置是否能够匹配所有日志。