Мы переходим к этапу, когда управление инфраструктурой дополняется глубоким пониманием её состояния. После того как мы научились развертывать приложения в кластерах Kubernetes, важно получить инструмент, который позволит видеть, что происходит внутри системы в режиме реального времени. В DevOps-среде это называется сбором метрик — процессом получения количественных показателей работы системы (загрузка процессора, количество запросов в секунду, объем свободной памяти).
Для решения этой задачи мы будем использовать связку из двух инструментов: Prometheus и Grafana. Prometheus выступает в роли хранилища и «сборщика» данных, а Grafana — в роли визуализатора, превращающего сухие цифры в понятные графики.
Как данные попадают из вашей системы на экран монитора, показано на Схеме 1.
Как работает Prometheus
Prometheus — это база данных для временных рядов (Time Series). В отличие от классических баз данных, где хранится текущее состояние объекта, здесь фиксируется история изменений параметра. Каждая запись — это пара «метка времени + значение».
Ключевая особенность Prometheus — Pull-модель. Сервер мониторинга сам регулярно опрашивает приложения по HTTP и забирает (скрейпит) метрики. Чтобы это работало, приложение должно иметь эндпоинт (обычно /metrics) в формате Prometheus. Если приложение не умеет отдавать данные напрямую, используется экспортер — программа-посредник, которая считывает показатели системы и переводит их в нужный формат.
Подготовка окружения
Для запуска используем Docker Compose. Это изолирует инструменты мониторинга и настроит связь между ними во внутренней сети Docker.
Создайте структуру проекта:
mkdir monitoring && cd monitoring
mkdir prometheus
Настроим Prometheus на сбор метрик с самого себя. Создайте файл prometheus/prometheus.yml:
global:
scrape_interval: 15s # Интервал сбора данных
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['prometheus:9090'] # Имя сервиса в сети DockerЗапуск через Docker Compose
Опишем сервисы. Мы используем Volumes (тома), чтобы данные и настройки дашбордов сохранялись после перезапуска контейнеров.
Создайте файл docker-compose.yml в корне папки monitoring:
services:
prometheus:
image: prom/prometheus:v2.45.0
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
ports:
- "9090:9090"
networks:
- monitoring
grafana:
image: grafana/grafana:10.0.0
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
networks:
- monitoring
volumes:
prometheus_data:
grafana_data:
networks:
monitoring:
driver: bridgeЗапустите стек: docker-compose up -d.
Интерфейсы будут доступны по адресам:
- Prometheus:
http://localhost:9090 - Grafana:
http://localhost:3000
Настройка Data Source
Grafana — это оболочка. Чтобы построить графики, нужно подключить источник данных (Data Source).
- Войдите в Grafana (
localhost:3000), логин/пароль:admin/admin. - Перейдите в Connections -> Data Sources.
- Нажмите Add data source и выберите Prometheus.
- В поле URL введите
http://prometheus:9090.
Нажмите Save & Test. Зеленая галочка подтвердит, что связь установлена.
Создание Grafana Dashboard
Grafana Dashboard — это панель с графиками и таблицами. Визуализируем потребление памяти самим Prometheus:
- Нажмите + (Create) -> Dashboard.
- Выберите Add visualization и укажите источник Prometheus.
- В поле Query введите:
process_resident_memory_bytes. - Нажмите Run queries.
На графике появится линия — это метрика в реальном времени 📈.
- В интерфейсе Prometheus (
localhost:9090) проверьте статус сбора данных: Status -> Targets. Эндпоинт должен быть в состоянии "UP". - В Grafana создайте панель с метрикой
prometheus_http_requests_total. В правой панели настроек измените тип визуализации с "Time series" на "Stat".
Мы развернули ядро системы наблюдения. Сейчас мониторинг видит только себя. В следующей теме мы научимся собирать данные с реальных серверов и приложений с помощью экспортеров и создавать профессиональные дашборды для всей инфраструктуры.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram