Я использую плагин Logstash S3 Input для обработки журналов доступа S3.
Все журналы доступа хранятся в одной корзине, а их тысячи. Я настроил плагин, чтобы включать только объекты S3 с определенным префиксом (на основе даты, например, 2016-06).
Однако я вижу, что Logstash повторно опрашивает каждый объект в Bucket и не принимает во внимание ранее проанализированные объекты.
{:timestamp=>"2016-06-21T08:50:51.311000+0000", :message=>"S3 input: Found key", :key=>"2016-06-01-15-21-10-178896183CF6CEBB", :level=>:debug, :file=>"logstash/inputs/s3.rb", :line=>"111", :method=>"list_new_files"}
т.е.
Каждую минуту (или любой установленный вами интервал) Logstash запускается с начала сегмента и выполняет вызов API AWS для каждого найденного объекта. Кажется, это делается для того, чтобы узнать время последнего изменения объекта, чтобы он мог включать соответствующие файлы для анализа. Очевидно, это все замедляет и не дает мне возможности анализировать журналы доступа в реальном времени.
Помимо постоянного обновления префикса для соответствия только последним файлам, есть ли способ заставить Logstash пропускать чтение старых объектов S3?
Для плагина есть параметр sincedb_path, но он, кажется, относится только к тому, где записаны данные о том, какой файл был проанализирован последним.
Похоже, это поведение по умолчанию для этого плагина, поэтому им нужно управлять с помощью функций плагина.
По сути, вы должны настроить плагин для резервного копирования, а затем удаления объектов с префиксом в том же ведре. Таким образом, Logstash пропустит объект при опросе корзины после следующего интервала.
Пример конфигурации:
s3 {
bucket => "s3-access-logs-eu-west-1"
type => "s3-access"
prefix => "2016-"
region => "eu-west-1"
sincedb_path => "/tmp/last-s3-file-s3-access-logs-eu-west-1"
backup_add_prefix => "logstash-"
backup_to_bucket => "s3-access-logs-eu-west-1"
interval => 120
delete => true
}
Эта конфигурация будет сканировать ведро каждые 120 секунд на предмет объектов, начинающихся с
2016-
Он обработает эти объекты, а затем скопирует их в ту же корзину с префиксом
logstash-
затем удалите их.
Это означает, что они не будут найдены в следующем интервале опроса.
2 важных примечания:
Вы не можете использовать backup_add_prefix отдельно (в документации предлагается). Вы можете использовать этот параметр только вместе с backup_to_bucket
Убедитесь, что учетная запись / роль IAM, которую вы используете для взаимодействия с S3, имеет разрешения на запись для используемых вами сегментов (другой Logstash не может удалять / переименовывать объекты).