Logstash - чтение только добавленных данных в файл

Я изучаю, как использовать logstash, и сталкиваюсь с некоторыми проблемами при чтении файла с logstash, который постоянно обновляется. Вот мой тест:

  • logstash.conf
input {
    file {
        path => ["/usr/share/logs_data/first_log_test.log"]
        start_position => "beginning"
    }
}

filter {
    grok {
        match => ["message", "(?<execution_date>\d{4}-\d{2}-\d{2}) (?<execution_time>\d{2}:\d{2}:\d{2})%{GREEDYDATA}ParaBrutos/configs/pipelines/(?<crawler_category>([^/])+)/(?<crawler_subcategory>([^-])+)-(?<crawler_name>([^.])+).json"]
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        user => "elastic"
        password => "changeme"
        ecs_compatibility => disabled
        index => "logs_second"
    }
}

Во-первых, я использую код этого репозитория для установки стека ELK в докеризированном виде.

Я начал с этого тестового файла журнала пустым, а затем добавил несколько строк, которые сопоставляют шаблон, одну за другой, в текстовом редакторе, одновременно видя шаблоны индекса в обновлении кибаны. Однако каждая новая строка, которую я добавляю в этот тестовый журнал, не добавляется сама по себе, и я вижу совпадения старых записей в шаблонах индекса kibana.

Что случается?

  • Может ли это быть связано с тем, что фильтры времени не выбраны при создании шаблона индекса?

  • Или что-то связанное с since_db настройками? Но что? Потому что по умолчанию не должно сохраняться последнее прочитанное положение файла?

  • Или что-то связанное с start_position? Несмотря на то, что согласно документации плагина, предполагается, что он вступит в силу только при первом чтении файла?

Я немного растерялся, много чего перепробовал и до сих пор плохо понимаю, что происходит. Не могли бы вы помочь мне?


person Rafael Higa    schedule 14.02.2021    source источник


Ответы (1)


Если вы используете текстовый редактор, вы, вероятно, создаете новый файл каждый раз, когда выходите из него.

Это может быть проблема повторного использования inode. В выпуске META 211 есть ссылки на различные проблемы. Особенно см. 251.

Отслеживание того, какие файлы были прочитаны, когда эти файлы можно ротировать, является чрезвычайно сложной проблемой. Гораздо сложнее, чем большинство людей изначально думали. Хороший вариант сделать это правильно — проверить содержимое файла контрольной суммой (хотя это не является надежным). Ввод файла не делает этого, потому что это может стать смехотворно дорогим. Вместо этого он реализует очень дешевый метод, который почти всегда работает правильно (но в некоторых случаях он решает, что уже прочитал файл, который он не читал).

Есть и другие случаи, когда он ошибается, дублируя данные (это то, что вы нажимаете). Как я уже сказал, это действительно трудная проблема.

person Badger    schedule 15.02.2021
comment
Именно это и происходило! Я решил обновить свой файл с помощью echo, и это сработало. Спасибо, Барсук! - person Rafael Higa; 15.02.2021