Назад | Перейти на главную страницу

Захватывайте только определенные журналы с помощью syslog-NG

Я новичок в Syslog-ng. sofar Я развернул его, и он отлично работает, отправляя некоторые журналы в MongoDB. Теперь то, что я действительно хочу сделать, - это отправить некоторые журналы (например, / var / log / secure) в MongoDb, одновременно отправляя некоторые другие журналы в файловую систему, но игнорируя другой набор журналов.

вы можете помочь мне определить такую ​​конфигурацию?

спасибо, Макс.

/var/log/secure уже должен поступать из syslog-ng. Таким образом, вам просто нужно перенаправить, куда идут записи журнала.

Старайтесь не думать о вещах в терминах файлов. / var / log / secure - это файл, да, но только потому, что syslog-ng настроен так, чтобы помещать туда записи журнала. Записи журнала содержат всевозможные атрибуты, такие как «средство», «приоритет», имя программы, PID и т. Д. Если я хочу, я могу указать syslog-ng направлять все записи журнала из программы sshd. 'в / var / log / secure.

Итак, что вам нужно сделать, это изменить критерии того, что перенаправляется на mongodb. Представим, что ваша конфигурация syslog-ng выглядит примерно так:

filter f_secure {
  facility(auth) or facility(authpriv);
};
destination d_secure {
  file('/var/log/secure');
};
log {
  source(s_local); filter(f_secure); destination(d_secure);
};

filter f_mongodb {
  program('foobar');
};
destination d_mongodb {
  mongodb(
    ...
  );
};
log {
  source(s_local); fitler(f_mongodb); destination(d_mongodb);
};

Все, что вам нужно сделать, это изменить фильтр для mongodb, чтобы он включал те же элементы, что и фильтр для / var / log / secure. В зависимости от вашей версии syslog-ng это может быть так же просто, как изменить f_mongodb на следующее:

filter f_mongodb {
  filter(f_secure) or program('foobar');
};

Все, что мы сделали, это включили определение f_secure в f_mongodb. Теперь любые изменения в f_secure также повлияет на то, что входит в mongodb.

Однако в более старых версиях syslog-ng вы должны сделать следующее (поскольку рекурсивные фильтры были добавлены в версии 3.X, я считаю):

filter f_mongodb {
  ( facility(auth) or facility(authpriv) ) or program('foobar');
};

Это делает точный то же, что и в нашем предыдущем примере. Единственная разница в том, что мы заменили filter(f_secure) с содержимым самого фильтра. Это все filter(f_secure) делает. Это просто упрощает обслуживание вашей конфигурации, поэтому у вас не будет повсюду повторяющихся строк конфигурации.

Обратите внимание, что скобка вокруг facility(auth) or facility(authpriv) не являются строго необходимыми, я просто включил их как логический эквивалент того, что filter(f_secure) делает