Linux: logwatch (8) занадто галасливий. Як я можу контролювати рівень шуму?


30

Наші системи Linux за замовчуванням виконують утиліту logwatch (8) . У системі RedHat / CentOS / SL Logwatch викликається /etc/cron.daily/cronjob, який потім щодня надсилає електронне повідомлення з результатами. Ці електронні листи мають такі теми, як:

Subject: Logwatch for $HOSTNAME

Проблема полягає в тому, що за замовчуванням ці щоденні електронні листи занадто галасливі і містять багато зайвої інформації (помилки HTTP, щоденне використання диска тощо), які вже контролюються іншими службами (Nagios, Cacti, центральний syslog тощо). Для 100 систем завантаження електронної пошти нестерпне. Люди ігнорують електронні листи, а це означає, що ми можемо пропустити проблеми, які вибирає лог-ват.

Як я можу зменшити кількість шуму, що створюється логваутом, але все ж використовувати logwatch, щоб повідомити нас про суттєві проблеми?

Я опублікую свою власну відповідь нижче, але я хотів би побачити, що зробили інші.

Примітка : У мене схоже запитання щодо FreeBSD, у FreeBSD: періодичний (8) занадто галасливий. Як я можу контролювати рівень шуму?

Відповіді:


39

Загалом, наявна документація для Logwatch не має достатнього пояснення і часто є занадто розпливчастою. Я зібрав кілька корисних прикладів і знизив шум Logwatch понад 95%.

Ось що я знайшов.

Майте на увазі, що ви можете знайти документацію Logwatch за адресою /usr/share/doc/logwatch-*/HOWTO-Customize-LogWatch, і вона містить кілька корисних прикладів.

  1. Для RHEL / CentOS / SL налаштування журналу за замовчуванням знаходиться під /usr/share/logwatch/default.conf/logwatch.conf

    Ці параметри можна змінити, помістивши локальну конфігурацію під /etc/logwatch/conf/logwatch.conf. Помістіть у цьому файлі таке, щоб вказати logwatch повністю ігнорувати такі сервіси, як "httpd" та щоденні перевірки використання диска:

    # Don't spam about the following Services
    Service = "-http"
    Service = "-zz-disk_space"
    
  2. Іноді я не хочу повністю відключити часопис для конкретної послуги, я просто хочу налагодити результати, щоб зробити їх менш галасливими. /usr/share/logwatch/default.conf/services/*.confмістить конфігурацію служб за замовчуванням. Ці параметри можна змінити, помістивши локальну конфігурацію під /etc/logwatch/conf/services/$SERVICE.conf. На жаль, можливості логотипа тут обмежені, і багато виконуваних файлів журналу сповнені незадокументованих Perl. Ваш вибір - замінити виконуваний файл чимось іншим або спробувати замінити деякі налаштування за допомогою /etc/logwatch/conf/services.

    Наприклад, у мене є сканер безпеки, який виконує сканування по всій мережі. Під час запуску тестів сканер безпеки генерує безліч повідомлень про помилки в журналах додатків. Я хотів би, щоб logwatch ігнорував помилки моїх сканерів безпеки, але все ж сповіщав мене про напади інших хостів. Це детальніше висвітлено в Logwatch: Ігнорувати певні IP-адреси для перевірки SSH та PAM? . Для цього я розміщую наступне /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 також дозволяє викреслити вихід з електронних листів logwatch, розміщуючи регулярні вирази /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch говорить:

    ignore.conf: Цей файл задає регулярні вирази, які при зіставленні з результатом logwatch придушуватимуть відповідну лінію, незалежно від того, яка служба виконується.

    Однак мені не дуже пощастило з цим. Мої вимоги потребують умовного твердження, яке є на кшталт "Якщо є попередження про безпеку через мій сканер безпеки, не друкуйте вихід. Але якщо в моєму сканері безпеки та від поганих хлопців є попередження про безпеку , тоді надрукуйте корисні частини - заголовок, в якому написано "Не вдалося ввійти від:", IP-адреси поганих хостів, але не IP-адреси сканерів ".

  4. Спустіть його біля джерела (Як запропонував @ user48838). Ці повідомлення генеруються якоюсь програмою, і тоді Logwatch із задоволенням підводить вам результати. У цих випадках ви можете змінювати програму, щоб менше входити в систему.

    Це не завжди бажано, тому що іноді ви хочете, щоб повні журнали кудись надсилалися (на центральний сервер syslog, центральний сервер IDS, Splunk, Nagios тощо), але ви не хочете, щоб лог-ват посилав вам повідомлення про це від кожен сервер, щодня.


Це саме те, що я зробив, однак, якщо я добре пам’ятаю, існували деякі сервіси (я вважаю, що це стосується відхилень електронної пошти), які неправильно розбиралися з журналів і тому були включені в якусь категорію «інше» та цілі рядки з журналів надсилалися електронною поштою. Це було надзвичайно шумно. Тому я просто відредагував вихідний код logwatch і додав / змінив відповідні фільтри та скоротив, ймовірно, 20 кбіт на електронну пошту. Це було кілька років тому, тому я впевнений, що логотип спостерігається покращився з тих пір, але я не оновлював свою версію на випадок, якщо вона не відбулася.
Майк

5

Так - логвард часто занадто галасливий. Ви вже згадали про відключення чеків повністю.

Якщо ви не хочете цього робити, ви повинні запобігти появі певних подій. Наприклад - нецікаво, якщо nagios підключається через ssh до системи DMZ. Але цікаво, якщо є інші логіни через ssh.

Ми використовуємо rsyslog замість ksyslogd (спочатку встановіть rsyslog, потім видаліть ksyslogd). За допомогою rsyslog ви можете точно настроїти те, що йде до журналів, а що ні (наприклад, створити вираз, який видаляє повідомлення з sshd, що містять "nagios подключены"). Таким чином logwatch повідомлятиме лише корисну інформацію.

Інший випадок може бути xinetd - я не хочу отримувати інформацію про успішні з'єднання - це можна налаштувати в xinetd itselv - без відключення перевірки logwatch для xinetd.


3

В якості цікавої точки зору я скористався варіантом 2, який отримав відповідь Стефана Ласєвського, але для своїх цілей я хотів включити лише конкретні рядки, а не виключати весь шум, який я не хотів.

Я налаштовував vsftpd, тому я створив, /etc/logwatch/conf/services/vsftpd.confі замість того, щоб використовувати щось на зразок, *Remove = testuserяке видаляє рядки, що включають текст, testuserя використав рядок, *OnlyContains = "testuser"який повертає лише рядки, включаючи цей текст.

Ці 2 сценарії працюють в основному за допомогою grepі grep -v.

Різниця полягає в тому, що ви можете використовувати *Removeстільки разів, скільки хочете, але разом з цим *OnlyContainsвам доведеться використовувати його один раз, якщо хочете щось чи щось інше чи щось інше. Тож для кількох значень ви робите*OnlyContains = "testuser|testuser2|testuser3"


1

Чи розглядали ви, як перенаправити повідомлення про стан електронної пошти серверу списку, можливо, таке, яке може надавати дайджести на основі програмованих атрибутів розміру та / або тривалості / віку? Цей підхід не зменшує кількість журналів, що надсилаються електронною поштою, але може контролювати кількість окремих електронних листів шляхом пакетного зменшення частоти надсилання електронної пошти.


Я маю. Ми також розглянули рішення, що стосується лише системного журналу, де ми фільтруємо частину шуму. Однак для простоти ми хотіли зрозуміти, чи можна контролювати цей матеріал у джерелі.
Стефан Ласєвський

1
Якщо ви дивитесь на те, щоб "зав'язати" це джерело та мінімізувати будь-які випадки при цьому, тоді ви можете розглянути можливість обмеження зусиль для коригування рівнів ведення журналу, коли вони доступні.
user48838

0

Нещодавно мені потрібно було вгамувати вихід із служби sshd. Деякі з розділів були досить довгими і їх неможливо було контролювати, встановивши рівень деталізації.

Це не ідеальне рішення, але я завершив переосмислення скрипту sshd , скопіювавши його звідси: /usr/share/logwatch/scripts/services/sshdсюди:/etc/logwatch/scripts/services/sshd

Звичайно, тепер вам доведеться слідкувати за будь-якими оновленнями цього файлу сценарію, але це дає дуже тонкий контроль над тим, що виводиться. Як варіант, я гадаю, ви могли logwatchб передати результат через такий інструмент, як awkабо sedвикреслити те, що не хочете, але мені це здалося складніше.


0

У мене було те саме питання щодо UNIX та Linux Stackexchange, і ось я відповів, що вирішив це для мене:

Ви можете сказати logwatch дивитись на 7 днів замість 1 дня, змінивши параметр Range у вашому logwatch.conf:

Range = between -7 days and -1 days

Ви можете сказати logwatchзапускати щотижня замість щоденного, перемістивши його з каталогу щотижневих cron у щоденний cronкаталог:

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

Завдяки @JeffSchaller

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