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

30

В наших системах 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) слишком шумный. Как я могу контролировать уровень шума?

Стефан Ласевский
источник

Ответы:

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. Иногда я не хочу полностью отключать 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 и добавил / изменил соответствующие фильтры и сократил, вероятно, 20 КБ на каждое письмо. Это было несколько лет назад, поэтому я уверен, что logwatch улучшился с тех пор, но я не обновлял свою версию, если это не так.
Майк
5

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

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

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

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

Nils
источник
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

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

user48838
источник
Я имею. Мы также рассмотрели решение только для системного журнала, где мы отфильтровываем часть шума. Однако для простоты мы хотели посмотреть, возможно ли контролировать этот материал у источника.
Стефан Ласевский
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

что-то что-то
источник