Ad Widget

Collapse

time parameter в lld

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • maclin
    Member
    • Mar 2011
    • 76

    #1

    time parameter в lld

    Всем привет! Есть такой триггер

    Code:
    {T_nginx_stats.frontend.discovery.new:nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}].min(180)}>15)
    Я хотел сделать его более гибким, чтобы каждый локейшн имел свои граничные параметры по процентам и времени отработки события.

    Сделал новые lld айтемы:

    Code:
    nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}]
    - должен заменить значение 15
    и
    Code:
    nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}]
    - должен заменить значение 180

    И конечный триггер должен был выглядеть так

    Code:
    {T_nginx_stats.frontend.discovery.new:nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}].min({T_nginx_stats.frontend.discovery.new:nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}].last()})}>{T_nginx_stats.frontend.discovery.new:nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}].last()}​
    Но при сохранении пишет такую ошибку на zabbix 2.3.2

    "
    Incorrect trigger expression. Check expression part starting from "})}>{T_nginx_stats.frontend.discovery.new:ngi nx_s tats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}].last()}".
    "

    или на zabbix 6.0 trigger выглядел так бы:

    Code:
    min(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}],last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}]))> last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}])
    Но дает ошибку:
    " Invalid parameter "/1/expression": incorrect expression starting from "min(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}],last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}]))> last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}])"


    Как подсунуть lld параметр времени в триггер?
    Last edited by maclin; 06-12-2022, 08:24.
  • Answer selected by maclin at 08-12-2022, 16:43.
    Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    Originally posted by maclin
    Типа такой конструкции что-ли получается
    Да, именно так:
    Code:
    {"data":[
      {"{#LOCATION}":"test-1", {#DURATION​}":"180", {#MIN_PROC​}":"15"},
      {"{#LOCATION}":"test-2", {#DURATION​}":"540", {#MIN_PROC​}":"30"}​​​
    ]}

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #2
      Originally posted by maclin
      Но при сохранении пишет такую ошибку на zabbix 2.3.2
      Это опечатка или такой тонкий троллинг? Вы реально используете версию 2.x в 2022-м году и ожидаете, что кто-то поможет? (предполагаю, что всё же опечатка: были версии 2.2 и 2.4, версии 2.3 я не помню)

      По сути: вы пытаетесь в качестве параметра триггерной функции всунуть ссылку на значение, возвращаемой другой триггерной функцией. Это так не работает (кроме вычисляемых элементов данных; кажется, там это допустимо).
      То, что нужно вам для этой задачи, - это в качестве пороговых значений использовать макросы с контекстом (ссылка).

      Comment

      • maclin
        Member
        • Mar 2011
        • 76

        #3
        2.4.2, верно. Всякое бывает, может кто еще такое использует.

        На 6-й версии удалось завести таки, триггер выглядит так:

        Code:
        min(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}],last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}]))>last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}])
         ​

        "вы пытаетесь в качестве параметра триггерной функции всунуть ссылку на значение, возвращаемой другой триггерной функцией" - не совсем, получается так:
        вы пытаетесь в качестве параметра триггерной функции всунуть ссылку на значение, возвращаемой lld параметром.

        На 2.4.2 к сожалению не удалось провернуть
        Last edited by maclin; 06-12-2022, 12:13.

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #4
          Originally posted by maclin
          На 2.4.2 к сожалению не удалось провернуть
          Логично - поддержка макросов с контекстами появилась в версии 3.0 (ссылка).
          Последний релиз версии 2.4.х - это 2.4.8 (вышла в апреле 2016 года). Причём, линейка 2.4.х - не LTS, т.е. надо было быть готовым обновляться достаточно оперативно. С тех пор только LTS-версий выходило несколько: 3.0, 4.0, 5.0 и 6.0; причём даже на версию 4.0 поддержка закончилась неделю назад (ссылка), не говоря уже о более старых.
          А на макросы с контекстами, всё же, посмотрите - полезная вещь.

          Comment

          • maclin
            Member
            • Mar 2011
            • 76

            #5
            Не, обманулся я, не сработала моя формула

            Code:
            min(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}],last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}]))>last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}])
            Вот если прям числом задать, то сработает

            Code:
            min(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}],180)>last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}])

            Хотя в примерах https://www.zabbix.com/documentation...ers/expression есть подобная же конструкция

            Code:
            min(min(/host/key,1h),min(/host2/key2,1h)*10)​

            Если сделать такую конструкцию (добавит именно last в значение, тогда триггер сработает, но логика не будет работатт, он будет брать не минимальное значение за 180 сек, а именно last значение.

            Code:
            min(last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}]),last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-timeout-alarm-[{#LOCATION}]))>last(/T_nginx_stats.frontend.discovery.new/nginx_stats.frontend.response-code-4xx-percentage-alarm-[{#LOCATION}])
            Мне важно именно через lld передать нужные параметры, разве макросы помогут тут мне? Я ведь пытаюсь как раз это же и провернуть, но через lld items
            Last edited by maclin; 06-12-2022, 12:37.

            Comment

            • Kos
              Senior Member
              Zabbix Certified SpecialistZabbix Certified Professional
              • Aug 2015
              • 3404

              #6
              Originally posted by maclin
              Хотя в примерах https://www.zabbix.com/documentation...ers/expression есть подобная же конструкция
              Code:
              min(min(/host/key,1h),min(/host2/key2,1h)*10)​
              Как-то вы своеобразно примеры читаете. А до следующего проедложения что ж не добрались?
              Note that other expressions may not be used, if the function references item history. For example, the following syntax is not allowed:
              Code:
              min(/host/key,#5*10)
              Ладно, как хотите...

              Comment

              • maclin
                Member
                • Mar 2011
                • 76

                #7
                Ну вроде как формула min(/host/key,#5*10) не совсем соотносится с моей. Либо я не понимаю фразу "Note that other expressions may not be used, if the function references item history", разве min(/host2/key2,1h) - не "references item history"?


                Мне тогда не понятна формула
                min(min(/host/key,1h),min(/host2/key2,1h)*10)​

                Допустим у
                min(/host/key,1h) = 10
                а
                min(/host2/key2,1h)*10 = 300

                в итоге что дает min (10,300), какой смысл тогда в 300, если у нас тут 10 = постоянное
                Last edited by maclin; 07-12-2022, 09:24.

                Comment

                • Kos
                  Senior Member
                  Zabbix Certified SpecialistZabbix Certified Professional
                  • Aug 2015
                  • 3404

                  #8
                  Originally posted by maclin
                  Ну вроде как формула min(/host/key,#5*10) не совсем соотносится с моей. Либо я не понимаю фразу "Note that other expressions may not be used, if the function references item history", разве min(/host2/key2,1h) - не "references item history"?
                  Эта формула вполне соотносится с вашей, т.к. в ней "other expression" (т.е. не константа или заменяющий её макрос, а именно выражение - арифметическое либо вызов другой функции) используется в качестве параметра функции. И так делать нельзя в случае "if the function references item history".

                  В примере
                  Code:
                  min(/host2/key2,1h)
                  функция min() как раз обращается к истории элемента данных: выбирает минимальное значение за последний час. И поэтому тут в параметрах этой функции выражения недопустимы: написать min(/host2/key2,1h) можно, а min(/host2/key2,#5*10) или min(/host2/key2,last(/host/other_key)) - нельзя.

                  В примере же
                  Code:
                  min(min(/host/key,1h),min(/host2/key2,1h)*10)​
                  функция min() используется трижды, что может слегка запутывать. Два раза идёт обращение к истории: min(/host/key,1h) и min(/host2/key2,1h), причём разных элементов данных и на разных хостах (хотя это и не принципиально). Но тут в параметрах используются только константы (выражений нет), так что всё в порядке. А третий раз - вычисляется меньшее из двух параметров, каждый из которых задан выражением, но нет обращений к истории, так что тоже всё ОК.

                  Comment

                  • maclin
                    Member
                    • Mar 2011
                    • 76

                    #9
                    Тогда печаль, получается нет решения для моей задачи, через lld передать параметр за какой период времени смотреть историю итема.

                    Comment

                    • Kos
                      Senior Member
                      Zabbix Certified SpecialistZabbix Certified Professional
                      • Aug 2015
                      • 3404

                      #10
                      Originally posted by maclin
                      Тогда печаль, получается нет решения для моей задачи, через lld передать параметр за какой период времени смотреть историю итема.
                      Что значит "через LLD"? LLD работает на основе JSON-а, содержащего LLD-макросы - на их базе создаются из прототипов нужные элементы данных и триггеры.
                      Если в вашем JSON-е есть нужная информация - используйте в прототипе триггеров соответствующие LLD-макросы, в чём проблема?

                      Ну или опишите подробнее вашу задачу - что вы имеете, что из этого хотите получить.

                      Comment

                      • maclin
                        Member
                        • Mar 2011
                        • 76

                        #11
                        Ну вот смотрите, есть несколько locations в nginx, я их передаю через lld [HASHTAG="t3566"]location[/HASHTAG]
                        Хочу для каждого отдельного Location передать свои параметры, типа чтобы
                        -для location=test сделать так, чтобы триггер срабатывал, когда на этом локейшене процент 4хх держится на уровне 15% минимум 3 минуты
                        -для location=test2 сделать так, чтобы триггер срабатывал, когда на этом локейшене процент 4хх держится на уровне 30% минимум 9 минут

                        И таких локейшенов будет много, свои параметры по порогу ошибок и порогу времени срабатывания

                        Comment

                        • Kos
                          Senior Member
                          Zabbix Certified SpecialistZabbix Certified Professional
                          • Aug 2015
                          • 3404

                          #12
                          Ну, судя по цитате из первого сообщения, имеется в виду LLD-макрос {#LOCATION}, который содерждит имя location-а.
                          Не знаю, откуда вы берёте содержащий его JSON (вы об этом ничего так и не написали), но допустим.
                          Для разных локейшенов вы хотите иметь разные пороговые значения и разные параметры для триггерной функции min(). Желание понятное.

                          Далее я вижу два варианта.

                          Первый: если вы JSON для работы LLD формируете сами, то просто добавляете в него ещё пару LLD-макросов - например, {#DURATION} и {#MIN_PROC}.
                          И спокойно используете эти макросы в прототипе триггера - для каждого локейшена они раскроются в своё значение:
                          Code:
                          {T_nginx_stats.frontend.discovery.new:nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}].min({#DURATION})}>{#MIN_PROC})
                          Второй: если этот вариант невозможен (JSON формируете не сами, а берёте откуда-то уже готовый), то используете пользовательские макросы с контекстом.
                          Т.е. в прототипе триггера указываете что-то вроде:
                          Code:
                          {T_nginx_stats.frontend.discovery.new:nginx_stats.frontend.response-code-4xx-percentage-[{#LOCATION}].min({$DURATION:"{#LOCATION}"})}>{$MIN_PROC:"{#LOCATION}"})
                          ​А на уровне хоста определяете соответствующие макросы:
                          {$DURATION:"test"} 180
                          {$MIN_PROC:"test"} 15
                          {$DURATION:"test2"} 540
                          {$MIN_PROC:"test2"} 30

                          Comment

                          • maclin
                            Member
                            • Mar 2011
                            • 76

                            #13
                            Спасибо за развернутый ответ.
                            "Не знаю, откуда вы берёте содержащий его JSON (вы об этом ничего так и не написали), но допустим." - да, формирую сам через
                            Code:
                            -o '{"data":[{"{#LOCATION}":"other"},{"{#LOCATION}":"total"},{" {#LOCATION}":"test-1"},{"{#LOCATION}":"test-2"},{"{#LOCATION}":"total"}]}'
                            Второй вариант не хотелось бы, так как придется лезть на настройки хоста, а хотел этого избежать, чтобы все было на стороне сервера, который мониторим.
                            Первый вариант ведь приведет к тому, что будет много разных {#DURATION} и {#MIN_PROC} вперемешку.
                            Я может что-то упускаю, но как мне тогда указать, что вот для Location test {#MIN_PROC}​15% {#DURATION}​3 минуты, а для другого location другие значения.

                            Типа такой конструкции что-ли получается {" {#LOCATION}":"test-1", {#DURATION​}":"180", {#MIN_PROC​}":"15"}, {" {#LOCATION}":"test-2", {#DURATION​}":"540", {#MIN_PROC​}":"30"}​​​
                            Last edited by maclin; 07-12-2022, 17:25.

                            Comment

                            • Kos
                              Senior Member
                              Zabbix Certified SpecialistZabbix Certified Professional
                              • Aug 2015
                              • 3404

                              #14
                              Originally posted by maclin
                              Типа такой конструкции что-ли получается
                              Да, именно так:
                              Code:
                              {"data":[
                                {"{#LOCATION}":"test-1", {#DURATION​}":"180", {#MIN_PROC​}":"15"},
                                {"{#LOCATION}":"test-2", {#DURATION​}":"540", {#MIN_PROC​}":"30"}​​​
                              ]}

                              Comment

                              • maclin
                                Member
                                • Mar 2011
                                • 76

                                #15
                                Ну штош, получается я пытался поменять свечи через выхлопную трубу.
                                Спасибо за помощь.

                                Comment

                                Working...