Наши системы 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
, и он содержит несколько полезных примеров.
В 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"
Иногда я не хочу полностью отключать 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.*
"
logwatch также позволяет вырезать вывод из электронных писем logwatch, помещая регулярные выражения в /etc/logwatch/conf/ignore.conf
. HOWTO-Customize-LogWatch говорит:
ignore.conf: этот файл определяет регулярные выражения, которые при сопоставлении с выводом logwatch подавляют соответствующую строку, независимо от того, какая служба выполняется.
Однако мне с этим не особо везло. Мои требования нуждаются в условном выражении, которое выглядит примерно так: «Если есть предупреждения системы безопасности из-за моего сканера безопасности, не печатайте вывод». Но если есть предупреждения от моего сканера безопасности и от некоторых плохих парней, а затем распечатайте полезные части - заголовок, который говорит «Неудачный вход с:», IP-адреса плохих хостов, но не IP-адреса сканеров ».
Удерживайте его в источнике (как предлагает @ 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