Можем ли мы настроить ввод logstash для прослушивания только определенного набора хостов?

В настоящее время мой ввод logstash прослушивает файл на порту XXXX, мое требование состоит в том, чтобы собирать данные журнала только с определенных хостов (скажем, только с веб-серверов). Я не хочу изменять конфигурацию файлового бита непосредственно на серверах, но я хочу разрешить прослушивание только журналов веб-серверов.

Может ли кто-нибудь предложить, как настроить logstash в этом сценарии? Ниже приведена конфигурация ввода mylogstash.

**input {
  beats {
    port => 50XX
  }
}**

person Prashanth    schedule 06.01.2021    source источник


Ответы (1)


Одним словом, нет, вы не можете настроить ввод, чтобы ограничить, с каких хостов он будет принимать ввод. Что вы можете сделать, так это отбросить события от хостов, которые вас не интересуют. Если набор хостов, от которых вы хотите принимать входные данные, невелик, вы можете сделать это с помощью условного

if [beat][hostname] не в [ hosta, hostb, hostc ] { drop {} }

Точно так же, если ваши имена хостов следуют фиксированному шаблону, вы можете сделать это с помощью регулярного выражения

if [beat][hostname] !~ /web\d+$/ { drop {} }

будет отбрасывать события с любого хоста, чье имя не заканчивается на web, за которым следует число.

Если у вас большой набор хостов, вы можете использовать фильтр перевода, чтобы определить, входят ли они в набор. Например, если вы создаете файл csv со списком хостов

hosta,1
hostb,1
hostc,1

затем выполните поиск, используя

translate {
    field => "[beat][hostname]"
    dictionary_path => "/some/path/foo.csv"
    destination => "[@metadata][field]"
    fallback => "dropMe"
}
if [@metadata][field] == "dropMe" { drop {} }
person Badger    schedule 06.01.2021
comment
Большое спасибо! Оно работало завораживающе - person Prashanth; 14.01.2021