Ad Widget

Collapse

Calculated item: сумма из нескольких discovered items

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Potap
    Junior Member
    • Dec 2024
    • 7

    #1

    Calculated item: сумма из нескольких discovered items

    Всем привет!

    Есть правило item prorotype:
    metric_name.{#DEST}.{#COMMAND}.{#RESPONSE}
    Оно порождает множество items
    metric_name.Rostov.GET.200
    metric_name.Rostov.GET.500
    metric_name.Rostov.GET.404

    metric_name.Rostov.PUT.200
    metric_name.Rostov.PUT.500
    metric_name.Rostov.PUT.404

    metric_name.Khabarovsk.GET.200
    metric_name.Khabarovsk.GET.500
    metric_name.Khabarovsk.GET.404

    Количество направлений, команд и кодов ответа может увеличиваться или уменьшаться.

    Как сделать calculated item чтобы считалась сумма команд по конкретному destination используя макросы? Например, для статической картинки когда заранее известно направление и список кодов это будет выглядеть так:
    metric_name.Rostov.GET.sum = last(metric_name.Rostov.GET.200)+last(metric_name. Rostov.GET.500)+last(metric_name.Rostov.GET.404)
    metric_name.Rostov.PUT.sum = last(metric_name.Rostov.PUT.200)+last(metric_name. Rostov.PUT.500)+last(metric_name.Rostov.PUT.404)

    А нужен item prototype вида:
    metric_name.{#DEST}.{#COMMAND}.sum = ?

    Пробовал sum(last_foreach(//metric_name.{#DEST}.{#COMMAND}.[*])) но почему-то не работает, пишет cannot evaluate expression: no input data for function at sum(last_foreach(//metric_name.Rostov.GET.[*]))
    Что я делаю не так?
    Last edited by Potap; 05-02-2025, 10:44.
  • Answer selected by Potap at 06-02-2025, 11:02.
    Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    Переделайте ваши прототипы элементов данных таким образом, чтобы переменная часть ключа выглядела как параметр (т.е. была записана не через точку, а внутри квадратных скобок):
    Code:
    metric_name.Khabarovsk.GET.200 -> metric_name[Khabarovsk,GET,200]
    metric_name.Khabarovsk.GET.500 -> metric_name[Khabarovsk,GET,500]
    metric_name.Khabarovsk.GET.404 -> metric_name[Khabarovsk,GET,404]
    ...и т.д.
    Тогда для обобщающей статистики таких элементов данных можно использовать вычисляемые элементы данных с функциями агрегации (ссылка), заменяя звёздочкой нужные параметры (см. подробнее про синтаксис фильтра функций foreach, в частности - раздел "Использование подстановочных символов​" здесь: ссылка).

    Comment

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

      #2
      Переделайте ваши прототипы элементов данных таким образом, чтобы переменная часть ключа выглядела как параметр (т.е. была записана не через точку, а внутри квадратных скобок):
      Code:
      metric_name.Khabarovsk.GET.200 -> metric_name[Khabarovsk,GET,200]
      metric_name.Khabarovsk.GET.500 -> metric_name[Khabarovsk,GET,500]
      metric_name.Khabarovsk.GET.404 -> metric_name[Khabarovsk,GET,404]
      ...и т.д.
      Тогда для обобщающей статистики таких элементов данных можно использовать вычисляемые элементы данных с функциями агрегации (ссылка), заменяя звёздочкой нужные параметры (см. подробнее про синтаксис фильтра функций foreach, в частности - раздел "Использование подстановочных символов​" здесь: ссылка).

      Comment

      • Potap
        Junior Member
        • Dec 2024
        • 7

        #3
        Спасибо большое, второй раз уже выручаете. Переделал, поэкспериментировал, все получилось как надо, теперь очень гибко можно считать сумму по разным параметрам.

        Comment

        Working...