Считывание метрик с pod в формате Prometheus#

Для каждого экземпляра Pod(s) сервисов «mail-http-adapter», «mail-files», «mail-core» и «mail-crypto-service-adapter» настроен (и включен по умолчанию) расчет метрик в формате Prometheus. Производится расчет следующих метрик:

Названия метрик#

Название метрики

Описание

Тип

request_count

Количество запросов на отправку письма по REST и Kafka (в тегах выбор: адреса ящика; за последнюю ли минуту значение; статуса запроса; модуля)

Gauge (измеритель/датчик)

request_time

Время выполнения (в мс) запроса на отправку письма по REST и Kafka (в тегах выбор: адреса ящика; максимального или среднего времени; статуса запроса; модуля)

Gauge (измеритель/датчик)

message_size

Размер итогового письма/входящего запроса выполнения (в Кб) запроса на отправку письма по REST и Kafka (в тегах выбор: адреса ящика; максимального или среднего размера; статуса запроса; модуля). Не измеряется для mail-files

Gauge (измеритель/датчик)

signature_count

Количество запросов на проверку электронной подписи (ЭП) (в тегах выбор: ключ метрики (адрес ящика); за последнюю ли минуту значение; статуса запроса; модуль)

Gauge (измеритель/датчик)

signature_health

Доступность криптосервиса для проверки ЭП (1 - доступен, 0 - не доступен).

Gauge (измеритель/датчик)

Дополнение:

  • Размер сообщения не измеряется для mail-files поскольку итоговый размер сообщения с вложениями будет посчитан для модуля mail-core

  • Метрика signature_count считаются только если указан ключ metricKey. При стандартных сценариях запросов на отправку письма ключом будет адрес отправителя и ручное указание metricKey не требуется

  • Метрики signature_count и signature_health считаются только на сервисе mail-crypto-service-adapter.

Тэги для фильтрации значений в метриках#

Для каждой метрики настроены теги. Совокупность выбранных (заданных) тегов в запросе к Prometheus приведет к получению необходимого значения. Теги могут быть следующими:

Тэг

В каких метриках используется

Возможное значение

Описание тэга

address

request_count
request_time
message_size

Адрес почтового ящика/»ALL»

Адрес почтового ящика. Значение тега определяет набор значений из метрики для выбранного почтового ящика. Если значение тега=»ALL» то информация будет предоставлена для всех ящиков

lastMinute

request_count
request_time
message_size
signature_count

«TRUE»/»FALSE»

Критерий выборки по времени. Значение тега определяет набор значений из метрики за последнюю минуту (TRUE) или момента старта пода (FALSE) в комбинации с другими заданными тегами

status

request_count
request_time
message_size
signature_count

«ALL»/»SUCCESS»/»ERROR»

Критерий выборки по статусу выполнения запроса. Значение тега определяет набор значений из метрики с успешным завершением отправки письма («SUCCESS»), неудачным («ERROR») и всех сообщений («ALL»)

type

request_count
request_time
message_size

«MAX»/»MEAN»

Критерий выборки по времени выполнения запроса. Значение тега определяет среднее («MEAN») или максимальное («MAX») время выполнения запроса из метрики в комбинации с другими заданными тегами

module

request_count
request_time
message_size
signature_count
signature_health

Значение из config map сервиса (spring.application.name). По умолчанию: mail-http-adapter, mail-core, mail-files

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

metricKey

signature_count

Ключ метрики (например, адрес почтового ящика/»ALL»)

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

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

  1. Необходимо получить количество ошибочных запросов на отправку письма для выбранного ящика за последнюю минуту. Метрика: request_count. Набор тегов: address=»адрес почтового ящика», lastMinute=»TRUE», status=»ERROR»

  2. Необходимо получить количество успешных запросов на отправку письма для выбранного ящика с момента старта пода. Метрика: request_count. Набор тегов: address=»адрес почтового ящика», lastMinute=»FALSE», status=»SUCCESS»

  3. Необходимо получить количество запросов на отправку письма для всех ящиков за последнюю минуту. Метрика: request_count. Набор тегов: address=»ALL», lastMinute=»FALSE», status=»ALL»

  4. Необходимо получить среднее время отправки письма для выбранного ящика за последнюю минуту. Метрика: request_time. Набор тегов: address=»адрес почтового ящика», lastMinute=»TRUE», status=»ALL», type=»MEAN»

  5. Необходимо получить средний размер отправленного письма для выбранного ящика за последнюю минуту для модуля mail-core. Метрика: message_size. Набор тегов: address=»адрес почтового ящика», lastMinute=»TRUE», status=»ALL», type=»MEAN», module=»mail-core»

Кроме указанных выше метрик возвращаются метрики Java Virtual Machine - JVM (Micrometer).

Указанные метрики возвращаются в формате Prometheus и доступны по адресу «/actuator/prometheus» на каждом поде

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

На сервисах «mail-http-adapter», «mail-files» и «mail-core» можно дополнительно сконфигурировать метрики. Для этого нужно определить настройки в файле application-config.yml внутри config map сервиса:

metrics:
  prometheus:
    enabled: true # признак активации сбора метрик
    profiles: "COUNT, TIME, SIZE, COUNT_PER_MINUTE, TIME_PER_MINUTE, SIZE_PER_MINUTE" # профили метрик. По умолчанию и в примере указаны все возможные, можно оставить только нужные
    update:
      cron: '0 0/1 * * * *' # Добавлена возможность перенастраивать частоту опроса метрик в "минуту", т.е. считать метрики например за последние 30 сек вместо минуты

Для сервиса «mail-crypto-service-adapter» оставлена возможность изменения частоты опроса метрик в «минуту», а так же, возможность отключить метрики состояния криптосервиса (signature_health):

signature:
  health.cron: '-' # значение '-' позволяет отключить планировщик проверки состояния криптосервиса. По умолчанию отключен
  # Для опроса раз в минуту использовать ('0 0/1 * * * ?')

Примеры ответа по адресу «/actuator/prometheus» на поде «mail-http-adapter», где собраны все метрики:

Метрика request_count:

# HELP request_count Количество отправленных запросов (в тегах модуль/адрес ящика/выбор за последнюю ли минуту/статус запроса)
# TYPE request_count gauge
request_count{address="ALL",lastMinute="TRUE",module="mail-core",status="ERROR",} 0.0
request_count{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="ERROR",} 0.0
request_count{address="ALL",lastMinute="FALSE",module="mail-core",status="ERROR",} 0.0
request_count{address="ALL",lastMinute="FALSE",module="mail-core",status="ALL",} 5.0
request_count{address="ALL",lastMinute="FALSE",module="mail-core",status="SUCCESS",} 5.0
request_count{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="SUCCESS",} 5.0
request_count{address="ALL",lastMinute="TRUE",module="mail-core",status="SUCCESS",} 0.0
request_count{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="SUCCESS",} 0.0
request_count{address="ALL",lastMinute="TRUE",module="mail-core",status="ALL",} 0.0
request_count{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="ALL",} 5.0
request_count{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="ALL",} 0.0
request_count{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="ERROR",} 0.0

Метрика message_size:

# HELP message_size Размер сообщения в кБ (в тегах выбор модуля/адреса ящика/выбор за последнюю ли минуту/максимального или среднего размера сообщения)
# TYPE message_size gauge
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="MEAN",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="MEAN",} 1.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="MAX",} 1.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="MAX",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="MEAN",} 7.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="SUM",} 70.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="MEAN",} 2.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="SUM",} 14.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="MEAN",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="SUM",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="MEAN",} 0.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="SUM",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="SUM",} 14.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="MEAN",} 1.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="SUM",} 16.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="SUM",} 51.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="MAX",} 0.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="MEAN",} 0.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="MEAN",} 2.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="MEAN",} 1.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="MAX",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="MEAN",} 7.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="SUM",} 14.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="SUM",} 21.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="MEAN",} 0.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="MEAN",} 7.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="SUM",} 0.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="MAX",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="SUM",} 14.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="SUM",} 35.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="MEAN",} 0.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="SUM",} 5.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="MAX",} 7.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="MEAN",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="MAX",} 1.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="MEAN",} 7.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="SUM",} 19.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="MEAN",} 2.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="SUM",} 49.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="MAX",} 1.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="ERROR",type="MAX",} 7.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="SUM",} 14.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="MAX",} 7.0
message_size{address="ALL",lastMinute="FALSE",module="mail-http-adapter",status="ALL",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="SUM",} 0.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-http-adapter",status="SUCCESS",type="MAX",} 7.0
message_size{address="qa-int-test-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="ERROR",type="SUM",} 0.0
message_size{address="ALL",lastMinute="TRUE",module="mail-http-adapter",status="ALL",type="MEAN",} 7.0
message_size{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-http-adapter",status="SUCCESS",type="MAX",} 0.0

Метрика request_time:

# HELP request_time Время выполнения запроса (в тегах выбор модуля/максимального или среднего времени/статуса отправки/адреса ящика)
# TYPE request_time gauge
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="ALL",type="MEAN",} 302.0
request_time{address="ALL",lastMinute="TRUE",module="mail-core",status="SUCCESS",type="MEAN",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="SUCCESS",type="MAX",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="SUCCESS",type="MAX",} 749.0
request_time{address="ALL",lastMinute="TRUE",module="mail-core",status="ALL",type="MAX",} 0.0
request_time{address="ALL",lastMinute="TRUE",module="mail-core",status="ERROR",type="MAX",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="ERROR",type="MEAN",} 0.0
request_time{address="ALL",lastMinute="FALSE",module="mail-core",status="ERROR",type="MAX",} 0.0
request_time{address="ALL",lastMinute="FALSE",module="mail-core",status="SUCCESS",type="MEAN",} 302.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="ERROR",type="MAX",} 0.0
request_time{address="ALL",lastMinute="FALSE",module="mail-core",status="ALL",type="MAX",} 749.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="ALL",type="MAX",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="SUCCESS",type="MEAN",} 0.0
request_time{address="ALL",lastMinute="FALSE",module="mail-core",status="ALL",type="MEAN",} 302.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="ERROR",type="MEAN",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="SUCCESS",type="MEAN",} 302.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="ALL",type="MAX",} 749.0
request_time{address="ALL",lastMinute="TRUE",module="mail-core",status="SUCCESS",type="MAX",} 0.0
request_time{address="ALL",lastMinute="FALSE",module="mail-core",status="ERROR",type="MEAN",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="FALSE",module="mail-core",status="ERROR",type="MAX",} 0.0
request_time{address="qa-sosunov-sender@ae.ru",lastMinute="TRUE",module="mail-core",status="ALL",type="MEAN",} 0.0
request_time{address="ALL",lastMinute="FALSE",module="mail-core",status="SUCCESS",type="MAX",} 749.0
request_time{address="ALL",lastMinute="TRUE",module="mail-core",status="ALL",type="MEAN",} 0.0
request_time{address="ALL",lastMinute="TRUE",module="mail-core",status="ERROR",type="MEAN",} 0.0