Журнал моніторингу за допомогою сценарію оболонки

Я хотів би відслідковувати помилки у лог-файлі, а потім надсилати повідомлення адміністраторам.

Файл журналу містить такі дані, як показано нижче

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 перезавантажено о 02:30 . Тепер, коли скрипт запускається о 5:45, він повинен надіслати електронний лист, який перезавантажено Service1 лише о 05:35 (не включати 02:35 перезавантаження)

Чи є спосіб досягти цієї вимоги? Я в принципі новачок у Linux і Shell

5
Чи знаєте ви журнал?
додано Автор sebix, джерело
Яку оболонку ви використовуєте? Це реальний вивід журналу або кожен рядок починається з дати?
додано Автор anotherday, джерело

5 Відповіді

Почніть з 5-хвилинного кронтабу:

*/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" [email protected]
     cp /some/dir/after /some/dir/before
 fi

З правильними значеннями (звичайно).

Зверніть увагу, що це означає, що не буде двох перезавантажень протягом п'яти хвилин.

4
додано

Я припускаю, що в 02:35 останній рядок файлу буде перезавантаженням 02:30, тому все, що вам потрібно, це запис cron, який виглядає так:

*/5 * * * * tail -1 /path/to/file.log | mailx -s "Last restart" [email protected]

Недоліком цього підходу є те, що адміністратор отримає той самий лист у 02:35, 02:40, 02:45, ...

3
додано
@YRVK.
додано Автор Oliv, джерело
@ Archemar, @ tachomi Велике спасибі за ваші цінні пропозиції, я створив невеликий скрипт і він працює відмінно.
додано Автор mercy, джерело
Засмучений пропускав це, thanx для того, щоб давати мені знати
додано Автор mercy, джерело

Спробуйте це:

crontab

*/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" [email protected]
fi
2
додано

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

Завантажити цей інструмент

Після розпакування та запуску програми ви побачите багато прикладів реального життя, які можна імітувати. Один приклад, на який потрібно зосередитися, це MODEL13, який вирішує завдання надсилання сповіщень електронною поштою на певні адреси електронної пошти кожного разу, коли шаблон виявляється в одному або декількох різних журналах.

./logrobot localhost /var/tmp/logXray autonda /var/log 60m '.*error.*_P_.*fatal.*' '.'  1 1 errchk -ndshow [email protected]

У наведеній вище команді наведені нижче параметри, які потрібно змінити, як ви вважаєте за потрібне:

  • '.*error.*_P_.*fatal.*' - here, two patterns are being searched for in all logs in the /var/log directory

  • /var/log - this is the directory whose logs you want to monitor. If you wish to monitor a specific log file, replace this with the absolute path to the log file.

  • 1 - Send a warning alert if 1 entry is found in the log(s)
  • 1 - Send a critical alert if 1 entry is found in the log(s)
    • If warning and critical are the same, the check will alert as critical when the monitored pattern is found in the logs.
  • errchk - This is the tag for this particular log check. Give this a deserving name...a name matching the type of log(s) being monitored...i.e. tomcatLogCheck
  • And of course the email=. Change this to the appropriate email addresses.

Це кращий варіант, оскільки він містить необхідну логіку, яка забезпечує сканування лише нових рядків, доданих до контрольованих журналів. Це також набагато ефективніше. І він також повинен бути портативним.

Звичайно, переконайтеся, що на хості встановлений постфікс. Я можу забути щось тут, але це має бути суть того, як працює інструмент.

0
додано

Одним з покращень у відповіді, наданому @ glenn-jackman , є використання опції -E для mailx. З man-сторінки для mailx:

-E

     

Не надсилати повідомлення з порожнім тілом. Це корисно для помилок конфігурації cron (8).

0
додано