всем привет, кто как мониторит коды ответов в логах nginx?
Ad Widget
Collapse
мониторинг кодов 200 502 503 nginx
Collapse
X
-
-
в логах, есть условие - если 502/503 - больше 1% от всех запросов за последние n минут.
может быть есть уже готовое решение?Comment
-
Тут недолго самому. Делайте четыре Item.
1. Считает все запросы
2. Считает 502
3. Считает 503
4. Калькулируемый Item: высчитывает нужное отношение всех запросов относительно 502 и 503.
Далее триггер на Item 4.
Либо скрипт написать и передавать одно значение через юзер параметр.Comment
-
я так пока и сделалТут недолго самому. Делайте четыре Item.
1. Считает все запросы
2. Считает 502
3. Считает 503
4. Калькулируемый Item: высчитывает нужное отношение всех запросов относительно 502 и 503.
Далее триггер на Item 4.
Либо скрипт написать и передавать одно значение через юзер параметр.
item nginx_codes[500] nginx_codes[502] nginx_codes[503] и потом уже вычисляемые 100*last("nginx_codes[500]")/last("nginx_codes_all")Code:UserParameter=nginx_codes[*],cat /var/log/nginx/access.log | awk '{print $9}' | grep -c $1 UserParameter=nginx_codes_all,cat /var/log/nginx/access.log | wc -l
но каждый раз дергать лог который бывает под 500 мб как-то не оч хорошо, хотелось бы какого-то более гибкого или готового решенияComment
-
Ну тут решение именно с юзер параметрами у вас, которые каждый раз читают весь лог. А если делать всё только через Item средствами заббикса, то они могут читать не весь лог, а только накопившуюся часть (и можно ограничить, кстати, кол-вом новых строк в логе на тот случай, если лог пойдёт лавинообразно расти).
Можно и лог ротейтить до того, как он вырастить до таких больших размеров.Comment
-
вы про какие сейчас item'ы говорите? про log и log.count ? они не подходят, т.к. в строке, например в url, может попадаться 500 и он ее посчитает как ошибка, а мне нужны именно состояние кодов в логеНу тут решение именно с юзер параметрами у вас, которые каждый раз читают весь лог. А если делать всё только через Item средствами заббикса, то они могут читать не весь лог, а только накопившуюся часть (и можно ограничить, кстати, кол-вом новых строк в логе на тот случай, если лог пойдёт лавинообразно расти).
Можно и лог ротейтить до того, как он вырастить до таких больших размеров.Comment
-
пробую такой вариант
но вычисляемое значениеCode:log.count[{$NGINX_ACCESS_LOG}," 500 ",,,skip]
выводится ошибкаCode:100*last("log.count[$NGINX_ACCESS_LOG},\" 500 \",,,skip]")/last("nginx_codes_all")Code:Cannot evaluate function "last()": item "host:log.count[$NGINX_ACCESS_LOG}," 500 ",,,skip]" does not exist
Last edited by garcia; 14-12-2018, 18:35.Comment
-
$NGINX_ACCESS_LOG это макрос? попробуйте вначале получить рабочий Item без макроса и без умножения на 100. Так же при делении сделайте пробелы до и после слэша (иначе разные ни о чём не говорящие ошибки может выдавать тоже).
"...p]") / last("..." вот так знак деления должен бытьComment
-
Получается, 500 ошибки считаются через log.count за интервал обновления, а общее количество записей - по всему логу. Можно, конечно, дельту в препроцессинге взять...А можно тоже через log.count считать (или logrt.count) . И зачем вам вычисляемый айтем, вычисляйте % прямо в триггере. Кстати, самое сложное в вашей задаче - определить правильное значение maxproclines, записей будет много, с дефолтной настройкой может и подвирать.Comment
-
сейчас я сделал, так
Code:log_format zabbix '$status'; access_log /var/log/nginx/access_code.log zabbix;
и item'ы такиеCode:UserParameter=nginx_codes[*],grep -c $1 /var/log/nginx/access_code.log UserParameter=nginx_codes_all,cat /var/log/nginx/access_code.log | wc -l
вычисляемые item'ыCode:nginx_codes[500] nginx_codes[502] nginx_codes_all
я не говорю что все правильно делаю, может кто подскажет как лучше сделать?Code:100*last("nginx_codes[500]")/last("nginx_codes_all") 100*last("nginx_codes[502]")/last("nginx_codes_all")Comment
-
Ну, если надо строить график именно по относительной величине, то да. Только надо позаботиться, чтобы не было деления на 0, если нет запросов к nginx за интервал времени. Например, добавив +1 в знаменатель. Погрешность увеличится, но не сильно.
В триггере того же можно добиться, вместо a/b>k написав a>b*k.
Comment
-
немного поменялись условия, нужен график, который будет показывать кол-во 500, 502 и 503 запросов за 15 минут в процентах, относительно числа всех запросов.
как мне получить вычисляемый айтем запросов за 15 мин из кол-ва всех запросов и кол-ва 502 запросов?
триггер я сделал
но как такое сделать через вычисляемый айтем, что-то не могу понятьCode:100*({Template nginx:nginx_codes[502].last()}-{Template nginx:nginx_codes[502].last(#3)})/{Template nginx:nginx_codes_all.last()}>1Comment
Comment