1. 简介
  2. 使用指南
    1. all命令
    2. active命令
    3. logstore命令
    4. logfile命令
    5. history命令
  3. 命令返回值
  4. 功能使用场景示例
    1. 监控Logtail运行状态
    2. 监控日志采集进度
    3. 判断日志文件是否采集完毕
    4. 日志采集问题排查

简介

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
Logtail目前支持的查询命令、命令功能、可查询的时间区间以及结果统计的时间窗口如下:
命令 功能 可查询时间区间 统计窗口
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 ] 
说明
all命令用来查看Logtail的运行状态。index为可选参数,不输入时默认代表1。
示例
/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使用上限或网络发送并发限制。
send_block 当前发送出现阻塞。 较高 检查日志产生速度是否过高以及网络状态是否正常,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。
send_error 日志数据上传失败。 参考查询诊断错误解决。

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指定以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错误而被禁用。
Logstore状态列表
状态 含义 处理方式
ok 状态正常 无需处理。
process_block 日志解析阻塞 检查日志产生速度是否过高,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。
parse_fail 日志解析失败 检查日志格式与日志采集配置是否一致。
send_block 当前发送出现阻塞 检查日志产生速度是否过高以及网络状态是否正常,若一直出现,按需调整配置启动参数修改CPU使用上限或网络发送并发限制。
sender_invalid 日志数据发送异常 检查网络状态,若网络正常,参考查询诊断错误解决。

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
file_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或日志文件一段时间内的采集状态。
  • beginIndexendIndex分别为代码查询窗口索引的起始值和终止值,需确保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或日志文件的历史采集信息,每个窗口期一行。
  • 输出字段含义请参见logstorelogfile命令。

命令返回值

正常返回值

所有命令输入有效情况下返回值为0( 包括无法查询到Logstore或日志文件),例如:
/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

异常返回值

返回值非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_blocksend_blocksend_error则触发报警。

具体报警持续时间以及监控的状态范围可根据具体场景中日志采集重要程度调整。

监控日志采集进度

通过logstore命令实现具体日志库采集进度监控。

实现方式:定期每隔10分钟调用logstore命令获取该logstore的状态信息,若avg_delay_bytes超过1MB(1024*1024)或status不为ok则触发报警。

具体avg_delay_bytes报警阈值可根据日志采集流量调整。

判断日志文件是否采集完毕

通过logfile命令判断日志文件是否采集完毕。

实现方式:日志文件已经停止写入后,定期每隔10分钟调用logfile命令获取该文件的状态信息,若该文件read_offset_bytesfile_size_bytes一致,则该日志文件已经采集完毕。

日志采集问题排查

若发现某台服务器日志采集进度延迟,可用history命令查询该服务器上相关的采集信息。

  1. send_block_flag为true,则说明日志采集进度延迟block在网络部分。
    • send_network_quota_count大于0时,需要对Logstore的Shard进行分裂
    • send_network_error_count大于0时,需要检查网络连通性。
    • 若无相关network error,则需要调整Logtail的发送并发以及流量限制
  2. 发送部分相关参数正常但avg_delay_bytes较高。
    • 可根据read_bytes计算出日志平均解析速度,判断日志产生流量是否异常。
    • 可适当调整logtail的资源使用限制
  3. parse_fail_lines大于0。

    检查日志采集解析配置是否能够匹配所有日志。