Справка о источнике данных Prometheus

Материал из Документация Ключ-АСТРОМ

Это общее описание файла YAML расширения на основе источника данных Prometheus и способов объявления метрик и измерений, которые вы хотели бы собирать с помощью вашего расширения.

Область действия данных

Создайте список конечных точек Prometheus, на которые вы хотели бы ссылаться в своем расширении, а также значений метрик и измерений.

В нашем примере мы создаем простое расширение, собирающее метрики Rabbit MQ.

name: com.astromkey.extension.prometheus-rabbitmq

version: 1.0.0

minastromkeyVersion: '1.236'

author:

  name: astromkey

dashboards:

  - path: 'dashboards/dashboard_exporter.json'

alerts:

  - path: 'alerts/alert_socket_usage.json'

# Extension based on official rabbitmq prometheus exporter available metrics

# list of metrics visible here https://github.com/rabbitmq/rabbitmq-server/blob/master/deps/rabbitmq_prometheus/metrics.md

prometheus:

  - group: rabbitmq metrics

    interval:

      minutes: 1

    featureSet: all

    dimensions:

      - key: rabbitmq

        value: const:rabbitmq

    subgroups:

      # global counters

      - subgroup: rabbitmq global counter

        dimensions:

          - key: global_counters

            value: const:global_counters

        metrics:

          - key: com.astromkey.extension.prometheus-rabbitmq.global.global_messages_acknowledged_total

            value: metric:rabbitmq_global_messages_acknowledged_total

            type: count

            featureSet: global

          - key: com.astromkey.extension.prometheus-rabbitmq.global.global_messages_confirmed_total

            value: metric:rabbitmq_global_messages_confirmed_total

            type: count

            featureSet: global

          - key: com.astromkey.extension.prometheus-rabbitmq.global.global_messages_delivered_consume_auto_ack_total

            value: metric:rabbitmq_global_messages_delivered_consume_auto_ack_total

            type: count

            featureSet: global

Определение области мониторинга Prometheus начинается с узла YAML prometheus. Все настройки в узле относятся к объявленному типу источника данных (в данном случае Prometheus).

Размеры

Для каждого уровня (группы, подгруппы) можно определить до 25 измерений (что дает в общей сложности 50 измерений на метрику).

Размерный ключ

Строка ключа измерения должна соответствовать протоколу приема метрик.

Значение размера

Для определения измерений ваших показателей можно использовать следующие методы:

Обычный текст. Префикс const: или просто добавьте нужный текст

dimensions:

- key: extension.owner

  value: const:Joe.Doe@somedomain.com

Или

dimensions:

- key: extension.owner

  value: const:Joe.Doe@somedomain.com

Prometheus label

dimensions:

- key: customdimension.job

   value: label:job

   filter: const:$eq(prometheus)

Все метки, представленные Prometheus, создаются как измерения автоматически. Вам нужно явно определить измерение на основе меток только в том случае, если вы хотите:

  • применить фильтрацию к значениям,
  • определить пользовательский ключ измерения.

Фильтр извлеченных метрических строк

При извлечении строк показателей можно добавить логику фильтрации, которая приведет к отображению только тех строк, для которых значение измерения соответствует критериям фильтрации.

Определите фильтр на основе условия следующим образом:

  • Начинается с – используйте определитель const:$prefix. Пример: filter: const:$prefix(xyz)
  • Заканчивается на – используйте определитель const:$suffix. Пример: filter: const:$suffix(xyz)
  • Содержит – используйте квалификатор const:$contains. Пример: filter: const:$contains(xyz)
  • Равно – используйте квалификатор const:$eq. Пример: filter: const:$eq(xyz) Для выражений, упомянутых выше, вы также можете использовать определители:
    • const:$and– для соединения двух или более выражений с помощью оператора AND. Пример: filter: const:$and(<expr1>,<expr2>)
    • const:$or– для соединения двух или более выражений с помощью оператора OR. Пример: filter: const:$or(<expr1>,<expr2>)
    • const:$not– для отрицания выражения. Пример: filter: const:$not(<expr>)

Вы можете создавать сложные фильтры, объединяя два или более фильтров, разделенных запятыми, с помощью логических выражений:

dimensions:

      - key: technology

        value: other

      - key: job

        value: label:job

        filter: const:$or($eq(),$not($or($eq(prometheus),$eq(rabbitmq-server),$eq(redis_exporter),$eq(node_exporter)))

Метрики

Для каждого уровня (группа, подгруппа) можно определить до 100 метрик. Однако следует отметить, что существует жесткое ограничение в 1000 метрик на расширение, применяемое во время выполнения. Это ограничение ниже, чем объединенные ограничения разрешенных групп и подгрупп.

Например:

prometheus:

  - group: rabbitmq metrics

    interval: 1m

    featureSet: all

    dimensions:

      - key: instance

        value: $reference(metric:rabbitmq_identity_info, ref:rabbitmq_node)

    subgroups:

      # global counters

      - subgroup: rabbitmq global counter

        metrics:

          - key: com.astromkey.extension.prometheus-rabbitmq.global.global_messages_acknowledged_total

            value: metric:rabbitmq_global_messages_acknowledged_total

            type: count

            featureSet: global

          - key: com.astromkey.extension.prometheus-rabbitmq.global.global_messages_confirmed_total

            value: metric:rabbitmq_global_messages_confirmed_total

            type: count

            featureSet: global

Метрический ключ

Строка ключа метрики должна соответствовать протоколу приема метрик.

Для Ключ-АСТРОМ версий 1.215 и 1.217 метрический узел требует параметр id вместо key. Начиная с Ключ-АСТРОМ версии 1.219, мы рекомендуем использовать параметр key, так как id будет устаревшим.

Лучшие практики для метрических ключей

Метрики, которые вы вставляете в Ключ-АСТРОМ с помощью вашего расширения — это лишь некоторые из тысяч метрик, встроенных и пользовательских, обрабатываемых Ключ-АСТРОМ. Чтобы сделать ключи метрик уникальными и легко идентифицируемыми в Ключ-АСТРОМ, лучше всего добавлять к имени метрики префикс имени расширения. Это гарантирует уникальность ключа метрики, и вы можете легко назначить метрику определенному расширению в вашей среде.

Значение метрики

Ключ метрики Prometheus, из которого вы хотите извлечь значение метрики, с префиксом metric:.

Атрибут type

Фреймворк Ключ-АСТРОМ Расширения 2.0 поддерживает все оригинальные форматы полезной нагрузки метрик Prometheus. Чтобы указать тип метрики, используйте атрибут type.

Prometheus exposed type Astromkey ingest
Count count
Gauge gauge
Histogram Примечание: Процентиль временного ряда доступен только клиентам DPS с тарифной картой Metrics powered by Grail. Функция вычисляет запрошенный процентиль значения выражения в каждом сегменте, поэтому он естественным образом используется с гистограммами.
  • Считайте часть как <metric-key>_count
  • Общая сумма часть как <metric-key>_sum.count
  • Отдельные сегменты разделены по размеру le, указывающему идентификатор сегмента как <metric-key>_bucket.count

По умолчанию прием метрик отдельных сегментов отключен.


Образцы кода

Стандартная метрика гистограммы Prometheus включает:

  • HELP и TYPE
  • Данные сегмента и сводные метрики для sum и count
# HELP http_response_time_seconds Time to respond to request

# TYPE http_response_time_seconds histogram

http_response_time_seconds_bucket{code="200",method="GET",path="/banners/post-auth",service="platform",le="0.005"} 1

...

http_response_time_seconds_sum{code="404",method="POST",path="/revoke",service="platform"} 0.016945976

http_response_time_seconds_count{code="404",method="POST",path="/revoke",service="platform"} 1

Вы можете определить метаданные показателей в файле extensions.yaml, как показано ниже:

metrics:

  - key: http_response_time_seconds_count

    metadata:

      displayName: HTTP response time (Histogram count of observed events)

      description: Time to respond to request

  - key: http_response_time_seconds_sum.count

    metadata:

      displayName: HTTP response time (Histogram total sum of all observed values)

      description: Time to respond to request

      unit: Second

  - key: http_response_time_seconds_bucket.count

    metadata:

      displayName: HTTP response time (Histogram buckets split by le)

      description: Time to respond to request

      unit: Second

Чтобы добавить показатели гистограммы в раздел источника данных Prometheus файла extensions.yaml:

  • Используйте базовое имя метрики без каких-либо суффиксов.
  • Укажите тип как histogram
prometheus:

  - group: CipherTrust Metrics

    subgroups:

      - subgroup: HTTP Traffic

        featureSet: HTTP_Traffic

        metrics:

          - key: http_response_time_seconds

            value: metric:http_response_time_seconds

            type: histogram

Summary
  • Считайте часть как <metric-key>_count
  • Общая сумма часть как <metric-key>_sum.count
  • Отдельные квантили, разделенные по размерности квантиля, указывают квантиль как <metric-key>

Метаданные метрики

Расширение может определять метаданные для каждой метрики, доступной в Ключ-АСТРОМ. Например, вы можете добавить отображаемое имя метрики и единицу измерения, которые можно использовать для фильтрации в Визуализации метрик.

name: custom:example-extension-name

version: 1.0.0

minastromkeyVersion: "1.236"

author:

  name: astromkey

metrics:

  - key: your.metric.name

    metadata:

        displayName: Display name of the metric visible in Metrics browser

        unit: Count

Набор функций

Наборы функций — это категории, в которые вы организуете данные, собранные расширением. Вы можете определить наборы функций на уровне группы, подгруппы или метрики. В этом примере мы создаем расширение Prometheus, собирающее метрики приложения и сети. Это отражается в организации метрик в связанных наборах функций prometheus_app_metrics и prometheus_net_metrics.

prometheus:

  - group: prometheus metrics

    interval: 1m

    metrics:

      - key: com.astromkey.extension.prometheus.app

        value: prometheus.app

        featureSet: prometheus_app_metrics

      - key: com.astromkey.extension.prometheus.net

        value: prometheus.net

        featureSet: prometheus_net_metrics

При активации расширения с помощью конфигурации мониторинга вы можете ограничить мониторинг одним из наборов функций. Для корректной работы расширение должно собрать как минимум одну метрику после активации.

В высокосегментированных сетях наборы функций могут отражать сегменты вашей среды. Затем, когда вы создаете конфигурацию мониторинга, вы можете выбрать набор функций и соответствующую группу АктивногоШлюза, которая может подключаться к этому конкретному сегменту.

Все показатели, которые не отнесены ни к одному набору характеристик, считаются показателями по умолчанию и всегда включаются в отчет.

Метрика наследует набор признаков подгруппы, которая в свою очередь наследует набор признаков группы. Кроме того, набор признаков, определенный на уровне метрики, переопределяет набор признаков, определенный на уровне подгруппы, который в свою очередь переопределяет набор признаков, определенный на уровне группы.

Интервал

Интервал, с которым будет производиться измерение данных. Вы можете определить интервалы на уровне группы, подгруппы или индивидуальной метрики. Вы можете определить интервалы с гранулярностью в одну минуту. Максимальный интервал составляет 2880 минут (2 дня, 48 часов).

Установка интервала невозможна для источников данных JMX.

Например:

interval:

     minutes: 5

Вышеуказанный формат поддерживается, начиная с версии схемы 1.217. Для более ранних версий схемы используйте следующий формат (поддерживается до версии схемы 1.251):

interval: 5m
prometheus:

  - group: prometheus metrics

    interval: 1m

    dimensions:

      - key: technology

        value: prometheus

    metrics:

    - key: com.astromkey.extension.prometheus-rabbitmq.global.global_messages_delivered_get_auto_ack_total

      value: metric:rabbitmq_global_messages_delivered_get_auto_ack_total

      type: count

Метрика наследует интервал подгруппы, которая в свою очередь наследует интервал группы. Кроме того, интервал, определенный на уровне метрики, переопределяет интервал, определенный на уровне подгруппы, который в свою очередь переопределяет интервал, определенный на уровне группы.

Конфигурация мониторинга

После определения области действия конфигурации вам необходимо определить конечные точки Prometheus, с которых будут собираться данные.

Конфигурация мониторинга — это полезная нагрузка JSON, определяющая детали соединения, учетные данные и наборы функций, которые вы хотите отслеживать. Подробности см. в разделе Запустить мониторинг.

Пример полезной нагрузки для активации расширения Prometheus:

[

  {

    "scope": "ag_group-default",

    "value": {

      "version": "1.0.0",

      "description": "name",

      "enabled": true,

      "activationContext": "REMOTE",

      "prometheusRemote": {

          "endpoints": [

            {

              "url": "https://myPrometheusServer/metrics",

              "authentication": {

                "scheme": "basic",

                "username": "user",

                "password": "password"

              }

              "autoDiscovery": [

                 {

                    "autoDiscoveryType": "dns_sd_config",

                    "dnsType": "a",

                    "dnsPort": 1111,

                    "refreshInterval": "30"

                 }

               ]

            }

          ]

      },

      "featureSets": [

    "myFeatureSet"

  ]

    }

  }

]

Когда у вас будет готово начальное расширение YAML, упакуйте его, подпишите и загрузите в среду Ключ-АСТРОМ. Подробности см. в разделе Управление жизненным циклом расширения .

Мастер активации расширения на базе Ключ-АСТРОМ содержит динамически обновляемую полезную нагрузку JSON с вашей конфигурацией мониторинга.

Вы также можете использовать API Ключ-АСТРОМ для загрузки схемы для вашего расширения, которая поможет вам создать полезную нагрузку JSON для вашей конфигурации мониторинга.

Используйте конечную точку схемы расширения GET.

Отправьте следующий запрос:

curl -X GET "{env-id}.live.astromkey.com/api/v2/extensions/{extension-name}/{extension-version}/schema" \

   -H "accept: application/json; charset=utf-8" \

   -H "Authorization: Api-Token {api-token}"

Обязательно замените {extension-name} и {extension-version} значениями из вашего файла расширения YAML. Успешный вызов возвращает схему JSON.

Ограничения

Обратите внимание, что каждый хост ЕдиногоАгента или АктивногоШлюза, на котором запущено ваше расширение, нуждается в корневом сертификате для проверки подлинности вашего расширения.

Для удаленного расширения областью действия является группа АктивногоШлюза, которая будет выполнять расширение. Только один АктивныйШлюз из группы будет запускать эту конфигурацию мониторинга. Если вы планируете использовать один АктивныйШлюз, назначьте его выделенной группе. Вы можете назначить АктивныйШлюз группе во время или после установки.

При определении группы АктивногоШлюза используйте следующий формат:

"scope": "ag_group-<ActiveGate-group-name>",

Замените <ActiveGate-group-name> фактическим именем.

Локальное расширение

Для локального расширения областью действия является хост, группа хостов или зона управления, для которых вы будете выполнять расширение. Вы также можете выбрать мониторинг всей среды (опционально, ограниченный тегами).

  • При определении хоста в качестве области действия используйте следующий формат: "scope": "<HOST_ID>",
    Замените <HOST_ID> идентификатором сущности хоста, как в этом примере: "scope": "HOST-A1B2345678C9D001",
  • При определении группы хостов в качестве области действия используйте следующий формат: "scope": "HOST_GROUP-<HOST_GROUP_ID>",
    Замените <HOST_GROUP_ID> идентификатором сущности группы хостов, как в этом примере: "scope": "HOST_GROUP-AB123C4D567E890",
    Идентификатор группы хостов можно найти на странице настроек группы хостов URL. Например: https://{your-environment-id}.live.astromkey.com/#settings/hostgroupconfiguration;id=HOST_GROUP-AB123C4D567E890;hostGroupName=my-host-group
  • При определении зоны управления в качестве области действия используйте следующий формат: "scope": "management_zone-<MANAGEMENT-ZONE>",
    Замените <MANAGEMENT-ZONE> на имя зоны управления, как в этом примере: "scope": "management_zone-sampleManagementZone",
    Зону управления можно найти на странице настроек зон управления.
  • При определении среды в качестве области действия используйте следующий формат: "scope": "environment",
    Вы также можете добавить теги для фильтрации хостов, на которых будет работать эта конфигурация:
    "activationTags": [
      "dt.owner:lama"
    ]

Если вы активируете локальное расширение Prometheus и определяете конечную точку сервера Prometheus, работающего на том же хосте, метрики, собранные с этого сервера, могут поступать из разных конечных точек, а не только из конечной точки на этом хосте, но все метрики будут обогащены контекстом хоста, установленным ЕдинымАгентом.

Версия

Версия этой конфигурации мониторинга. Обратите внимание, что одно расширение может запускать несколько конфигураций мониторинга.

Описание

Понятное для человека описание особенностей данной конфигурации мониторинга.

Включение

Если установлено значение true, конфигурация активируется, и Ключ-АСТРОМ немедленно начинает мониторинг.

Контекст активации

  • Для удаленных расширений activationContext установите значение REMOTE
  • Для локальных расширений activationContext установите значение LOCAL

URL

URL — это конечная точка Prometheus, из которой ваше расширение извлекает метрики. Максимальная длина URL — 500 символов.

  • Для локальных расширений определите конечную точку Prometheus в узле prometheusLocal.
  • Для удаленных расширений определите конечную точку Prometheus в узле prometheusRemote.

Вы можете определить следующие типы конечных точек:

  • /metrics– возвращает метрики в текстовом формате Prometheus.
  • /api/v1/API-путь, по которому может следовать непосредственно конечная точка query или точка доступа metadata.

Если вы собираете одни и те же метрики с разных конечных точек (сервер Prometheus или экспортер данных), некоторые метрики могут быть перезаписаны, поскольку ключи будут идентичны независимо от конечной точки. Чтобы избежать этого, мы автоматически добавляем дополнительное измерение activation_endpoint к каждой метрике.

Аутентификация

Данные аутентификации, передаваемые в API Ключ-АСТРОМ при активации конфигурации мониторинга, запутаны, и их невозможно получить.

none

По умолчанию поддерживается только для конечных точек HTTP.

"authentication": {

  "scheme": "none"

}

bearer

Для аутентификации на bearer требуется только токен.

"authentication": {

  "scheme": "bearer",

  "token": "myToken"

}

basic

Для базовой аутентификации требуются только имя пользователя и пароль.

"authentication": {

  "scheme": "basic",

  "username": "user",

  "password": "password"

}

AWS — требуется ключ доступа AWS, секретный ключ и регион.

Для аутентификации AWS требуются ключ доступа AWS, секретный ключ и регион.

"authentication": {

  "scheme": "aws",

  "accessKey": "accessKey",

  "secretKey": "secretKey",

  "region": "us-east-2"

}

Если вы попытаетесь использовать конечную точку HTTP с bearer, basic или AWS схемой, фреймворк расширения выдаст ошибку, чтобы избежать отправки конфиденциальных данных по небезопасному соединению. Однако, если вы уверены, что можете это сделать, установите свойство skipVerifyHttps на true.

"authentication": {

  "scheme": "basic",

  "username": "user",

  "password": "password",

  "skipVerifyHttps": "true"

}

Хранилище учетных данных

Только удаленный мониторинг

Тип аутентификации хранилища учетных данных обеспечивает более безопасный подход к использованию расширений путем безопасного хранения и управления учетными данными пользователя. Чтобы использовать это, вы должны быть владельцем учетных данных и иметь хранилище учетных данных, которое соответствует следующим критериям:

  • Тип учетных данных — Пользователь и пароль
  • Область действия учетных данных — включены синтетические (в случае использования внешнего хранилища) и области аутентификации расширения.
  • Доступ владельца разрешен только для владельцев учетных данных.
"authentication": {

  "scheme": "basic",

  "useCredentialVault": true,

  "skipVerifyHttps": false,

  "credentialVaultId": "some-credential-vault-id"

}

SSL

Для SSL-связи между Prometheus и экспортерами Prometheus сертификат с хоста Prometheus должен быть добавлен в хранилище доверенных сертификатов операционной системы на машинах АктивногоШлюза, на которых запущено расширение.

Информацию о том, как добавить сертификат в хранилище доверенных сертификатов вашей операционной системы, см. в документации к вашей операционной системе.

Наборы функций

Добавьте список наборов функций, которые вы хотите отслеживать. Чтобы сообщить обо всех наборах функций, добавьте all.

"featureSets": [

  "basic",

  "advanced"

  ]

Расширенные возможности

При желании вы можете определить расширенные параметры, управляющие HTTP-соединением с вашими конечными точками Prometheus:

  • timeoutSecs Целое число от 0 до 50. Количество секунд ожидания ответа от конечной точки Prometheus.
  • retries Количество повторных попыток подключения. Максимальное количество повторных попыток — 3.
  • collectHistogramBuckets Включить или отключить прием сегментов метрик гистограммы Prometheus .

Возможно максимум 3 попытки повторного подключения продолжительностью 50 секунд каждая.

Убедитесь, что общее время ожидания не превышает интервал , установленный вами для ваших показателей.

Автоматическое обнаружение

Только удаленный мониторинг

Autodiscovery — это функция, которая автоматически разрешает конечные точки DNS. Если autodiscovery определен, URL становится именем DNS.

"configuration": [

   {

      "configurationType": "dns_sd_config",

      "dnsType": "a",

      "dnsPort": 1111,

      "refreshInterval": "30m"

    }

]

  • Тип автоматического обнаружения DNS : доступен только указанный тип.
  • Тип DNS : Тип запроса DNS для выполнения A. Доступен только тип, который соответствует адресам IPv4.
  • DNS-порт : указывает порт, назначенный всем IP-адресам, разрешенным DNS.
  • Интервал обновления DNS (с) : устанавливает интервал времени в секундах для часто меняющихся IP-адресов.

Потребление ресурсов

Потребление ресурсов зависит от количества конечных точек Prometheus. Первая конечная точка потребляет 25 МБ ОЗУ и 0,2%–0,5% ЦП. Каждая последующая конечная точка потребляет 0,5 МБ ОЗУ и ~0,2% ЦП.

Endpoints Average CPU Max CPU RAM (MB) Host (EC2 instance type)
100 1.0% 2.5% (spike at beginning) 60 XS (c5.large)
1 0.2% 0.5% (spike at beginning) 25 XS (c5.large)