Linux: logwatch(8) слишком шумный. Как я могу контролировать уровень шума?

В наших системах Linux по умолчанию запускается утилита logwatch(8). В системе RedHat/CentOS/SL Logwatch вызывается /etc/cron.daily/ cronjob, который затем отправляет ежедневное электронное письмо с результатами. Эти электронные письма имеют тему как:

Subject: Logwatch for $HOSTNAME

Проблема заключается в том, что по умолчанию эти ежедневные электронные письма слишком шумные и содержат много лишней информации (ошибки HTTP, ежедневное использование диска и т. Д.), Которые уже отслеживаются другими службами (Nagios, Cacti, центральный системный журнал и т. Д.). Для 100 систем загрузка электронной почты невыносима. Люди игнорируют электронные письма, а это значит, что мы можем пропустить проблемы, которые обнаруживаются в logwatch.

Как я могу уменьшить количество шума, генерируемого logwatch, но при этом использовать logwatch, чтобы уведомить нас о серьезных проблемах?

Я опубликую свой собственный ответ ниже, но я хотел бы увидеть, что сделали другие.

Примечание: у меня есть похожий вопрос относительно FreeBSD, во FreeBSD: period (8) слишком шумный. Как я могу контролировать уровень шума?

6 ответов

Решение

В целом, доступная документация для 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. Иногда я не хочу полностью отключать logwatch для определенной службы, я просто хочу настроить результаты, чтобы сделать их менее шумными. /usr/share/logwatch/default.conf/services/*.conf содержит конфигурацию по умолчанию для сервисов. Эти параметры могут быть изменены, поместив вашу локальную конфигурацию в /etc/logwatch/conf/services/$SERVICE.conf, К сожалению, возможности logwatch здесь ограничены, и многие исполняемые файлы logwatch полны недокументированного 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 also allows you to strip out output from the logwatch emails by placing regular expressions in /etc/logwatch/conf/ignore.conf, HOWTO-Customize-LogWatch says:

    ignore.conf: This file specifies regular expressions that, when matched by the output of logwatch, will suppress the matching line, regardless of which service is being executed.

    However, I haven't had much luck with this. My requirements need a conditional statement, which is something like 'If there are security warnings due to my security scanner, then don't print the output. But if there are security warnings from my security scanner and from some bad guys, then print the useful parts-- The header which says "Failed logins from:", the IPs of the bad hosts, but not the IPs of scanners.'

  4. Nip it at the source (As suggested by @user48838). These messages are being generated by some application, and then Logwatch is happily spewing the results to you. In these cases, you can modify the application to log less.

    This isn't always desirable, because sometimes you want the full logs to be sent somewhere (to a Central syslog server, central IDS server, Splunk, Nagios, etc.), but you don't want logwatch to email you about this from every server, every day.

Да, logwatch часто слишком шумный. Вы уже упоминали об отключении проверок полностью.

Если вы не хотите этого делать, вы должны предотвратить появление определенных событий. Например - не интересно, подключается ли nagios через ssh к системе DMZ. Но это интересно, если есть другие логины через ssh.

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

Другой случай может быть xinetd - я не хочу получать информацию об успешных соединениях - это можно настроить в xinetd itselv - без отключения проверки журнала для xinetd.

Для интереса я Stefan Lasiewski вариант 2 из ответа Stefan Lasiewski, но для своих целей я хотел включать только определенные линии, а не исключать весь шум, который мне не нужен.

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

Эти 2 сценария работают в основном с использованием grep а также grep -v,

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

Рассматривали ли вы рассылку сообщений о состоянии электронной почты на сервер рассылки, может быть, тот, который может предоставлять дайджесты на основе программируемых атрибутов размера и / или продолжительности / возраста? Подход не уменьшает количество сообщений, отправляемых по электронной почте, но может контролировать количество отдельных сообщений электронной почты путем пакетной обработки, чтобы уменьшить частоту отправки сообщений по электронной почте.

У меня был тот же вопрос о 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

Недавно мне нужно было успокоить вывод из службы sshd. Некоторые из разделов были довольно длинными и не могли управляться путем установки уровня детализации.

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

Конечно, теперь вам нужно следить за любыми обновлениями этого файла сценария, но он дает вам очень хороший контроль над тем, что выводится. В качестве альтернативы, я полагаю, вы могли бы передать вывод logwatch через такой инструмент, как awk или же sed раздеть то, что ты не хочешь, но мне это показалось сложнее.

Другие вопросы по тегам