Считывание метрик с 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 |
Адрес почтового ящика/»ALL» |
Адрес почтового ящика. Значение тега определяет набор значений из метрики для выбранного почтового ящика. Если значение тега=»ALL» то информация будет предоставлена для всех ящиков |
lastMinute |
request_count |
«TRUE»/»FALSE» |
Критерий выборки по времени. Значение тега определяет набор значений из метрики за последнюю минуту (TRUE) или момента старта пода (FALSE) в комбинации с другими заданными тегами |
status |
request_count |
«ALL»/»SUCCESS»/»ERROR» |
Критерий выборки по статусу выполнения запроса. Значение тега определяет набор значений из метрики с успешным завершением отправки письма («SUCCESS»), неудачным («ERROR») и всех сообщений («ALL») |
type |
request_count |
«MAX»/»MEAN» |
Критерий выборки по времени выполнения запроса. Значение тега определяет среднее («MEAN») или максимальное («MAX») время выполнения запроса из метрики в комбинации с другими заданными тегами |
module |
request_count |
Значение из config map сервиса (spring.application.name). По умолчанию: mail-http-adapter, mail-core, mail-files |
Критерий выборки по названию модуля. Значение тега определяет модуль, для которого посчитага метрика в комбинации с другими заданными тегами |
metricKey |
signature_count |
Ключ метрики (например, адрес почтового ящика/»ALL») |
Критерий выборки метрики по ключу, например, адрес почтового ящика |
Каждый из тегов, созданных для метрики, не должен быть пустым при составлении запроса. Примеры:
Необходимо получить количество ошибочных запросов на отправку письма для выбранного ящика за последнюю минуту. Метрика: request_count. Набор тегов: address=»адрес почтового ящика», lastMinute=»TRUE», status=»ERROR»
Необходимо получить количество успешных запросов на отправку письма для выбранного ящика с момента старта пода. Метрика: request_count. Набор тегов: address=»адрес почтового ящика», lastMinute=»FALSE», status=»SUCCESS»
Необходимо получить количество запросов на отправку письма для всех ящиков за последнюю минуту. Метрика: request_count. Набор тегов: address=»ALL», lastMinute=»FALSE», status=»ALL»
Необходимо получить среднее время отправки письма для выбранного ящика за последнюю минуту. Метрика: request_time. Набор тегов: address=»адрес почтового ящика», lastMinute=»TRUE», status=»ALL», type=»MEAN»
Необходимо получить средний размер отправленного письма для выбранного ящика за последнюю минуту для модуля 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:
healthCheckCron: '-' # значение '-' позволяет отключить планировщик проверки состояния криптосервиса. По умолчанию раз в минуту ('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