Я новичок в 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)
делает