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.


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.