Skip to content

日志轮换场景,往轮换后的旧文件写日志 iLogtail 有时采集有时不采集 #950

Answered by yyuuttaaoo
gohonsen asked this question in Help
Discussion options

You must be logged in to vote
  1. 往move后的文件写入数据是采集不到的。因为这个文件都modify事件路径不匹配采集配置。如果在log to roll file前sleep 1,那就必然采集不到。如果不sleep的话,因为ing文件的create事件,导致还在队列中的老文件再读一次而读到数据。sleep 1后,老文件读取的时候新数据还没有写入,所以就必然采集不上来。

  2. 如果当前没有ing文件,创建并在ing文件中写一条数据,并立刻进行轮转也是采集不到数据的。因为当ilogtail收到事件并尝试打开ing文件时,叫ing的文件已经是新的文件,里面没有内容。

  3. 那为什么sleep <180可以采集到数据,>180不能呢?因为ilogtail每过180s(check_handler_timeout_interval)判断一次是否关闭当前打开的句柄,我们看看<180会发生什么。
    1 写es/es-log.ing,正常读取文件中的内容。
    2 sleep <180,句柄仍然保持打开
    3 mv es/es-log.ing 到 rolling file,创建新的es/es-log.ing,并向rolling file写数据
    4 ilogtail收到新的es/es-log.ing创建,尝试原来的es/es-log.in,因为句柄打开直接读取,然后将老句柄关闭,存入轮转队列。

  4. 再看看>180的。
    1 写es/es-log.ing,正常读取文件中的内容。
    2 sleep >180,句柄关闭
    3 mv es/es-log.ing 到 rolling file,创建新的es/es-log.ing,并向rolling …

Replies: 2 comments

Comment options

You must be logged in to vote
0 replies
Answer selected by linrunqi08
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Help
Labels
None yet
2 participants