Триггер на повторяющееся событие в логах — различия между версиями

Материал из Linux Wiki
Перейти к: навигация, поиск
м
м
 
Строка 7: Строка 7:
 
* Команда для выполнения в случае срабатывания триггера; в данном случае это pkill -f eth-proxy.py
 
* Команда для выполнения в случае срабатывания триггера; в данном случае это pkill -f eth-proxy.py
  
В практическом варианте в данном случае в бесконечном цикле был запущен прокси (скрипт на Python eth-proxy.py), при проблемах с доступом к майнинг-пулу у которого вся работу уходила в reject'ы. При наличии множества строк, содержащих слово REJECT, данный скрипт завершал процесс прокси, а цикл запускал его заново.
+
В качестве практического применения в моем случае в бесконечном цикле был запущен прокси (скрипт на Python eth-proxy.py), при проблемах с доступом к майнинг-пулу у которого вся работа уходила в reject'ы. При наличии множества строк, содержащих слово REJECT, данный скрипт завершал процесс прокси, а цикл запускал его заново.
  
  

Текущая версия на 18:30, 29 декабря 2015

Скрипт на GNU awk, показанный ниже, поможет выполнять некую внешнюю команду в том случае, если в выводе (например, логе внешней программы) с некоторой периодичностью присутствует определенный паттерн и порог присутствия этого паттерна выше определенного значения.

4 места для правки скрипта:

  • Размер "окна" логов; в данном случае это 15 строк
  • Паттерн для поиска; в данном случае это REJECT
  • Процент строк с паттерном в заданном окне, по превышению которого срабатывает триггер; в данном случае это 30%
  • Команда для выполнения в случае срабатывания триггера; в данном случае это pkill -f eth-proxy.py

В качестве практического применения в моем случае в бесконечном цикле был запущен прокси (скрипт на Python eth-proxy.py), при проблемах с доступом к майнинг-пулу у которого вся работа уходила в reject'ы. При наличии множества строк, содержащих слово REJECT, данный скрипт завершал процесс прокси, а цикл запускал его заново.



some command 2>&1 | gawk '{
 
nl+=1
 
if (nl>15) nl=0
 
if ($0 ~ /REJECT/) arr[nl]=1 ; else arr[nl]=0
 
sum=0
 
for (i in arr) sum+=arr[i]
 
if (sum*100/length(arr)>'30') system("pkill -f eth-proxy.py")
 
print
 
}'