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

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

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

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

    #2
    Именно в логах или кодов непосредственно на странице?
    Можно средствами заббикса создать нужные Item, который будет мониторить в логе нужный код (в нужном кол-ве), можно свой юзер параметр запилить в конфиге заббикса и грепать нужный кусов кода в логе.

    Comment


      #3
      Originally posted by sudoRoman View Post
      Именно в логах или кодов непосредственно на странице?
      Можно средствами заббикса создать нужные Item, который будет мониторить в логе нужный код (в нужном кол-ве), можно свой юзер параметр запилить в конфиге заббикса и грепать нужный кусов кода в логе.
      в логах, есть условие - если 502/503 - больше 1% от всех запросов за последние n минут.

      может быть есть уже готовое решение?

      Comment


        #4
        Тут недолго самому. Делайте четыре Item.
        1. Считает все запросы
        2. Считает 502
        3. Считает 503
        4. Калькулируемый Item: высчитывает нужное отношение всех запросов относительно 502 и 503.
        Далее триггер на Item 4.

        Либо скрипт написать и передавать одно значение через юзер параметр.

        Comment


          #5
          Originally posted by sudoRoman View Post
          Тут недолго самому. Делайте четыре Item.
          1. Считает все запросы
          2. Считает 502
          3. Считает 503
          4. Калькулируемый Item: высчитывает нужное отношение всех запросов относительно 502 и 503.
          Далее триггер на Item 4.

          Либо скрипт написать и передавать одно значение через юзер параметр.
          я так пока и сделал
          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
          item nginx_codes[500] nginx_codes[502] nginx_codes[503] и потом уже вычисляемые 100*last("nginx_codes[500]")/last("nginx_codes_all")
          но каждый раз дергать лог который бывает под 500 мб как-то не оч хорошо, хотелось бы какого-то более гибкого или готового решения

          Comment


            #6
            Ну тут решение именно с юзер параметрами у вас, которые каждый раз читают весь лог. А если делать всё только через Item средствами заббикса, то они могут читать не весь лог, а только накопившуюся часть (и можно ограничить, кстати, кол-вом новых строк в логе на тот случай, если лог пойдёт лавинообразно расти).
            Можно и лог ротейтить до того, как он вырастить до таких больших размеров.

            Comment


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

              Comment


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

                Comment


                  #9
                  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.

                  Comment


                    #10

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

                    Comment


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

                      Comment


                        #12
                        сейчас я сделал, так
                        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")
                        я не говорю что все правильно делаю, может кто подскажет как лучше сделать?

                        Comment


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

                          Comment


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

                            Comment


                              #15
                              немного поменялись условия, нужен график, который будет показывать кол-во 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
                              но как такое сделать через вычисляемый айтем, что-то не могу понять

                              Comment

                              Announcement

                              Collapse
                              No announcement yet.
                              Working...
                              X