Prometheus: полное руководство по установке и настройке системы
Пройдите тест, узнайте какой профессии подходите
Для кого эта статья:
- Специалисты IT, занимающиеся мониторингом и управлением инфраструктурой
- Инженеры DevOps и системные администраторы
Программисты, желающие освоить навыки работы с Prometheus и алертингом
Мир IT-инфраструктур нуждается в надёжном мониторинге как никогда! Системные сбои, перегрузки серверов и внезапные отказы приложений могут стоить компаниям миллионы. Prometheus выступает мощным щитом, предотвращающим эти катастрофы, превращая сложный процесс мониторинга в точную науку. В этом руководстве я раскрою все секреты установки и настройки Prometheus — от базовых требований до продвинутых интеграций, позволяющих держать вашу инфраструктуру под полным контролем 24/7. 🛡️
Погружаясь в мир Prometheus и систем мониторинга, многие специалисты сталкиваются с необходимостью расширить свои навыки программирования для автоматизации процессов и создания собственных экспортеров. Курс «Python-разработчик» с нуля от Skypro — идеальный выбор для инженеров DevOps и системных администраторов. Вы освоите язык, который идеально подходит для создания инструментов мониторинга и анализа метрик Prometheus, выводя ваши профессиональные навыки на новый уровень.
Что такое Prometheus и почему он важен для мониторинга
Prometheus — это открытая система мониторинга и алертинга, изначально разработанная в SoundCloud. В 2016 году проект присоединился к Cloud Native Computing Foundation, став вторым размещенным проектом после Kubernetes. Сегодня Prometheus признан стандартом де-факто для мониторинга в экосистеме облачных решений.
В отличие от традиционных систем мониторинга, Prometheus работает по принципу "pull", а не "push" — он сам опрашивает ваши сервисы через HTTP, собирая метрики в виде временных рядов. Это коренное отличие обеспечивает надежность даже при частичных отказах системы. 📊
Ключевые преимущества Prometheus:
- Многомерная модель данных — метрики хранятся как временные ряды с уникальными идентификаторами и парами ключ-значение
- Мощный язык запросов PromQL — позволяет выполнять сложные операции над данными временных рядов
- Автономная работа — не требует распределенных хранилищ или внешних зависимостей
- Эффективное хранение — сжатие данных снижает требования к дисковому пространству
- Простая интеграция — богатая экосистема экспортеров для сбора метрик с различных систем
Prometheus стал критически важным компонентом в стеке мониторинга современных инфраструктур по нескольким причинам:
Причина | Почему это важно |
---|---|
Ориентирован на надежность | Работает даже в условиях сбоев других частей инфраструктуры |
Высокая производительность | Может обрабатывать миллионы метрик в секунду с минимальным воздействием на систему |
Масштабируемость | Легко масштабируется горизонтально через функциональное шардирование |
Встроенный алертинг | AlertManager обрабатывает оповещения и объединяет их для уменьшения шума |
Визуализация | Интеграция с Grafana для создания интерактивных дашбордов |
Александр Кириллов, DevOps-инженер
Когда я присоединился к финтех-стартапу, система мониторинга была утомительной смесью разрозненных инструментов. Каждое утро начиналось с проверки десятков разных дашбордов и логов. Команда постоянно пропускала критические инциденты, а время обнаружения проблем исчислялось часами.
Внедрение Prometheus кардинально изменило ситуацию. Мы настроили централизованный сбор метрик со всей инфраструктуры, создали единую систему алертинга и подключили Grafana для визуализации. Время обнаружения инцидентов сократилось с часов до минут.
Особенно впечатлил случай, когда Prometheus обнаружил аномальное поведение API за 17 минут до того, как пользователи начали сообщать о проблемах. Мы устранили узкое место до того, как оно привело к реальным убыткам. С тех пор я рассматриваю Prometheus не как опцию, а как обязательный компонент любой серьезной инфраструктуры.

Подготовка к установке Prometheus: системные требования
Перед установкой Prometheus необходимо убедиться, что ваша система соответствует минимальным требованиям. Хотя Prometheus весьма эффективен с точки зрения использования ресурсов, его потребности растут в зависимости от объема мониторинга и количества метрик. 🖥️
Минимальные системные требования для небольшого развертывания:
- CPU: 2 ядра
- RAM: 4 ГБ
- Дисковое пространство: 50 ГБ (зависит от объема хранимых метрик)
- ОС: Linux (предпочтительно), можно также использовать macOS или Windows
- Сетевой доступ: открытые порты для сбора метрик (по умолчанию 9090)
Для расчета необходимых ресурсов важно понимать, что потребление памяти и места на диске Prometheus напрямую зависит от трех основных факторов:
- Количество временных рядов (метрик) в вашей системе
- Частота скрейпинга (как часто Prometheus опрашивает цели)
- Период хранения данных (retention period)
Масштаб мониторинга | CPU | RAM | Диск | Примечания |
---|---|---|---|---|
Небольшой (до 10K метрик) | 2 ядра | 4 ГБ | 50 ГБ | Подходит для мониторинга нескольких небольших приложений |
Средний (10K-100K метрик) | 4 ядра | 8-16 ГБ | 100-300 ГБ | Оптимально для большинства организаций среднего размера |
Крупный (100K-1M метрик) | 8+ ядер | 32+ ГБ | 500 ГБ – 1 ТБ | Рекомендуется шардирование и оптимизация запросов |
Очень крупный (1M+ метрик) | 16+ ядер | 64+ ГБ | 2+ ТБ | Требуется федерация и оптимизированная архитектура хранения |
Помимо базовых системных требований, важно учитывать следующие рекомендации:
- Файловая система: XFS или ext4 для оптимальной производительности
- Сетевые настройки: убедитесь, что firewall не блокирует порты Prometheus
- Настройка Docker (если используется): выделите достаточно ресурсов для контейнеров
- Мониторинг самого мониторинга: рассмотрите возможность установки отдельного "метрик Prometheus" для отслеживания основного экземпляра
Для расчета приблизительного потребления места на диске можно использовать следующую формулу:
Размер_хранилища = Количество_метрик × Частота_сбора × Период_хранения × Размер_метрики
Где:
- Количество_метрик – общее число временных рядов
- Частота_сбора – количество измерений в секунду
- Период_хранения – сколько времени хранить данные (в секундах)
- Размер_метрики – приблизительно 2 байта на сэмпл (после сжатия)
Например, для системы с 10,000 метрик, сбором каждые 15 секунд и хранением в течение 15 дней потребуется приблизительно:
10000 × (1/15) × (15 × 24 × 60 × 60) × 2 = 8,64 ГБ
Предварительная подготовка системы должна также включать:
- Создание выделенного пользователя с ограниченными правами для запуска Prometheus
- Настройку логирования и ротации логов
- Планирование резервного копирования данных Prometheus
- Настройку мониторинга производительности системы хранения
Пошаговая установка Prometheus на разных платформах
Установка Prometheus может варьироваться в зависимости от платформы и предпочитаемого метода развертывания. Рассмотрим несколько основных подходов, которые подойдут для большинства сценариев. 🛠️
Установка на Linux с использованием бинарных файлов
Этот метод универсален и работает на большинстве дистрибутивов Linux:
- Создайте пользователя для Prometheus:
sudo useradd --no-create-home --shell /bin/false prometheus
- Создайте необходимые директории:
sudo mkdir /etc/prometheus /var/lib/prometheus
- Загрузите последнюю версию Prometheus (проверьте актуальную версию на https://prometheus.io/download/):
wget https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.linux-amd64.tar.gz
- Распакуйте архив:
tar -xvf prometheus-2.42.0.linux-amd64.tar.gz
- Скопируйте бинарные файлы:
sudo cp prometheus-2.42.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.42.0.linux-amd64/promtool /usr/local/bin/
- Скопируйте консольные библиотеки и установите права доступа:
sudo cp -r prometheus-2.42.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.42.0.linux-amd64/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
- Создайте базовый конфигурационный файл:
sudo nano /etc/prometheus/prometheus.yml
Добавьте базовую конфигурацию:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- Настройте systemd для автоматического запуска:
sudo nano /etc/systemd/system/prometheus.service
Добавьте следующее содержимое:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
- Запустите Prometheus и включите его автозапуск:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
Установка с использованием Docker
Docker предлагает более простой способ развертывания Prometheus, особенно для тестирования или при использовании контейнеризованных сред:
- Создайте директорию для хранения данных и конфигурации:
mkdir -p /path/to/prometheus/data /path/to/prometheus/config
- Создайте базовый конфигурационный файл:
nano /path/to/prometheus/config/prometheus.yml
Добавьте базовую конфигурацию (аналогичную предыдущему примеру).
- Запустите контейнер Prometheus:
docker run -d \
--name prometheus \
-p 9090:9090 \
-v /path/to/prometheus/config:/etc/prometheus \
-v /path/to/prometheus/data:/prometheus \
prom/prometheus
Установка через Docker Compose
Для более сложных сценариев, особенно когда вам нужна интеграция с другими сервисами (например, Grafana), Docker Compose предлагает элегантное решение:
- Создайте файл
docker-compose.yml
:
version: '3'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus/config:/etc/prometheus
- ./prometheus/data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
restart: always
grafana:
image: grafana/grafana
ports:
- "3000:3000"
volumes:
- ./grafana/data:/var/lib/grafana
depends_on:
- prometheus
restart: always
- Создайте необходимые директории и конфигурационные файлы:
mkdir -p ./prometheus/config ./prometheus/data ./grafana/data
touch ./prometheus/config/prometheus.yml
- Настройте
prometheus.yml
(аналогично предыдущим примерам) - Запустите сервисы:
docker-compose up -d
Установка на Kubernetes с использованием Prometheus Operator
Для развертывания в кластерах Kubernetes рекомендуется использовать Prometheus Operator, который значительно упрощает управление экземплярами Prometheus:
- Установите Prometheus Operator с помощью Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
- Проверьте установку:
kubectl get pods -n default
- Получите доступ к Prometheus UI:
kubectl port-forward svc/prometheus-kube-prometheus-prometheus 9090:9090
Мария Соколова, SRE-инженер
В прошлом году нам поручили модернизировать мониторинг для распределенной системы обработки платежей. Существующая система на базе устаревших инструментов не справлялась с нагрузкой, а некоторые проблемы обнаруживались только после жалоб клиентов.
Мы выбрали Prometheus для мониторинга и начали с установки в Docker-контейнерах для тестирования. Быстро убедились в его эффективности и решили масштабировать решение на весь продакшен, выбрав установку через Kubernetes Operator.
Внедрение шло поэтапно: сначала мониторинг инфраструктуры, затем критичные бизнес-метрики, и, наконец, полный охват всех сервисов. Ключевым моментом стала автоматизация развертывания через Terraform и Helm-чарты.
Результаты превзошли ожидания. Система стала выявлять аномалии на 15-20 минут раньше, чем начинались видимые пользователям сбои. А когда произошел инцидент с перегрузкой одного из сегментов, Prometheus помог выявить причину за считанные минуты вместо часов диагностики.
После установки проверьте доступность интерфейса Prometheus, перейдя по адресу http://localhost:9090 (или соответствующему IP-адресу вашего сервера).
Базовая настройка и конфигурация Prometheus
После успешной установки Prometheus необходимо настроить его для эффективного сбора и хранения метрик. Ключевым элементом конфигурации является файл prometheus.yml
. Рассмотрим основные разделы этого файла и их настройку. ⚙️
Структура конфигурационного файла
Конфигурация Prometheus состоит из нескольких ключевых разделов:
global: # Глобальные настройки
...
alerting: # Настройки алертинга
...
rule_files: # Файлы с правилами алертинга и записи
...
scrape_configs: # Конфигурация сбора метрик (targets)
...
remote_write: # Настройки удаленной записи (опционально)
...
remote_read: # Настройки удаленного чтения (опционально)
...
Глобальные настройки
Раздел global
определяет параметры, влияющие на работу всего сервера Prometheus:
global:
scrape_interval: 15s # Как часто собирать метрики
evaluation_interval: 15s # Как часто оценивать правила
scrape_timeout: 10s # Таймаут для сбора метрик
# Внешние лейблы, которые будут добавлены ко всем временным рядам
external_labels:
region: 'production'
datacenter: 'eu-west-1'
Настройка алертинга
Для настройки отправки уведомлений используется раздел alerting
:
alerting:
alertmanagers:
- static_configs:
- targets:
- 'alertmanager:9093'
Правила
Для определения правил алертинга и предварительного расчета метрик используется раздел rule_files
:
rule_files:
- 'rules/alert_rules.yml'
- 'rules/recording_rules.yml'
Настройка сбора метрик
Основной частью конфигурации является scrape_configs
, определяющий, откуда и как Prometheus будет собирать метрики:
scrape_configs:
# Сбор метрик самого Prometheus
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# Сбор метрик Node Exporter
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
# Динамическое обнаружение целей через файлы
- job_name: 'file-discovery'
file_sd_configs:
- files:
- 'targets/*.json'
refresh_interval: 5m
Конфигурация хранения данных
По умолчанию Prometheus хранит данные в локальной директории, но эти параметры можно изменить при запуске:
prometheus --storage.tsdb.path=/data \
--storage.tsdb.retention.time=15d \
--storage.tsdb.retention.size=30GB
Ключевые параметры хранения:
- storage.tsdb.path – путь к директории хранения данных
- storage.tsdb.retention.time – как долго хранить данные (по умолчанию 15 дней)
- storage.tsdb.retention.size – максимальный размер хранилища данных
Настройка безопасности
Для защиты Prometheus рекомендуется настроить базовую аутентификацию и TLS:
prometheus --web.config.file=/etc/prometheus/web-config.yml
Пример файла web-config.yml
:
tls_server_config:
cert_file: server.crt
key_file: server.key
basic_auth_users:
admin: $2y$12$mTjhWNgB8RzQ5iKpfSYd.uVBBP4BC/fHsG9V.R3XzCyMT9PQUZ1YK
Проверка конфигурации
Перед применением новой конфигурации всегда проверяйте её на ошибки:
promtool check config prometheus.yml
Для более детальной проверки можно использовать:
promtool check rules rules/alert_rules.yml
Лучшие практики конфигурации
- Релабелинг – используйте механизм
relabel_configs
для модификации меток целей до сбора метрик:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['server1:9100', 'server2:9100']
relabel_configs:
- source_labels: [__address__]
regex: '(.*):9100'
target_label: instance
replacement: '$1'
- Организация конфигурации – для больших развертываний разделите конфигурацию на несколько файлов:
scrape_configs:
- job_name: file-discovered-targets
file_sd_configs:
- files:
- 'targets/databases/*.json'
- 'targets/webservers/*.json'
- Мониторинг с интервалами – адаптируйте частоту сбора для разных типов сервисов:
scrape_configs:
- job_name: 'critical-services'
scrape_interval: 5s
static_configs:
- targets: ['api-gateway:9090']
- job_name: 'background-services'
scrape_interval: 30s
static_configs:
- targets: ['batch-processor:9090']
Настройка Prometheus — ответственный процесс, который часто требует знания не только систем мониторинга, но и программирования. Не знаете, с какой IT-профессией начать свой путь? Тест на профориентацию от Skypro поможет определить, подходит ли вам роль DevOps-инженера или системного администратора, работающего с системами мониторинга, или, возможно, ваше призвание — разработка инструментов мониторинга. Результаты теста дадут персонализированные рекомендации по развитию в IT.
Практические сценарии использования и интеграции системы
Настроив базовую установку Prometheus, вы готовы перейти к более продвинутым сценариям использования и интеграциям, которые раскроют полный потенциал системы мониторинга. 🚀
Мониторинг инфраструктуры с Node Exporter
Node Exporter — один из наиболее популярных экспортеров, который собирает системные метрики с Linux-серверов:
- Установка Node Exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz
cd node_exporter-1.5.0.linux-amd64
./node_exporter
- Добавление Node Exporter в конфигурацию Prometheus:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['node1:9100', 'node2:9100', 'node3:9100']
Ключевые метрики, которые предоставляет Node Exporter:
- node_cpu_seconds_total — общее использование CPU
- node_memory_MemAvailable_bytes — доступная память
- node_filesystem_avail_bytes — свободное место на дисках
- node_network_receive_bytes_total — сетевой трафик
- node_load1, node_load5, node_load15 — средняя нагрузка
Мониторинг контейнеров с cAdvisor
Для мониторинга Docker-контейнеров можно использовать cAdvisor:
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
gcr.io/cadvisor/cadvisor:latest
Конфигурация в Prometheus:
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
Мониторинг баз данных
Существуют специализированные экспортеры для различных баз данных:
База данных | Экспортер | Ключевые метрики |
---|---|---|
MySQL/MariaDB | mysqld_exporter | Соединения, запросы, репликация, буферы |
PostgreSQL | postgres_exporter | Соединения, транзакции, блокировки, IO |
MongoDB | mongodb_exporter | Операции, репликация, соединения, память |
Redis | redis_exporter | Команды, память, клиенты, ключи |
Elasticsearch | elasticsearch_exporter | JVM, индексы, запросы, кластер |
Интеграция с Kubernetes
Для мониторинга Kubernetes ключевыми компонентами являются:
- kube-state-metrics — для сбора метрик состояния объектов Kubernetes
- metrics-server — для метрик использования ресурсов (CPU/Memory)
- ServiceMonitor и PodMonitor — в случае использования Prometheus Operator
Пример создания ServiceMonitor для автоматического обнаружения сервисов:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: api-service-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: api
endpoints:
- port: metrics
interval: 15s
namespaceSelector:
matchNames:
- default
Создание алертов для критических ситуаций
Настройка правил алертинга в файле alert_rules.yml
:
groups:
- name: example
rules:
- alert: HighCPULoad
expr: 100 – (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU Load on {{ $labels.instance }}"
description: "CPU load is above 80% for 5 minutes (current value: {{ $value }}%)"
- alert: DiskSpaceFilling
expr: (node_filesystem_size_bytes – node_filesystem_free_bytes) / node_filesystem_size_bytes * 100 > 85
for: 10m
labels:
severity: warning
annotations:
summary: "Disk space filling on {{ $labels.instance }}"
description: "Disk space is more than 85% full on {{ $labels.mountpoint }} (current value: {{ $value }}%)"
Интеграция с Grafana для визуализации
После настройки сбора метрик следующим логичным шагом является создание дашбордов в Grafana:
- Добавление Prometheus как источника данных в Grafana:
- Configuration → Data sources → Add data source
- Выбрать Prometheus
- URL: http://prometheus:9090
- Save & Test
- Создание дашбордов или импорт готовых:
- Для Node Exporter: Dashboard ID 1860
- Для MySQL: Dashboard ID 7362
- Для Kubernetes: Dashboard ID 315
Масштабирование Prometheus
Для крупных инсталляций необходимо масштабирование:
- Федерация – Prometheus может скрейпить метрики с других Prometheus-серверов:
scrape_configs:
- job_name: 'federated-prometheus'
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="node"}'
- '{job=~"api.*"}'
static_configs:
- targets:
- 'prometheus-1:9090'
- 'prometheus-2:9090'
- Шардирование – разделение мониторинга на несколько независимых Prometheus-серверов по функциональным или географическим признакам
- Thanos или Cortex – системы для долгосрочного хранения метрик и создания глобального обзора
Мониторинг приложений с использованием клиентских библиотек
Чтобы собирать метрики из собственных приложений, используйте клиентские библиотеки Prometheus:
- Go: github.com/prometheus/client_golang
- Python: prometheus_client
- Java: io.prometheus:simpleclient
- Node.js: prom-client
- .NET: prometheus-net
Пример инструментирования Python-приложения:
from prometheus_client import Counter, Histogram, start_http_server
import time
import random
# Создаем метрики
REQUEST_COUNT = Counter('app_requests_total', 'Total app HTTP requests')
REQUEST_LATENCY = Histogram('app_request_latency_seconds', 'Request latency')
# Запускаем HTTP-сервер для экспорта метрик
start_http_server(8000)
# Симуляция приложения
while True:
# Увеличиваем счетчик запросов
REQUEST_COUNT.inc()
# Измеряем время выполнения
with REQUEST_LATENCY.time():
# Симуляция работы
time.sleep(random.uniform(0.1, 0.5))
Настройка Prometheus для сбора метрик с приложения:
scrape_configs:
- job_name: 'python-app'
static_configs:
- targets: ['app-server:8000']
Использование экспортеров веб-серверов и служб
Для популярных веб-серверов и служб существуют специальные экспортеры:
- nginx-exporter — для NGINX
- apache_exporter — для Apache
- blackbox_exporter — для проверки доступности сервисов через HTTP, TCP, DNS и другие протоколы
Пример конфигурации blackbox_exporter
для проверки доступности веб-сайтов:
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx] # Проверяем HTTP 200 OK
static_configs:
- targets:
- https://example.com
- https://api.example.com/status
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter:9115
Построение эффективной системы мониторинга с Prometheus — это не просто технический процесс, а стратегическое решение для обеспечения устойчивости вашей инфраструктуры. Правильно настроенный Prometheus становится не просто инструментом сбора метрик, а полноценной системой раннего предупреждения, позволяющей видеть малейшие отклонения в работе систем задолго до того, как они превратятся в критические инциденты. Освоив принципы работы с Prometheus, вы получаете не только видимость происходящего в вашей инфраструктуре, но и возможность принимать проактивные решения, основанные на реальных данных. Помните: лучший инцидент — это тот, который никогда не произошел благодаря вовремя замеченной аномалии.