Ad Widget

Collapse

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

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • garcia
    Junior Member
    • Jul 2017
    • 18

    #1

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

    всем привет, кто как мониторит коды ответов в логах nginx?
  • sudoRoman
    Member
    • Dec 2018
    • 43

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

    Comment

    • garcia
      Junior Member
      • Jul 2017
      • 18

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

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

      Comment

      • sudoRoman
        Member
        • Dec 2018
        • 43

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

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

        Comment

        • garcia
          Junior Member
          • Jul 2017
          • 18

          #5
          Originally posted by sudoRoman
          Тут недолго самому. Делайте четыре 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

          • sudoRoman
            Member
            • Dec 2018
            • 43

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

            Comment

            • garcia
              Junior Member
              • Jul 2017
              • 18

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

              Comment

              • sudoRoman
                Member
                • Dec 2018
                • 43

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

                Comment

                • garcia
                  Junior Member
                  • Jul 2017
                  • 18

                  #9
                  Originally posted by sudoRoman
                  Наверное я про 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

                  • sudoRoman
                    Member
                    • Dec 2018
                    • 43

                    #10

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

                    Comment

                    • Semiadmin
                      Senior Member
                      • Oct 2014
                      • 1625

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

                      Comment

                      • garcia
                        Junior Member
                        • Jul 2017
                        • 18

                        #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

                        • sudoRoman
                          Member
                          • Dec 2018
                          • 43

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

                          Comment

                          • Semiadmin
                            Senior Member
                            • Oct 2014
                            • 1625

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

                            Comment

                            • garcia
                              Junior Member
                              • Jul 2017
                              • 18

                              #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

                              Working...