Установка Prometheus и Grafana

Мы переходим к этапу, когда управление инфраструктурой дополняется глубоким пониманием её состояния. После того как мы научились развертывать приложения в кластерах 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).

  1. Войдите в Grafana (localhost:3000), логин/пароль: admin / admin.
  2. Перейдите в Connections -> Data Sources.
  3. Нажмите Add data source и выберите Prometheus.
  4. В поле URL введите http://prometheus:9090.

Нажмите Save & Test. Зеленая галочка подтвердит, что связь установлена.

Создание Grafana Dashboard

Grafana Dashboard — это панель с графиками и таблицами. Визуализируем потребление памяти самим Prometheus:

  1. Нажмите + (Create) -> Dashboard.
  2. Выберите Add visualization и укажите источник Prometheus.
  3. В поле Query введите: process_resident_memory_bytes.
  4. Нажмите Run queries.

На графике появится линия — это метрика в реальном времени 📈.

  1. В интерфейсе Prometheus (localhost:9090) проверьте статус сбора данных: Status -> Targets. Эндпоинт должен быть в состоянии "UP".
  2. В Grafana создайте панель с метрикой prometheus_http_requests_total. В правой панели настроек измените тип визуализации с "Time series" на "Stat".

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

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram