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

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

Я настроил ведение журнала 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 он полностью перестал работать, пока я не отменил свои изменения.

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

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

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

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

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

Действия omruleset и discard (~) устарели

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

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

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

Обратите внимание, что устаревшие модули при использовании выдают предупреждающие сообщения. Они сообщают, что конструкция устарела и какой оператор следует использовать в качестве замены. Это не влияет на работу: оба модуля по-прежнему полностью работоспособны и не будут удалены в сроки 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.

Хорошо, я разобрался. Это то, что у меня /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

А теперь вроде делает то, что хочу.

Есть лучшее решение для ведения журнала 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
          .......

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

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

local2.*                                                 /var/log/haproxy.log

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

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