Intereting Posts
Установите NFS4-экспорт из Ubuntu на Mac OSX 10.11 Postfix spam (hack) Как я могу создать подвыборку BTRFS с именем, содержащим «@»? Сделать gvim прокруткой до центра после открытия файла с номерами строк? Установить распределенную / usr / -подобную иерархию пакетов в каталог / usr / Как заблокировать мой экран автоматически, если интернет-соединение потеряно? Является ли использование файлов cookie из веб-браузера разумным обоснованием для разработки настольных приложений? grep: gcov-tool.1.gz: Нет такого файла или каталога Абсолютный Linux без звука (дистрибутив на основе slackware) Как проверить SSD-диск на наличие ошибок с Live CD? Определите, имеет ли текущий пользователь права на запись в каталоге Какой пользователь должен запускать apache и PHP? Какие разрешения должны иметь / var / www файлы? Как заставить vsftpd регистрировать числовой IP-адрес при попытках подключения? Параллельное выполнение программы по нескольким файлам Как rsync разрешает конфликты?

Мониторинг журналов с использованием сценария оболочки

Я хотел бы отслеживать файл журнала на наличие ошибок и затем отправлять электронное письмо администраторам.

Файл журнала содержит данные, как показано ниже.

11 Aug 02:30 Service1 restarted 11 Aug 05:35 Service1 restarted 11 Aug 08:43 Service2 restarted 11 Aug 11:20 Service1 restarted 11 Aug 14:53 Service2 restarted 

Я хотел бы создать скрипт, который запускается каждые 5 минут и проверяет последнее появление перезапуска службы и отправляет электронное письмо.

Например: если сценарий работает в 02:35, он видит, что Service1 перезагружен, поэтому он отправит электронное письмо, такое как Service1 restarted at 02:30 . Теперь, когда скрипт работает в 5:45, он должен отправить электронное письмо, которое Service1 перезапустили только в 05:35 (не должен включать перезапуск 02:35)

Есть ли способ достичь этого требования? Я в основном новичок в Linux и Shell.

Начните с пятиминутного кронтаба:

 */5 * * * * myscript.sh 

Что работает myscript.sh (в директории $HOME )

  #!/bin/bash tail -1 /path/to/file.log > /some/dir/after if cmp -s /some/dir/after /some/dire/before then cat /some/dir/after | mail -s "restart" admin@exemple.com cp /some/dir/after /some/dir/before fi 

С правильными значениями (конечно).

Обратите внимание, что это означает, что в течение пяти минут не будет двух перезагрузок.

Я предполагаю, что в 02:35 последней строкой файла будет перезапуск 02:30, поэтому все, что вам нужно, это запись cron, которая выглядит как

 */5 * * * * tail -1 /path/to/file.log | mailx -s "Last restart" admin@example.com 

Недостатком этого подхода является то, что администратор получит тот же адрес электронной почты в 02:35, 02:40, 02:45, …

Попробуй это:

кронтаб

 */5 * * * * /path/to/checklog.bash 

скрипт

 #!/bin/bash service=$(tail -1 /path/to/logfile | awk '{print $4}') logdate=$(tail -1 /path/to/logfile | awk '{print $1,$2,$3}') if test 'find "/path/to/logfile" -mmin -5' then echo "$service was restarted on $logdate" | mail -s "Restart notification" mail@domain.com fi 

Одним из улучшений в ответе, предоставленном @ glenn-jackman, будет использование опции -E mailx. На странице man для mailx:

-E

Не отправляйте сообщения с пустым телом. Это полезно для ошибок трубопровода из скриптов cron (8).

Более надежным способом справиться с этим было бы использование инструмента, который был построен для точного сценария, который вы имеете в виду (который предназначен для мониторинга журнала и отправки электронных писем на вновь обнаруженные шаблоны).

Загрузить этот инструмент

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

 ./logrobot localhost /var/tmp/logXray autonda /var/log 60m '.*error.*_P_.*fatal.*' '.' 1 1 errchk -ndshow email=John.Blah@blah.com 

В приведенной выше команде ниже приведены параметры, которые вы должны изменить, как видите:

  • '. * error. * _ P _. * fatal. *' – здесь во всех журналах в каталоге / var / log ищутся два шаблона

  • / var / log – это каталог, журналы которого вы хотите отслеживать. Если вы хотите контролировать конкретный файл журнала, замените его на абсолютный путь к файлу журнала.

  • 1 – Отправить предупреждение, если в журнале (журналах) найдено 1 запись,
  • 1 – Отправить критическое предупреждение, если в журнале (журналах) найдено 1 запись,
    • Если предупреждение и критическое совпадают, проверка будет предупреждаться как критическая, если отслеживаемый шаблон найден в журналах.
  • errchk – это тег для этой конкретной проверки журнала. Дайте это заслуживающее имя … имя, соответствующее типу отслеживаемых журналов … ie tomcatLogCheck
  • И, конечно, электронная почта =. Измените это на соответствующие адреса электронной почты.

Это лучший вариант, поскольку он включает в себя необходимую логику, которая обеспечивает проверку только новых строк, которые добавляются в отслеживаемый журнал (журналы). Это также намного более эффективно. И он также должен быть портативным.

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