24.06.2025

Мониторинг PostgreSQL и MySQL с помощью Prometheus настройка и метрики

Базы данных — сердце приложений, и их сбои могут привести к серьёзным последствиям. Традиционные инструменты мониторинга часто не видят внутренних проблем СУБД. Prometheus — это система, которая собирает и анализирует метрики в реальном времени, помогая SRE предотвращать и диагностировать проблемы. Это руководство покажет, как настроить мониторинг PostgreSQL и MySQL с Prometheus.

Prometheus: Локатор проблем в мире баз данных

Не система мониторинга, а детектив реального времени:
Prometheus — open-source система, созданная для диагностики сложных распределенных систем. Ее философия: "Каждая метрика — улика. Каждый график — история проблемы."

Как работает детектив:

Реальная аналогия:

Если Zabbix — это полицейский радар (фиксирует скорость), то Prometheus — это спутниковое слежение, показывающее *почему* водитель ускорился, куда он едет и чем это грозит.

Почему Prometheus? Горькие истины

Плюсы:

Минусы:

Жесткий факт: 68% компаний, внедривших Prometheus для мониторинга БД, обнаружили скрытые проблемы, о которых не подозревали годами.

Уникальные особенности: Почему это меняет правила игры

Метрики-убийцы:

Расследование связей:

// Найти пользователей, чьи запросы вызывают блокировки

pg_blocked_processes

* on (instance) group_left (usename)

pg_stat_activity{state="active"}

Прогнозная аналитика:

// Когда закончится место в табличном пространстве

predict_linear(pg_tablespace_size[24h], 86400 * 30)

Развертывание Prometheus: Не война, а 5 минут работы

Шаг 1 - Установка через Helm (Kubernetes):

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm install prometheus prometheus-community/kube-prometheus-stack

Шаг 2 - Конфигурация для физических серверов (docker-compose):

version: '3'

services:

prometheus:

image: prom/prometheus

ports:

"9090:9090"

volumes:

./prometheus.yml:/etc/prometheus/prometheus.yml

Шаг 3 - Конфиг `prometheus.yml` (фрагмент):

scrape_configs:

job_name: 'postgres'

static_configs:

targets: ['postgres-host:9187']

job_name: 'mysql'

static_configs:

targets: ['mysql-host:9104']

Настройка сбора метрик: Инструменты для "вскрытия"

Для PostgreSQL:

Установите postgres_exporter:

docker run -d --name postgres_exporter \

-e DATA_SOURCE_NAME="postgresql://user:pass@host:5432/?sslmode=disable" \

quay.io/prometheuscommunity/postgres-exporter

Ключевые метрики в PromQL:

// Мертвые блокировки

pg_deadlocks_total

// Эффективность кэша

pg_stat_database_blks_hit / (pg_stat_database_blks_read + pg_stat_database_blks_hit)

Для MySQL:

Разверните mysqld_exporter:

docker run -d --name mysql_exporter \

-e DATA_SOURCE_NAME="user:pass@(host:3306)/" \

prom/mysqld-exporter

Глубинные метрики:

// Очередь репликации

mysql_slave_status_seconds_behind_master

// Проблемы с временными таблицами

mysql_global_status_created_tmp_tables

Метрики для SRE: Не просто цифры, а сигналы бедствия

PostgreSQL: Что сводит с ума администраторов

Тихий убийца: pg_stat_activity_waiting

Что значит: Количество "зависших" запросов

Порог тревоги: 5 более 2 минут

Бомба замедленного действия: pg_stat_database_deadlocks

Как анализировать:

rate(pg_stat_database_deadlocks[5m]) 0.1

Коллапс на подходе: pg_buffercache_usage_ratio

Критическое значение: 0.95 (требует немедленного расширения RAM)

MySQL: Показатели сердечного приступа БД

Смертельный симптом: mysql_slave_lag_seconds

Почему страшно: Отставание реплики 30 сек = риск потери данных

Скрытая угроза: mysql_innodb_row_lock_time_avg

Диагностика:

mysql_innodb_row_lock_time_avg 500

Предвестник отказа: mysql_threads_running

*Экстренные меры*: Если 100 — немедленная остановка долгих запросов

Универсальные убийцы производительности:

// Транзакции-каннибалы

rate(pg_stat_database_xact_commit[1m]) / rate(pg_stat_database_xact_rollback[1m]) < 10

// Дисковый апокалипсис

rate(node_disk_io_time_seconds_total[1m]) 0.8

Жизнь после внедрения: Как изменится ваша реальность

До Prometheus:

После Prometheus:

Причина:

Решение:

Статистика из практики:

Команды, внедрившие Prometheus для мониторинга СУБД:

Prometheus не просто "показывает метрики". Он превращает вас в провидца, который: