Поставка метрик пользовательских приложений
Yandex Unified Agent собирает метрики в формате Prometheus и конвертирует их в формат Yandex Monitoring. При помощи Unified Agent вы сможете собирать метрики любых приложений, которые предоставляют метрики в формате Prometheus.
Для поставки в Yandex Monitoring метрик пользовательских приложений используется вход metrics_pull, который периодически опрашивает приложение по HTTP, ожидая получить метрики в формате Prometheus.
Для примера рассмотрим поставку метрик тестового приложения на Python. Тестовое приложение и Unified Agent могут быть запущены как на разных виртуальных машинах, так и на одной. Если ВМ разные, используемые ими группы безопасности должны разрешать входящий и исходящий трафик на порт 8000
по протоколу TCP
.
Пример поставки метрик пользовательского приложения
Описанная методика может также применяться для поставки метрик любых пользовательских приложений, использующих клиентские библиотеки Prometheus
-
Настройте сервисный аккаунт, от имени которого будут записываться метрики в Yandex Monitoring.
-
Создайте сервисный аккаунт в каталоге, куда будут записываться метрики и назначьте ему роль
monitoring.editor
. -
Привяжите сервисный аккаунт к виртуальной машине, на которой будет установлен Unified Agent.
-
-
Запустите тестовое Python-приложение, предоставляющее метрики в формате Prometheus.
-
Установите Python-библиотеку prometheus_client
, выполнив следующие команды:sudo apt install python3-pip pip3 install prometheus_client
-
Создайте тестовое Python-приложение, записав в файл example.py следующий код:
example.py:
from prometheus_client import start_http_server, Summary import random import time # Создайте метрику для отслеживания количества запросов и времени их выполнения. REQUEST_TIME = Summary('request_processing_seconds', 'Time spent processing request') # Декорируйте функцию обработки запроса метрикой. @REQUEST_TIME.time() def process_request(t): """A dummy function that takes some time.""" time.sleep(t) if __name__ == '__main__': # Запустите HTTP-сервер, чтобы приложение предоставило метрики. start_http_server(8000) # Сгенерируйте случайные запросы. while True: process_request(random.random())
-
Запустите тестовое Python-приложение, выполнив следующую команду:
python3 example.py
Для успешной поставки метрик в Unified Agent тестовое приложение должно оставаться запущенным: не прерывайте его.
-
Убедитесь, что приложение предоставляет метрики, выполнив команду с указанием публичного IP-адреса вашей ВМ с запущенным приложением:
curl http://<публичный_адрес_ВМ>:8000
Результат:
# HELP python_gc_objects_collected_total Objects collected during gc # TYPE python_gc_objects_collected_total counter python_gc_objects_collected_total{generation="0"} 362.0 python_gc_objects_collected_total{generation="1"} 0.0 python_gc_objects_collected_total{generation="2"} 0.0 # HELP python_gc_objects_uncollectable_total Uncollectable object found during GC # TYPE python_gc_objects_uncollectable_total counter
-
-
Установите и настройте Yandex Unified Agent:
-
При необходимости установите Docker:
sudo apt-get install docker.io
-
Создайте в домашнем каталоге файл config.yml.
config.yml:
status: port: "16241" storages: - name: main plugin: fs config: directory: /var/lib/yandex/unified_agent/main max_partition_size: 100mb max_segment_size: 10mb channels: - name: cloud_monitoring channel: pipe: - storage_ref: name: main output: plugin: yc_metrics config: folder_id: "<идентификатор_каталога>" iam: cloud_meta: {} routes: - input: plugin: metrics_pull config: url: http://<публичный_адрес_ВМ>:8000/metrics format: prometheus: {} namespace: app channel: channel_ref: name: cloud_monitoring - input: plugin: agent_metrics config: namespace: ua channel: pipe: - filter: plugin: filter_metrics config: match: "{scope=health}" channel_ref: name: cloud_monitoring import: - /etc/yandex/unified_agent/conf.d/*.yml
Где:
folder_id
— идентификатор каталога, в который будут записываться метрики.url
— публичный адрес ВМ с тестовым приложением, предоставляющим метрики.
-
Установите Unified Agent, выполнив в домашнем каталоге следующую команду:
docker run \ -p 16241:16241 -it --detach --uts=host \ --name=ua \ -v /proc:/ua_proc \ -v `pwd`/config.yml:/etc/yandex/unified_agent/config.yml \ -e PROC_DIRECTORY=/ua_proc \ -e FOLDER_ID=<идентификатор_каталога> \ cr.yandex/yc/unified-agent
Где
FOLDER_ID
— идентификатор каталога, в который будут записываться метрики.Другие способы установки агента описаны в разделе Установка и запуск Yandex Unified Agent.
-
-
Убедитесь, что метрики поступают в Yandex Monitoring:
-
На главной странице
сервиса Yandex Monitoring перейдите в раздел Обзор метрик. -
В строке запроса выберите:
- каталог, в который собираются метрики;
- значение метки
Custom Metrics
; - имя метрики, начинающееся с префикса
app
.
-