Jak trzymać wiadomości dziennika haproxy poza katalogiem / var / log / syslog

29

Skonfigurowałem rejestrowanie haproxy przez rsyslogd, korzystając ze wskazówek z tego artykułu i wszystko wydaje się działać dobrze. Pliki dziennika pobierają komunikaty dziennika.

Jednak każdy komunikat dziennika od haproxy pojawia się również o godzinie /var/log/syslog. Oznacza to, że po uruchomieniu serwera syslog będzie zupełnie bezużyteczny, ponieważ zostanie uruchomiony z komunikatami dziennika haproxy.

Chciałbym odfiltrować te wiadomości /var/log/syslog. Po przejrzeniu dokumentacji rsyslogd próbowałem zmienić plik w /etc/rsyslog.d/50-default.conften sposób:

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

Po prostu dodałem ;haproxy.noneczęść. Po ponownym uruchomieniu rsyslogd przestał działać całkowicie, dopóki nie cofnąłem moich zmian.

Co ja robię źle?

itsadok
źródło

Odpowiedzi:

26

Możesz także wykonać następujące czynności, dzięki czemu nie będą one zapisywane w innych dziennikach:

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

Te & ~środki, aby nie stawiać co dopasowane w powyższej linii nigdzie indziej na resztę zasad.

Kyle Brandt
źródło
Dzięki. Wydaje się to mieć większy sens niż konieczność edytowania głównej konfiguracji.
itsadok
13
Warto zauważyć, że jeśli to zrobisz, twoja linia local0. * Musi zostać przetworzona przed linią „ . ” W pliku /etc/rsyslog.d/50-default.conf. Utworzyłem plik o nazwie /etc/rsyslog.d/haproxy.conf, aby zawierał moją konfigurację rejestrowania specyficzną dla haproxy, ale logował się do syslog, mimo że na końcu było „& ~”. Jest tak, ponieważ (oczywiście) 50-default.conf jest ładowany przed haproxy.conf, więc catchall „ . ” Został dopasowany przed moją linią „local0. *”. Rozwiązaniem było zmienić nazwę mojego pliku haproxy na /etc/rsyslog.d/49-haproxy.conf
Giles Thomas
1
FYI mała aktualizacjarsyslogd-2307: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
KCD
Omówiono użycie & stopzamiast & ~: rsyslog.com/doc/v8-stable/compatibility/v7compatibility.html .
slm
14

Użycie & ~przestarzałej wersji vs rsyslogd i zachęca się do korzystania z & stopniego. Możesz przeczytać więcej na ten temat w tej sekcji strony kompatybilności v7 .

Omruleset i discard (~) action są nieaktualne

Oba nadal działają, ale zostały zastąpione lepszymi alternatywami.

Odrzuć akcję (znak tyldy) zastąpiono dyrektywą RainerScript „stop”. Jest uważany za bardziej intuicyjny i oferuje nieco lepszą wydajność.

Moduł omruleset został zastąpiony dyrektywą RainerScript „call”. Wywołanie pozwala na wykonanie zestawu reguł takiego jak podprogram i robi to z dużo większą wydajnością niż zestaw omrule. Pamiętaj, że zestaw omruleset można uruchomić z kolejki asynchronicznej. Było to bardziej efekt uboczny niż pożądany i nie jest obsługiwane przez instrukcję call. Jeśli ten efekt był potrzebny, można go po prostu zasymulować, uruchamiając asynchronicznie wywołane akcje zestawów reguł (co w każdym razie jest właściwym sposobem na poradzenie sobie z tym).

Zauważ, że przestarzałe moduły emitują komunikaty ostrzegawcze, gdy są używane. Mówią, że konstrukcja jest przestarzała i która instrukcja ma zostać użyta jako zamiennik. Nie wpływa to na operacje: oba moduły są nadal w pełni operacyjne i nie zostaną usunięte w ramach czasowych v7.

Więc dla HAProxy coś takiego:

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

Co do tego, jak to działa, & stopmówi rsyslogd, aby odrzucił wszelkie dodatkowe wiadomości, które pasowały do ​​wcześniej dopasowanych reguł do tego momentu. Aby zagwarantować wczesne pobranie tej reguły, możesz zmienić nazwę pliku z /etc/rsyslog.d/haproxy.confna /etc/rsyslog.d/00-haproxy.conf.

slm
źródło
3

Ok, rozgryzłem to. Tak /etc/rsyslog.d/20-haproxy.confwygląda moje :

$ModLoad imudp
$UDPServerRun 514

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

Zmieniłem linię 50-default.confna:

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

A teraz wydaje się, że robi to, co chcę.

itsadok
źródło
Zasadniczo lepiej NIE modyfikować plików konfiguracyjnych utworzonych przez inne pakiety, ponieważ powoduje to problemy z aktualizacją / własnością. Jeśli jest to jednorazowy serwer z płatkami śniegu, wszystko w porządku, ale w przypadku automatycznych wdrożeń modyfikowanie 50-default.conf jest na ogół „złą rzeczą”.
Bruce Edge,
2

Istnieje lepsze rozwiązanie do rejestrowania haproxy.

  • HAproxy działa w chroot, więc nie ma dostępu /dev/log
  • Zgodnie z oficjalną instrukcją rsyslog musi być skonfigurowany do nasłuchiwania gniazda sieciowego:

    # 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
    

Ale do tego możesz użyć tylko gniazd 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
          .......
użytkownik320813
źródło
1

Wolę nie zadzierać z kolejnością plików, więc zamiast tego dodaję plik local0.none do pliku . wpis linii. Konfiguracja wygląda następująco:

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

local2.*                                                 /var/log/haproxy.log

(Testowane na CentOS 7)

Mam nadzieję, że to pomaga!

mgna20
źródło