Logstash фильтрует системный журнал по группам хостов?

Я ' У меня запущен экземпляр Elasticsearch / Logstash / Kibana, который я весело наполняю системными журналами с разных хостов.

Создав его для масштабирования - с несколькими прослушивателями logstash syslogd и несколькими узлами ES - он отлично справляется с сопоставлением журналов по большому портфелю серверов.

У меня есть только одна проблема - группировка хосты. Я могу получить наборы данных для групп хостов на основе различных критериев из моей базы данных конфигурации - физическое местоположение, «услуга», «клиент» и т. Д.

И я действительно хотел бы иметь возможность добавлять их в качестве критериев фильтрации в свой база данных elasticsearch, и, если это вообще возможно, я могу использовать их в Kibana без особых изменений.

В настоящее время я думаю о следующем:

  • настраиваемый фильтр logstash, который ищет имя хоста в дампе данных и добавляет теги (на самом деле, сервис / клиент / местоположение - это все, что мне действительно нужно).
  • Попытка добавить отношения родитель / потомок для «хоста» документ.
  • использование «перколятора» для перекрестной ссылки (каким-то образом?)
  • на поле «скрипт»?
  • Что-то вроде грязного взлома, включающего задание cron для обновления записей с помощью пост-загрузки метаданных.

Но мне интересно, занимается ли кто-нибудь уже этим и может предложить разумный подход?

0
задан 5 January 2016 в 12:32
2 ответа

Немного покопавшись, я наконец решил использовать плагин logstash 'filter-translate'

Для этого нужен файл YAML с ключами и значениями, и позволяет вам переписывать входящую запись журнала на ее основе.

Итак:

translate { 
    field => "logsource"
    destination => "host_group"
    dictionary_path => [ "/logstash/host_groups.dict" ]
}

Это довольно простой список:

hostname : group
hostname2 : group

В настоящий момент он статичен, перестраивается и загружается через cron . Я намерен продвинуться к etcd и confd , чтобы сделать более адаптивное решение.

Это означает, что события уже «помечены» при входе в elasticsearch, а также, поскольку мои механизмы logstash распределены и автономны, запуск «кэшированного» списка в любом случае желателен. Мои списки хостов меняются недостаточно быстро, поэтому это проблема.

2
ответ дан 4 December 2019 в 12:24

Вы говорите, что используете плагин ввода Logstash syslog в качестве цели для локальных демонов системного журнала вашего хоста.

Предполагая, что демон системного журнала каждого хоста также записывает записи журнала в файлы, вы можете использовать Filebeat , чтобы отправить эти файлы в LS, добавив нужные теги в источник. В зависимости от количества хостов, которое у вас есть, эта задача может быть нетривиальной.

Другие варианты - от самых простых до самых сложных:

  1. Напишите удар if ... elseif ... else .. . в конфигурации LS для захвата каждого хоста и добавления соответствующих тегов с фильтром mutate .
    Это работает, но означает изменение вашей конфигурации каждый раз, когда вы добавляете / удаляете хост / службу / клиента. Наличие каждого хоста в собственном файле конфигурации немного упрощает ситуацию, но по-прежнему означает перезапуск LS каждый раз.

  2. Используйте фильтр elasticsearch , чтобы запросить документ в ES, который имеет нужные вам теги, и добавьте их к событиям, которые вы обрабатываете.
    Запрос должен быть хорошо составлен, но это может сработать. Вам нужно будет создать документы определенного типа, возможно, в уникальном индексе, для каждого хоста, чтобы ваши данные всегда были там.

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

1
ответ дан 4 December 2019 в 12:24

Теги

Похожие вопросы