Итак, у меня довольно скромная настройка Logstash для журналов Apache, которую я использую в RedHat 7 (производственная), а также macOS High Sierra (10.13.6) для разработки, и что-то странное произошло после обновления с Logstash версии 6.3.2до 6.4.1.Я использую Homebrew на macOS для установки и обновления Logstash, и эти проблемы не исчезают, даже если я «разберусь» свои установленные элементы Hombrew и переустановлю.
Прямо в точку.
Проще говоря, статические данныевходные файлы не читаются и не принимаются при запуске в 6.4.1, как это было раньше в 6.3.2 и ранее.Для 6.4.1 мне нужно вручную cat
записать строки в целевой путь, чтобы Logstash «проснулся» и забрать эти новые строки, даже если я назначу новый режим read
.
В концесегодня эта настройка не нуждается в настройке sincedb
и может быть перезапущена и прочитана из заголовка файла до конца, и мы все счастливы ... По крайней мере, до Logstash 6.4.1 ... Теперь никто не счастлив.Что можно сделать, чтобы Logstash всегда считывал данные с начала файлов, несмотря ни на что?
Подробности и обнаружение.
Используемая мной настройка Logstash просто делаетнекоторая фильтрация логов Apache для ввода.Входная конфигурация, которую я использую, выглядит следующим образом;обратите внимание, что путь к файлу слегка подправлен для обеспечения конфиденциальности, но по сути это именно то, что я использую сейчас и использую в течение последнего года или около того без проблем:
input {
file {
path => "/opt/logstash/coolapp/access_log*"
exclude => "*.gz"
start_position => "beginning"
sincedb_path => "/dev/null"
ignore_older => 0
close_older => 3600
stat_interval => 1
discover_interval => 15
}
}
То, как я использую это для локальныхразработка заключается в том, чтобы просто получить копию удаленных журналов сервера Apache и поместить их в этот каталог /opt/logstash/coolapp/
.
Затем, когда я запускаю Logstash через командную строку, как это, с установленным зельем -f
, поэтому мой coolapp-apache.conf
читается:
logstash -f coolapp-apache.conf
Logstash запускается локально, выдает всю свою кучу сообщений о состоянии запуска до последнего сообщения:
[2018-09-24T12:40:09,458][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
Что для меня означает, что он полностью запущен и работаети проверка выходных данных моего сбора данных показывает - если он работает - поток данных, поступающих ... Но при использовании Logstash 6.4.1 я не вижу данных, поступающих.
Плагин для ввода файлов работает в режиме tail
.
Проверка обновленной документации для модуля ввода файлов (v4.1.5) показывает , есть новая опция mode
, которая имеет read
режим и режим tail
.Зная, что режим по умолчанию - tail
, я протестировал настройку, выполнив следующие действия после запуска моей локальной настройки отладки Logstash.Сначала я скопировал access_log
следующим образом:
cp /opt/logstash/coolapp/access_log /opt/logstash/coolapp/access_log_BAK
Затем я обнулел основной файл access_log
, используя :>
следующим образом:
:> /opt/logstash/coolapp/access_log
И наконец я просто запустилcat
и добавил данные этого скопированного файла в исходный файл следующим образом:
cat /opt/logstash/coolapp/access_log_BAK > /opt/logstash/coolapp/access_log
Когда я это сделал, во-вторых, данные начали течь, как и ожидалось!Я полагаю, новый плагин для ввода файлов ориентирован на tailing a file more than
чтение?Во всяком случае, это работает, но явно раздражает.Я не развиваюсь так.Мне нужен Logstash, чтобы просто читать файлы и анализировать их.
Плагин для ввода файлов не работает в режиме read
.
Поэтому я попытался использовать следующую настройку, чтобы просто прочитать файлы основываясь на том, что я увидел в официальном файле Logstash, введите mode
документацию :
input {
file {
path => "/opt/logstash/coolapp/access_log"
mode => "read"
file_completed_action => "log"
file_completed_log_path => "/Users/jakegould/Desktop/access_log_foo"
}
}
Конечно, такие вещи, как access_log_foo
, предназначены только для проверки имени файла для тестирования, но когдавсе сказано и сделано, этот режим read
совершенно не работает на macOS.Я даже пытался изменить path
на что-то вроде моего рабочего стола, и это не работает.И весь трюк «обнулить, а затем добавить файл», который я использовал, как объяснено в объяснении «хвостовой режим», здесь не подходит, поскольку файл не tail
ed, я полагаю?
Итакзная все это:
Что можно сделать, чтобы Logstash 6.4.1 всегда считывал данные с начала файлов, независимо от того, как это было раньше в Logstash версии 6.3.2а предыдущий?