Linux: logwatch (8) jest zbyt głośny. Jak mogę kontrolować poziom hałasu?

30

Nasze systemy Linux domyślnie uruchamiają narzędzie logwatch (8) . W systemie RedHat / CentOS / SL Logwatch jest wywoływany przez /etc/cron.daily/cronjob, który następnie wysyła codzienny e-mail z wynikami. Te e-maile mają następujący temat:

Subject: Logwatch for $HOSTNAME

Problem polega na tym, że te codzienne wiadomości e-mail są domyślnie zbyt głośne i zawierają wiele zbędnych informacji (błędy HTTP, codzienne użycie dysku itp.), Które są już monitorowane przez inne usługi (Nagios, Kaktusy, centralny syslog itp.). W przypadku 100 systemów ładowanie wiadomości e-mail jest nie do zniesienia. Ludzie ignorują wiadomości e-mail, co oznacza, że ​​możemy przeoczyć problemy wykryte przez zegarek.

Jak mogę zmniejszyć hałas generowany przez rejestrator, ale nadal używać rejestratora, aby powiadomić nas o poważnych problemach?

Poniżej zamieszczę własną odpowiedź, ale chciałbym zobaczyć, co zrobili inni.

Uwaga : Mam podobne pytanie dotyczące FreeBSD w FreeBSD: okresowe (8) jest zbyt głośne. Jak mogę kontrolować poziom hałasu?

Stefan Lasiewski
źródło

Odpowiedzi:

39

Ogólnie rzecz biorąc, dostępna dokumentacja Logwatcha nie jest odpowiednio wyjaśniona i często jest zbyt niejasna. Poskładałem kilka użytecznych przykładów i zmniejszyłem hałas Logwatch o ponad 95%.

Oto, co znalazłem.

Pamiętaj, że możesz znaleźć dokumentację Logwatch na stronie /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch, która zawiera kilka przydatnych przykładów.

  1. W przypadku RHEL / CentOS / SL domyślna konfiguracja rejestratora jest poniżej /usr/share/logwatch/default.conf/logwatch.conf

    Te ustawienia można zastąpić, umieszczając konfigurację lokalną pod /etc/logwatch/conf/logwatch.conf. Umieść w tym pliku następujące polecenie, aby program logwatch całkowicie zignorował usługi takie jak „httpd” i codzienne sprawdzanie użycia dysku:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. Czasami nie chcę całkowicie wyłączać Logwatch dla określonej usługi, chcę tylko dostroić wyniki, aby były mniej głośne. /usr/share/logwatch/default.conf/services/*.confzawiera domyślną konfigurację usług. Parametry te można zastąpić, umieszczając konfigurację lokalną pod /etc/logwatch/conf/services/$SERVICE.conf. Niestety, zdolność logwatcha jest tutaj ograniczona, a wiele plików wykonywalnych logwatcha jest pełnych nieudokumentowanych Perl. Możesz zastąpić plik wykonywalny czymś innym lub spróbować zastąpić niektóre ustawienia za pomocą /etc/logwatch/conf/services.

    Na przykład mam skaner bezpieczeństwa, który uruchamia skanowanie w sieci. Podczas testów skaner bezpieczeństwa generuje wiele komunikatów o błędach w dziennikach aplikacji. Chciałbym, aby logwatch ignorował błędy skanerów bezpieczeństwa, ale nadal powiadamiał mnie o atakach z innych hostów. Jest to omówione bardziej szczegółowo w Logwatch: Zignorować niektóre adresy IP dla kontroli SSH i PAM? . Aby to zrobić, umieszczam następujące elementy /etc/logwatch/conf/services/sshd.conf:

    # Ignore these hosts
    *Remove = 192.168.100.1
    *Remove = X.Y.123.123
    # Ignore these usernames
    *Remove = testuser
    # Ignore other noise. Note that we need to escape the ()
    *Remove = "pam_succeed_if\(sshd:auth\): error retrieving information about user netscan.*
    

  3. Logwatch pozwala również na usunięcie danych wyjściowych z wiadomości e-mail Logwatch poprzez umieszczenie w nim wyrażeń regularnych /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch mówi:

    ignore.conf: ten plik określa wyrażenia regularne, które po dopasowaniu przez wyjście logwatch, pomijają pasującą linię, niezależnie od tego, która usługa jest wykonywana.

    Jednak nie miałem z tym dużo szczęścia. Moje wymagania wymagają warunkowego stwierdzenia, które przypomina coś w rodzaju „Jeśli ostrzeżenia bezpieczeństwa są spowodowane przez mój skaner bezpieczeństwa, nie drukuj danych wyjściowych. Ale jeśli z mojego skanera bezpieczeństwa i niektórych złych ludzi są ostrzeżenia bezpieczeństwa , wydrukuj przydatne części - nagłówek z napisem „Nieudane logowanie z:”, adresy IP złych hostów, ale nie adresy IP skanerów. ”

  4. Daj do źródła (jak sugeruje @ user48838). Te komunikaty są generowane przez jakąś aplikację, a następnie Logwatch z radością wyrzuca Ci wyniki. W takich przypadkach możesz zmodyfikować aplikację, aby rejestrowała mniej.

    Nie zawsze jest to pożądane, ponieważ czasami chcesz, aby pełne logi zostały gdzieś wysłane (na centralny serwer syslog, centralny serwer IDS, Splunk, Nagios itp.), Ale nie chcesz, aby logwatch wysyłał Ci wiadomości e-mail z każdy serwer, każdego dnia.

Stefan Lasiewski
źródło
To właśnie zrobiłem, jednak jeśli dobrze pamiętam, niektóre usługi (uważam, że mają coś wspólnego z odrzuceniem wiadomości e-mail), które nie zostały poprawnie przeanalizowane z dzienników i dlatego zostały wymienione w jakiejś kategorii „inne” i całe wiersze z dzienników były wysyłane pocztą e-mail. To było bardzo głośne. Dlatego właśnie edytowałem kod źródłowy logwatcha i dodałem / zmieniłem odpowiednie filtry i wyciąłem prawdopodobnie 20kb na e-mail. To było kilka lat temu, więc jestem pewien, że od tego czasu logwatch poprawił się, ale nie zaktualizowałem mojej wersji na wypadek, gdyby nie.
Mike
5

Tak - zegarek jest często zbyt głośny. Wspomniałeś już o całkowitym wyłączeniu kontroli.

Jeśli nie chcesz tego robić, musisz uniemożliwić pojawienie się określonych zdarzeń. Na przykład - nie jest interesujące, jeśli nagio łączy się przez ssh z systemem DMZ. Ale jest interesujące, jeśli są inne loginy przez ssh.

Używamy rsyslog zamiast ksyslogd (najpierw zainstaluj rsyslog, a następnie usuń ksyslogd). Za pomocą rsyslog możesz precyzyjnie dostroić to, co trafia do dzienników, a co nie (np. Zbudować wyrażenie, które usuwa wiadomości z sshd zawierające „podłączone nagio”). W ten sposób logwatch zgłosi tylko przydatne informacje.

Innym przypadkiem może być xinetd - nie chcę otrzymywać informacji o udanych połączeniach - można to skonfigurować w xinetd itselv - bez wyłączania sprawdzania logwatcha dla xinetd.

Nils
źródło
3

Jako punkt zainteresowania podążyłem za opcją 2 od odpowiedzi Stefana Lasiewskiego, ale dla moich celów chciałem zawrzeć tylko określone linie, a nie wykluczyć cały hałas, którego nie chciałem.

Konfigurowałem vsftpd, więc utworzyłem /etc/logwatch/conf/services/vsftpd.confi zamiast używać czegoś takiego, *Remove = testuserco usuwa wiersze zawierające tekst testuser, użyłem linii, *OnlyContains = "testuser"która zwraca tylko wiersze zawierające ten tekst.

Te 2 skrypty działają bardzo zasadniczo przy użyciu grepi grep -v.

Różnica polega na tym, że możesz użyć *Removetyle razy, ile chcesz, ale *OnlyContainsmusisz go użyć raz, jeśli chcesz czegoś, czegoś innego lub czegoś innego. Tak dla wielu wartości*OnlyContains = "testuser|testuser2|testuser3"

Jacob Tomlinson
źródło
1

Czy zastanawiałeś się nad przesłaniem wiadomości e-mail o statusie do serwera list, być może takiego, który może dostarczyć podsumowania w oparciu o programowalne atrybuty rozmiaru i / lub czasu trwania / wieku? Podejście to nie zmniejsza ilości rejestrowanych wiadomości e-mail, ale może kontrolować liczbę pojedynczych wiadomości e-mail przez grupowanie w celu zmniejszenia częstotliwości wysyłania wiadomości e-mail.

użytkownik48838
źródło
Mam. Rozważaliśmy również rozwiązanie tylko do syslog, w którym odfiltrowujemy część hałasu. Jednak dla uproszczenia chcieliśmy sprawdzić, czy można kontrolować te rzeczy u źródła.
Stefan Lasiewski
1
Jeśli patrzysz na „szczypanie” źródła i minimalizowanie jakichkolwiek wpadek, możesz rozważyć ograniczenie wysiłków do dostosowania poziomów rejestrowania, jeśli są dostępne.
user48838,
0

Niedawno musiałem wyciszyć dane wyjściowe z usługi sshd. Niektóre sekcje były dość długie i nie można było ich kontrolować, ustawiając poziom szczegółowości.

To nie jest idealne rozwiązanie, ale skończyło się na tym, że przesłoniłem skrypt sshd , kopiując go stąd: /usr/share/logwatch/scripts/services/sshdtutaj:/etc/logwatch/scripts/services/sshd

Oczywiście musisz teraz nadążać za wszelkimi aktualizacjami tego pliku skryptu, ale daje to bardzo dobrą kontrolę nad tym, co jest wyświetlane. Alternatywnie, przypuszczam, że możesz przesłać dane wyjściowe logwatchprzez narzędzie takie jak awklub sedusunąć to, czego nie chcesz, ale wydawało mi się to trudniejsze.

Dominic P.
źródło
0

Miałem to samo pytanie na temat wymiany stosów w systemach UNIX i Linux i oto odpowiedź, którą dla mnie naprawiłem:

Możesz powiedzieć logwatchowi, aby patrzył na 7 dni zamiast 1 dnia, zmieniając parametr Range w logwatch.conf:

Range = between -7 days and -1 days

Możesz powiedzieć, logwatchaby uruchamiał się co tydzień zamiast codziennie, przenosząc go z tygodniowego katalogu cron do cronkatalogu dziennego :

mv /etc/cron.daily/00logwatch /etc/cron.weekly/

Dzięki @JeffSchaller

coś tam coś tam
źródło