
Я настроил ведение журнала haproxy через rsyslogd, следуя советамЭта статья, и все, кажется, работает нормально. Файлы журнала получают сообщения журнала.
Однако каждое сообщение журнала от haproxy также отображается в /var/log/syslog
. Это означает, что как только сервер будет запущен, syslog станет совершенно бесполезным, так как он будет переполнен сообщениями журнала haproxy.
Я хотел бы отфильтровать эти сообщения от /var/log/syslog
. После изучения документации rsyslogd я попытался изменить файл /etc/rsyslog.d/50-default.conf
следующим образом:
*.*;auth,authpriv.none;haproxy.none -/var/log/syslog
Я просто добавил ;haproxy.none
часть. После перезапуска rsyslogd он полностью перестал работать, пока я не отменил свои изменения.
Что я делаю не так?
решение1
Вы также можете сделать следующее, чтобы они не попали ни в какие другие журналы:
local0.* -/var/log/haproxy.log
& ~
Это & ~
означает, что то, что совпало в строке выше, не следует помещать где-либо еще для остальных правил.
решение2
Использование & ~
было устарело в v7 rsyslogd, и вам рекомендуется использовать & stop
вместо этого. Вы можете прочитать больше об этом в этом разделестраница совместимости v7.
Действия omruleset и discard (~) устарели
Оба варианта продолжают работать, но на смену им пришли более эффективные альтернативы.
Действие discard (символ тильды) было заменено директивой RainerScript «stop». Оно считается более интуитивным и обеспечивает немного лучшую производительность.
Модуль omruleset был заменен директивой RainerScript «call». Call позволяет выполнять набор правил как подпрограмму и делает это с гораздо большей производительностью, чем omruleset. Обратите внимание, что omruleset может быть запущен из асинхронной очереди. Это был скорее побочный, чем желаемый эффект, и не поддерживается оператором call. Если бы этот эффект был необходим, его можно было бы просто смоделировать, запустив действия вызываемых наборов правил асинхронно (что в любом случае является правильным способом справиться с этим).
Обратите внимание, что устаревшие модули выдают предупреждающие сообщения при использовании. Они сообщают, что конструкция устарела и какой оператор следует использовать в качестве замены. Это не влияет на операции: оба модуля по-прежнему полностью работоспособны и не будут удалены в период v7.
Так что для HAProxy что-то вроде этого:
$ more /etc/rsyslog.d/haproxy.conf
local2.* /var/log/haproxy.log
& stop
Что касается того, как это работает, то & stop
сообщает rsyslogd о необходимости отбрасывать любые дополнительные сообщения, которые соответствуют ранее совпавшим правилам до этого момента. Чтобы гарантировать, что это правило будет выбрано на ранней стадии, вы можете изменить имя файла с /etc/rsyslog.d/haproxy.conf
на /etc/rsyslog.d/00-haproxy.conf
.
решение3
Ладно, я разобрался. Вот как /etc/rsyslog.d/20-haproxy.conf
выглядит мой:
$ModLoad imudp
$UDPServerRun 514
local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log
Я изменил строку 50-default.conf
на:
*.*;auth,authpriv,local0,local1.none -/var/log/syslog
И теперь, кажется, он делает то, что я хочу.
решение4
Я предпочитаю не возиться с порядком файлов, поэтому вместо этого добавляю local0.none в.строка записи. Конфигурация выглядит так:
*.info;mail.none;authpriv.none;cron.none;local2.none /var/log/messages
local2.* /var/log/haproxy.log
(Проверено на CentOS 7)
Надеюсь, это поможет!