Как сохранить сообщения журнала haproxy вне / var / log / syslog

29

Я настроил ведение журнала haproxy через rsyslogd, используя советы из этой статьи , и все, кажется, работает нормально. Файлы журнала получают сообщения журнала.

Тем не менее, каждое сообщение журнала от haproxy также отображается в /var/log/syslog. Это означает, что после запуска сервера системный журнал будет совершенно бесполезен, так как он будет переполнен сообщениями журнала haproxy.

Я хотел бы отфильтровать эти сообщения от /var/log/syslog. Изучив документацию по rsyslogd, я попытался изменить файл следующим /etc/rsyslog.d/50-default.confобразом:

*.*;auth,authpriv.none;haproxy.none     -/var/log/syslog

Я просто добавил ;haproxy.noneчасть. После перезапуска rsyslogd он полностью перестал работать, пока я не отменил свои изменения.

Что я делаю не так?

itsadok
источник

Ответы:

26

Вы также можете сделать следующее, чтобы они не заходили в другие журналы:

local0.*                        -/var/log/haproxy.log
& ~

В & ~означает не ставить , что соответствует в строке выше где - нибудь еще для остальных правил.

Кайл Брандт
источник
Спасибо. Это кажется более логичным, чем редактирование основной конфигурации.
itadok
13
Стоит отметить, что если вы сделаете это, ваша строка local0. * Должна быть обработана перед строкой " . " В /etc/rsyslog.d/50-default.conf. Я создал файл с именем /etc/rsyslog.d/haproxy.conf, который будет содержать мою конфигурацию ведения журнала для haproxy, но он вошел в syslog, несмотря на то, что в конце имелось «& ~». Это потому, что (конечно) 50-default.conf загружается до haproxy.conf, так что ловушка " . " Была найдена перед моей строкой "local0. *". Решением было переименовать мой файл, специфичный для haproxy, в /etc/rsyslog.d/49-haproxy.conf
Джайлс Томас,
1
К вашему сведению небольшое обновлениеrsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
KCD
Здесь обсуждается использование & stopвместо & ~: rsyslog.com/doc/v8-stable/compatibility/v7compatibility.html .
Slm
14

Использование & ~v7 в rsyslogd было объявлено устаревшим, и вам рекомендуется использовать его & stopвместо. Вы можете прочитать больше об этом в этом разделе страницы совместимости v7 .

действие omruleset и discard (~) не рекомендуется

Оба продолжают работать, но были заменены лучшими альтернативами.

Действие сброса (символ тильды) было заменено директивой RainerScript «Стоп». Он считается более интуитивным и предлагает немного лучшую производительность.

Модуль omruleset был заменен директивой RainerScript «call». Call позволяет выполнять набор правил, как подпрограмма, и делает это с гораздо более высокой производительностью, чем omruleset. Обратите внимание, что omruleset может быть запущен из асинхронной очереди. Это было скорее побочным эффектом, чем желаемым, и не поддерживается оператором вызова. Если этот эффект был необходим, его можно просто смоделировать, выполняя действия вызываемых наборов правил асинхронно (что в любом случае является правильным способом справиться с этим).

Обратите внимание, что устаревшие модули выдают предупреждающие сообщения при использовании. Они говорят, что конструкция устарела и какое утверждение следует использовать в качестве замены. Это не влияет на операции: оба модуля по-прежнему полностью работоспособны и не будут удалены в течение периода v7.

Так что для HAProxy что-то вроде этого:

$ more /etc/rsyslog.d/haproxy.conf
local2.*    /var/log/haproxy.log
& stop

Относительно того, как это работает, команда & stoprsyslogd должна отказаться от любых дополнительных сообщений, которые соответствовали ранее согласованным правилам до этого момента. Чтобы гарантировать, что это правило выбрано на ранней стадии, вы можете изменить имя файла с /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

И теперь кажется, что я делаю то, что хочу.

itsadok
источник
Обычно предпочтительнее НЕ изменять файлы конфигурации, созданные другими пакетами, так как это создает проблемы обновления / владения. Если это одноразовый сервер-снежинка, то все в порядке, но для автоматических развертываний изменение 50-default.conf обычно является «плохой вещью».
Брюс Эдж
2

Существует лучшее решение для ведения журнала haproxy.

  • HAproxy работает в chroot, поэтому он не может получить доступ /dev/log
  • Согласно официальному руководству rsyslog должен быть настроен для прослушивания сетевого сокета:

    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    

Но для этого вы можете использовать только сокеты rsyslog:

rsyslog.d / haproxy.conf:

    # HAproxy local socket
    $AddUnixListenSocket /var/lib/haproxy/dev/log
    :programname, contains, "haproxy" /var/log/haproxy.log
    & stop

haproxy.cfg:

    global
          log         /dev/log daemon
          chroot      /var/lib/haproxy
          .......
user320813
источник
1

Я предпочитаю не связываться с порядком расположения файлов, поэтому вместо этого я добавляю local0.none в . строка ввода. Конфиг выглядит так:

*.info;mail.none;authpriv.none;cron.none;local2.none     /var/log/messages

local2.*                                                 /var/log/haproxy.log

(Проверено на CentOS 7)

Надеюсь, это поможет!

mgna20
источник