Назад | Перейти на главную страницу

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

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

Subject: Logwatch for $HOSTNAME

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

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

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

Заметка: У меня есть аналогичный вопрос по FreeBSD на FreeBSD: периодический (8) слишком шумный. Как я могу контролировать уровень шума?

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

Вот что я нашел.

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

  1. В RHEL / CentOS / SL конфигурация logwatch по умолчанию находится под /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 также позволяет вырезать вывод из электронных писем logwatch, помещая регулярные выражения в /etc/logwatch/conf/ignore.conf. HOWTO-Customize-LogWatch говорит:

    ignore.conf: этот файл определяет регулярные выражения, которые при сопоставлении с выводом logwatch подавляют соответствующую строку, независимо от того, какая служба выполняется.

    Однако мне с этим не особо везло. Мои требования нуждаются в условном выражении, которое выглядит примерно так: «Если есть предупреждения системы безопасности из-за моего сканера безопасности, не печатайте вывод». Но если есть предупреждения от моего сканера безопасности и от некоторых плохих парней, а затем распечатайте полезные части - заголовок, который говорит «Неудачный вход с:», IP-адреса плохих хостов, но не IP-адреса сканеров ».

  4. Удерживайте его в источнике (как предлагает @ user48838). Эти сообщения генерируются каким-то приложением, а затем Logwatch с радостью сообщает вам результаты. В этих случаях вы можете изменить приложение, чтобы вести журнал меньше.

    Это не всегда желательно, потому что иногда вы хотите, чтобы полные журналы отправлялись куда-то (на центральный сервер системного журнала, центральный сервер IDS, Splunk, Nagios и т. Д.), Но вы не хотите, чтобы logwatch отправлял вам по электронной почте об этом из каждый сервер, каждый день.

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

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

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

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

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

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

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

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

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

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

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

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

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