Fluent bit, timestamps и timezone — баги, они есть везде.

Fluent bit очень легкий агент по сбору логов и прочей информации для Ealstic Stack. Но, как и у всех программ, у него встречаются баги.

Например, существует проблема по формированию @timestamp различными input плагинами. Плагины tail и syslog считают, что текущее время компьютера находится во временной зоне UTC и добавляют к нему разницу между UTC и текущей тайм зоной. Это происходит даже в том случае, если текущее время системы сконфигурировано с учетом вашей временной зоны. А, например, плагин exec правильно читает текущее время системы.

В результате в индексах эластика записям присваивается не правильный @timestamp. И некоторые логи в индексе попадают в будущее 🙂

Бороться с этим можно только при помощи парсеров. В сообщениях, обрабатываемых fluent bit обязательно должно быть поле, содержащее время когда было сформировано событие. Обычно в лог файлах такое поле присутствует. Если его там нет, постарайтесь настроить программы так, что бы они помещали его в логи.

При определении секции [INPUT] используйте параметр Parser для однострочных логов. Или Parser_Firstline для многосторочных логов.

В секции PARSER, для проблемных плагинов явным образом указывайте параметр Time_Offset.

Например, для обработки информации получаемой из syslog используют стандартный парсер syslog-rfc3164. Поскольку input плагин syslog содержит баг, то придется в парсере добавить параметр Time_Offset. В результате конфигурация будет выглядеть как то так:

[INPUT]
    Name syslog
    Tag syslog
    Parser syslog-rfc3164
    Listen 127.0.0.1
    Port 5140
    Mode tcp

[PARSER]
    Name syslog-rfc3164
    Format regex
    Regex /^\<(?<pri>[0-9]+)\>(?<time>[^ ]* {1,2}[^ ]* [^ ]*) (?<host>[^ ]*) (?<ident>[a-zA-Z0-9_\/\.\-]*)(?:\[(?<pid>[0-9]+)\])?(?:[^\:]*\:)? *(?<message>.*)$/
    Time_Key time
    Time_Format %b %d %H:%M:%S
    Time_Format %Y-%m-%dT%H:%M:%S.%L
    Time_Keep On
    Time_Offset +0300

Итого, если вы видите, что события в эластике формируются в будущем, начинайте писать свой PARSER 🙂