Як утримати повідомлення журналу haproxy з / var / log / syslog


29

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

Що я роблю неправильно?

Відповіді:


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, щоб catchall " . " Відповідав моєму "local0. *" Рядку. Рішення полягало в тому, щоб перейменувати мій файл, характерний для haproxy, на /etc/rsyslog.d/49-haproxy.conf
Giles Thomas

1
FYI невелике оновлення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 "виклик". Виклик дозволяє виконувати набір правил, як підпрограма, і робить це з набагато вищою продуктивністю, ніж це зробив omruleset. Зауважте, що omruleset може працювати з черги асинхронізації. Це було більше стороною, ніж бажаний ефект, і не підтримується оператором виклику. Якщо цей ефект був необхідний, його можна просто змоделювати, запустивши асинхронно виконуючі дії набору правил (що в будь-якому випадку є правильним способом впоратися з цим).

Зауважте, що застарілі модулі видають попереджувальні повідомлення при використанні. Вони говорять про те, що конструкція застаріла і який вислів потрібно використовувати як заміну. Це не впливає на операції: обидва модулі все ще повністю функціонують і їх не буде вилучено у часовій рамці 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

І зараз, здається, роблю те, що хочу.


Зазвичай бажано НЕ змінювати конфігураційні файли, створені іншими пакетами, оскільки це створює проблеми з оновленням / власністю. Якщо це разовий сервер сніжинки, все добре, але для автоматизованих розгортань зміна 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
          .......

1

Я вважаю за краще не возитися з упорядкуванням файлу, тому замість цього я додаю локальний0.none до . рядок. Конфігурація виглядає так:

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

local2.*                                                 /var/log/haproxy.log

(Випробувано на CentOS 7)

Сподіваюся, що це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.