zabbix_export:
  version: '6.0'
  date: '2026-08-29T00:00:00Z'
  groups:
    - uuid: 7df96b18c230490a9a0a9e2307226338
      name: Templates/Applications
  templates:
    - uuid: 3a1f9d2b4c5e4f7a8b9c0d1e2f3a4b5c
      template: 'Hubris by HTTP'
      name: 'Hubris by HTTP'
      description: |
        Расход, запросы и баланс Hubris через эндпоинт /v1/metrics.

        Что сделать после импорта:
          1. Привязать шаблон к узлу сети.
          2. Задать макрос {$HUBRIS.TOKEN} — API-ключ Hubris (лучше «только для чтения»).
          3. При желании поправить пороги {$HUBRIS.BALANCE.MIN} и {$HUBRIS.ERRORS.MAX}.

        Документация: https://hubris.pw/docs/features/monitoring
      groups:
        - name: Templates/Applications
      items:
        - uuid: 9c8b7a6d5e4f3a2b1c0d9e8f7a6b5c4d
          name: 'Hubris: получить метрики'
          type: HTTP_AGENT
          key: hubris.metrics.raw
          delay: 1m
          history: '0'
          trends: '0'
          value_type: TEXT
          description: 'Мастер-элемент: один запрос в минуту, остальные значения извлекаются из него.'
          timeout: 30s
          url: '{$HUBRIS.URL}/v1/metrics'
          headers:
            - name: Authorization
              value: 'Bearer {$HUBRIS.TOKEN}'
          tags:
            - tag: component
              value: raw

        - uuid: 1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d
          name: 'Hubris: баланс'
          type: DEPENDENT
          key: hubris.balance
          delay: '0'
          history: 90d
          value_type: FLOAT
          units: '₽'
          description: 'Остаток на балансе. Метрика приходит в копейках, множитель переводит в рубли.'
          preprocessing:
            - type: PROMETHEUS_PATTERN
              parameters:
                - 'hubris_balance_kopecks'
                - value
                - ''
            - type: MULTIPLIER
              parameters:
                - '0.01'
          master_item:
            key: hubris.metrics.raw
          tags:
            - tag: component
              value: balance

        - uuid: 2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e
          name: 'Hubris: расход всего'
          type: DEPENDENT
          key: hubris.spend.total
          delay: '0'
          history: 90d
          value_type: FLOAT
          units: '₽'
          description: 'Списано за всё время. Скорость расхода Zabbix считает функцией change() или rate().'
          preprocessing:
            - type: PROMETHEUS_PATTERN
              parameters:
                - 'sum(hubris_spend_kopecks_total)'
                - value
                - ''
            - type: MULTIPLIER
              parameters:
                - '0.01'
          master_item:
            key: hubris.metrics.raw
          tags:
            - tag: component
              value: spend

        - uuid: 3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
          name: 'Hubris: запросов всего'
          type: DEPENDENT
          key: hubris.requests.total
          delay: '0'
          history: 90d
          value_type: FLOAT
          preprocessing:
            - type: PROMETHEUS_PATTERN
              parameters:
                - 'sum(hubris_requests_total)'
                - value
                - ''
          master_item:
            key: hubris.metrics.raw
          tags:
            - tag: component
              value: requests

        - uuid: 4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a
          name: 'Hubris: запросов с ошибкой'
          type: DEPENDENT
          key: hubris.requests.errors
          delay: '0'
          history: 90d
          value_type: FLOAT
          description: 'Сумма запросов с исходом client_error и upstream_error.'
          preprocessing:
            - type: PROMETHEUS_PATTERN
              parameters:
                - 'sum(hubris_requests_total{outcome!="success"})'
                - value
                - ''
          master_item:
            key: hubris.metrics.raw
          tags:
            - tag: component
              value: requests

        - uuid: 5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b
          name: 'Hubris: доля ошибок'
          type: CALCULATED
          key: hubris.errors.rate
          delay: 1m
          history: 90d
          value_type: FLOAT
          units: '%'
          params: '100 * change(/Hubris by HTTP/hubris.requests.errors) / (change(/Hubris by HTTP/hubris.requests.total) + 0.0001)'
          description: 'Доля ошибок среди запросов, появившихся с прошлой проверки.'
          tags:
            - tag: component
              value: requests

        - uuid: 6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c
          name: 'Hubris: время ответа, 95-й перцентиль'
          type: DEPENDENT
          key: hubris.latency.p95
          delay: '0'
          history: 90d
          value_type: FLOAT
          units: s
          preprocessing:
            - type: PROMETHEUS_PATTERN
              parameters:
                - 'hubris_request_latency_seconds{quantile="0.95"}'
                - value
                - ''
          master_item:
            key: hubris.metrics.raw
          tags:
            - tag: component
              value: latency

      discovery_rules:
        - uuid: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d
          name: 'Ключи с лимитом'
          type: DEPENDENT
          key: hubris.keys.discovery
          delay: '0'
          description: 'Находит ключи, у которых задан лимит расхода, и заводит по элементу на каждый.'
          preprocessing:
            - type: PROMETHEUS_TO_JSON
              parameters:
                - 'hubris_key_limit_kopecks'
          master_item:
            key: hubris.metrics.raw
          lld_macro_paths:
            - lld_macro: '{#KEY}'
              path: '$.labels[''key'']'
            - lld_macro: '{#PERIOD}'
              path: '$.labels[''period'']'
          item_prototypes:
            - uuid: 8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e
              name: 'Ключ {#KEY}: лимит'
              type: DEPENDENT
              key: 'hubris.key.limit[{#KEY}]'
              delay: '0'
              history: 90d
              value_type: FLOAT
              units: '₽'
              preprocessing:
                - type: PROMETHEUS_PATTERN
                  parameters:
                    - 'hubris_key_limit_kopecks{key="{#KEY}"}'
                    - value
                    - ''
                - type: MULTIPLIER
                  parameters:
                    - '0.01'
              master_item:
                key: hubris.metrics.raw
              tags:
                - tag: component
                  value: key-limit

            - uuid: 9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f
              name: 'Ключ {#KEY}: истрачено за {#PERIOD}'
              type: DEPENDENT
              key: 'hubris.key.spent[{#KEY}]'
              delay: '0'
              history: 90d
              value_type: FLOAT
              units: '₽'
              preprocessing:
                - type: PROMETHEUS_PATTERN
                  parameters:
                    - 'hubris_key_spent_kopecks{key="{#KEY}"}'
                    - value
                    - ''
                - type: MULTIPLIER
                  parameters:
                    - '0.01'
              master_item:
                key: hubris.metrics.raw
              tags:
                - tag: component
                  value: key-limit

          trigger_prototypes:
            - uuid: 0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a
              expression: 'last(/Hubris by HTTP/hubris.key.spent[{#KEY}]) > 0.9 * last(/Hubris by HTTP/hubris.key.limit[{#KEY}])'
              name: 'Hubris: ключ {#KEY} израсходовал более 90% лимита'
              priority: WARNING
              description: 'Ключ вот-вот упрётся в лимит — запросы начнут получать 429.'

      triggers:
        - uuid: 1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b
          expression: 'last(/Hubris by HTTP/hubris.balance) < {$HUBRIS.BALANCE.MIN}'
          name: 'Hubris: баланс ниже {$HUBRIS.BALANCE.MIN} ₽'
          priority: HIGH
          description: 'Когда баланс кончится, запросы начнут отклоняться с ошибкой оплаты.'

        - uuid: 2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c
          expression: 'nodata(/Hubris by HTTP/hubris.metrics.raw,5m)=1'
          name: 'Hubris: метрики не приходят 5 минут'
          priority: HIGH
          description: 'Узел не получает ответ от Hubris: проверьте сеть, ключ и его привязку к адресу.'

        - uuid: 3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d
          expression: 'min(/Hubris by HTTP/hubris.errors.rate,15m) > {$HUBRIS.ERRORS.MAX}'
          name: 'Hubris: доля ошибок выше {$HUBRIS.ERRORS.MAX}% за 15 минут'
          priority: WARNING
          description: 'Растёт доля неуспешных запросов — смотрите логи ключа в кабинете.'

        - uuid: 4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e
          expression: 'last(/Hubris by HTTP/hubris.latency.p95) > {$HUBRIS.LATENCY.MAX}'
          name: 'Hubris: 95% запросов медленнее {$HUBRIS.LATENCY.MAX} с'
          priority: INFO
          description: 'Модель отвечает дольше обычного. Часто это свойство самой модели, а не сбой.'

      macros:
        - macro: '{$HUBRIS.URL}'
          value: 'https://api.hubris.pw'
          description: 'Адрес API Hubris.'
        - macro: '{$HUBRIS.TOKEN}'
          value: 'sk-gw-...'
          type: SECRET_TEXT
          description: 'API-ключ Hubris. Заведите ключ «только для чтения» — он не может тратить баланс.'
        - macro: '{$HUBRIS.BALANCE.MIN}'
          value: '500'
          description: 'Порог оповещения о балансе, рубли.'
        - macro: '{$HUBRIS.ERRORS.MAX}'
          value: '5'
          description: 'Допустимая доля ошибок, проценты.'
        - macro: '{$HUBRIS.LATENCY.MAX}'
          value: '30'
          description: 'Порог 95-го перцентиля времени ответа, секунды.'
