Ad Widget

Collapse

мониторинг кодов 200 502 503 nginx

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • garcia
    started a topic мониторинг кодов 200 502 503 nginx

    мониторинг кодов 200 502 503 nginx

    всем привет, кто как мониторит коды ответов в логах nginx?

  • garcia
    replied
    Originally posted by DSV12 View Post
    А вы не ошибаетесь на единицу? last() == last(#1), т.е. last() - last(#3) - это разница двух значений, полученных через два интервала обновления (у вас это 5 мин) = 10 мин, а не 15.
    спасибо, да все правильно, надо поставить #4

    Leave a comment:


  • DSV12
    replied
    Originally posted by garcia View Post
    в итоге сделал так
    Code:
    100*(last("nginx_codes[502]")-last("nginx_codes[502]",#3))/(last("nginx_codes_all")-last("nginx_codes_all",#3))
    интервал обновления 5 мин стоит и получаю кол-во 502 ошибок за 15 минут от всех запросов за 15 мин
    А вы не ошибаетесь на единицу? last() == last(#1), т.е. last() - last(#3) - это разница двух значений, полученных через два интервала обновления (у вас это 5 мин) = 10 мин, а не 15.

    Leave a comment:


  • garcia
    replied
    в итоге сделал так
    Code:
    100*(last("nginx_codes[502]")-last("nginx_codes[502]",#3))/(last("nginx_codes_all")-last("nginx_codes_all",#3))
    интервал обновления 5 мин стоит и получаю кол-во 502 ошибок за 15 минут от всех запросов за 15 мин

    Leave a comment:


  • DSV12
    replied
    Originally posted by garcia View Post
    триггер я сделал
    Code:
    100*({Template nginx:nginx_codes[502].last()}-{Template nginx:nginx_codes[502].last(#3)})/{Template nginx:nginx_codes_all.last()}>1
    А у вас сознательно использовано last(#3)? Это ведь третье значение с конца, а не три последних значения. Кстати, в интервалах обновления можно использовать макросы - это чтобы не завязываться жёстко на конкретное значение интервала обновления и подогнанный под него last() - макрос интервала можно использовать в выражениях.

    Leave a comment:


  • sudoRoman
    replied
    Ну так все значения же есть. Сложить нужные коды ошибок nginx_codes[*] в калькулируемом Item, кол-во всех запросов подсчитать тоже не проблема. Сумму общих кодов делим на кол-во всех кодов, множим на 100. А график далее составить из двух Item: полученное число % и общее кол-во кодов.

    Leave a comment:


  • garcia
    replied
    немного поменялись условия, нужен график, который будет показывать кол-во 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()}>1
    но как такое сделать через вычисляемый айтем, что-то не могу понять

    Leave a comment:


  • Semiadmin
    replied
    Originally posted by sudoRoman View Post
    По триггеру потом график не построить, чтобы отладить сработку или выявить закономерности
    Ну, если надо строить график именно по относительной величине, то да. Только надо позаботиться, чтобы не было деления на 0, если нет запросов к nginx за интервал времени. Например, добавив +1 в знаменатель. Погрешность увеличится, но не сильно.
    В триггере того же можно добиться, вместо a/b>k написав a>b*k.

    Leave a comment:


  • sudoRoman
    replied
    Originally posted by Semiadmin View Post
    И зачем вам вычисляемый айтем
    По триггеру потом график не построить, чтобы отладить сработку или выявить закономерности

    Leave a comment:


  • garcia
    replied
    сейчас я сделал, так
    Code:
    log_format zabbix '$status';
    access_log  /var/log/nginx/access_code.log zabbix;
    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
    вычисляемые item'ы
    Code:
    100*last("nginx_codes[500]")/last("nginx_codes_all")
    100*last("nginx_codes[502]")/last("nginx_codes_all")
    я не говорю что все правильно делаю, может кто подскажет как лучше сделать?

    Leave a comment:


  • Semiadmin
    replied
    Получается, 500 ошибки считаются через log.count за интервал обновления, а общее количество записей - по всему логу. Можно, конечно, дельту в препроцессинге взять...А можно тоже через log.count считать (или logrt.count) . И зачем вам вычисляемый айтем, вычисляйте % прямо в триггере. Кстати, самое сложное в вашей задаче - определить правильное значение maxproclines, записей будет много, с дефолтной настройкой может и подвирать.

    Leave a comment:


  • sudoRoman
    replied

    $NGINX_ACCESS_LOG это макрос? попробуйте вначале получить рабочий Item без макроса и без умножения на 100. Так же при делении сделайте пробелы до и после слэша (иначе разные ни о чём не говорящие ошибки может выдавать тоже).
    "...p]") / last("..." вот так знак деления должен быть

    Leave a comment:


  • garcia
    replied
    Originally posted by sudoRoman View Post
    Наверное я про log говорю. Ну и пускай в url будет 500. Код в логе отдельно пишется, по бокам пробелы.
    myhostname.com:log[/var/log/nginx," 500 "]
    Получается, что части с url эта конструкция не зацепит.
    пробую такой вариант
    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.

    Leave a comment:


  • sudoRoman
    replied
    Наверное я про log говорю. Ну и пускай в url будет 500. Код в логе отдельно пишется, по бокам пробелы.
    myhostname.com:log[/var/log/nginx," 500 "]
    Получается, что части с url эта конструкция не зацепит.

    Leave a comment:


  • garcia
    replied
    Originally posted by sudoRoman View Post
    Ну тут решение именно с юзер параметрами у вас, которые каждый раз читают весь лог. А если делать всё только через Item средствами заббикса, то они могут читать не весь лог, а только накопившуюся часть (и можно ограничить, кстати, кол-вом новых строк в логе на тот случай, если лог пойдёт лавинообразно расти).
    Можно и лог ротейтить до того, как он вырастить до таких больших размеров.
    вы про какие сейчас item'ы говорите? про log и log.count ? они не подходят, т.к. в строке, например в url, может попадаться 500 и он ее посчитает как ошибка, а мне нужны именно состояние кодов в логе

    Leave a comment:

Announcement

Collapse
No announcement yet.
Working...
X