Logtail默认只采集增量的日志文件,如果您需要导入历史文件,可使用Logtail自带的导入历史文件功能。

实现原理

Logtail基于事件进行文件采集,事件通常由监听或定期轮询文件修改产生。除以上方式外,Logtail还支持从本地文件中加载事件,以此驱动日志采集。历史文件采集就是基于本地事件加载实现的功能。

限制说明

  • Logtail版本需在0.16.6及以上。
  • 需要被采集的历史文件必须处于采集配置覆盖的范围下,且此前未被Logtail采集过。
  • 历史文件的最后修改时间必须在配置Logtail之前。
  • 本地事件导入最长延迟为1分钟。
  • 由于加载本地配置属于特殊行为,Logtail会向服务器发送LOAD_LOCAL_EVENT_ALARM以提醒用户。

使用方式

步骤1 创建采集配置

请根据~~28967~~创建采集配置并应用到机器组,确保文件处于对应采集配置覆盖范围。

步骤2 获取配置唯一标识

采集配置的唯一标识可在本地/usr/local/ilogtail/user_log_config.json 中获取,示例如下:

grep "##" /usr/local/ilogtail/user_log_config.json | awk '{print $1}'
"##1.0##log-config-test$multi"
"##1.0##log-config-test$ecs-test"
"##1.0##log-config-test$metric_system_test"
"##1.0##log-config-test$redis-status"

步骤3 添加本地事件

本地事件保存的路径为 /usr/local/ilogtail/local_event.json,类型为标准JSON,格式为:

[
{
"config" : "${your_config_unique_id}",
"dir" : "${your_log_dir}",
"name" : "${your_log_file_name}"
},
{
...
}
...
]
  • 配置项
    配置项 说明 示例
    config 步骤2获取的配置唯一标识。 ##1.0##log-config-test$ecs-test
    dir 日志所在文件夹。
    说明
    文件夹不能以/结尾。
    /data/logs
    name 日志文件名 access.log.2018-08-08
    说明
    为防止Logtail加载无效的JSON,建议您将本地事件配置保存在临时文件中,编辑完成后拷贝到/usr/local/ilogtail/local_event.json 文件中。
  • 配置示例
    $ cat /usr/local/ilogtail/local_event.json
    [
    {
    "config" : "##1.0##log-config-test$ecs-test",
    "dir" : "/data/log/",
    "name" : "access.log.2017-08-08"
    },
    {
    "config" : "##1.0##log-config-test$ecs-test",
    "dir" : "/tmp",
    "name" : "access.log.2017-08-09"
    }
    ]
    

异常排查

检查Logtail是否加载配置

通常情况下,本地local_event.json保存后,Logtail会在1分钟内将本地配置文件加载到内存中,并将local_event.json内容清空。

您可以通过以下三种方式检查Logtail是否已经读取事件:

  • local_event.json文件被清空,说明Logtail已经读取到事件信息。
  • 检查/usr/local/ilogtail/ilogtail.LOG 文件中是否包含 process local event关键字。若local_event.json被清空但未查询到该组关键字,可能因为您的本地配置文件内容不合法而被过滤。
  • 通过查询诊断错误查询是否存在LOAD_LOCAL_EVENT_ALARM提示。

配置被加载但未采集到数据

若Logtail已经加载配置但数据未被采集到,可能由以下几种原因造成:

  • 配置不合法。
  • 本地配置config不存在。
  • 日志文件不在Logtail采集配置已设定的路径下。
  • 该日志文件被Logtail采集过。

如何采集已经被采集过的数据

如果您需要采集已经被采集过的数据,可通过以下方式实现:

  1. 执行命令/etc/init.d/ilogtaild stop停止Logtail。
  2. /tmp/logtail_check_point文件中查找对应的日志文件路径。
  3. 删除该日志文件的checkpoint(JSON object)并保存。
  4. 按照本文步骤3添加本地事件。
  5. 执行命令/etc/init.d/ilogtaild start启动Logtail。