Мониторинг долгих запросов PostgreSQL в Prometheus

Мониторинг долгих запросов PostgreSQL в Prometheus

Предположим, что у вас есть PostgreSQL (AWS RDS или классический PostgreSQL server), Prometheus, postgres exporter и alertmanager с Grafana.

Стоит задача присылать уведомления о том, что в Postgres подвис запрос. Причина и т.п. нас мало интересует. Нужно просто сказать всем, кому положено, что есть проблема и ее нужно решить.

Для этого нам понадобится немного допилить exporter кастомными метриками. Делается это отдельным файлом конфигурации. Пусть это будет /etc/queries.yaml.

pg_long_running_queries:
  query: |
    SELECT current_database(),
           pid,
           EXTRACT(EPOCH FROM age(clock_timestamp(), query_start)) AS duration_seconds,
           state,
           query
    FROM pg_stat_activity
    WHERE state = 'active' AND now() - query_start > interval '5 minutes';
  metrics:
    - current_database:
        usage: "LABEL"
        description: "Name of DataBase"
    - duration_seconds:
        usage: "GAUGE"
        description: "Duration of long-running queries in seconds"
    - pid:
        usage: "LABEL"
        description: "Process ID"
    - state:
        usage: "LABEL"
        description: "Query state"
    - query:
        usage: "LABEL"
        description: "SQL Query"
[Unit]
Description=Postgres exporter
After=network.target

[Service]
User=postgres
Group=postgres
Type=simple
EnvironmentFile=/etc/postgres_exporter.env
ExecStart=/usr/local/bin/postgres_exporter \
        --config.file=/etc/postgres_exporter.yaml \
        --auto-discover-databases \
        --exclude-databases="rdsadmin,template0,template1,postgres,unused" \
        --collector.stat_statements \
        --collector.long_running_transactions \
        --extend.query-path=/etc/queries.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

Конфиг самого exporter'a лежит в /etc/postgres_exporter.yaml и окружение в /etc/postgres_exporter.env.

Перезаупскаем postgres_exporter:

systemctl daemon-reload
service postgres_exporter restart

В результате мы в Prometheus должны увидеть метрику pg_long_running_queries_duration_seconds. По ней и строим вот такой алерт:

      - alert: LongQueryDetected
        expr: pg_long_running_queries_duration_seconds{query !~ "VACUUM ANALYZE .*"}
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: Long running query detected (instance {{ $labels.instance }})
          description: "Long running query detected\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

Задача решена.

Read more

Самохостниг (часть 10) - AudiobookShelf

Самохостниг (часть 10) - AudiobookShelf

AudiobookShelf - это бесплатный сервер аудиокниг и подкастов с открытым исходным кодом. Он позволяет вам организовать вашу коллекцию аудиокниг и подкастов, следить за прогрессом прослушивания и синхронизировать его между устройствами. В этой статье мы рассмотрим, как установить AudiobookShelf с помощью Docker Compose и настроить его работу через Traefik. Предварительные требования

Обзор reMarkable 2

Обзор reMarkable 2

В мире технологий появляются устройства, которые не только выполняют свои функции, но и становятся символами статуса и стиля. Одним из таких устройств является reMarkable 2 — уникальный гибрид электронной читалки и записной книжки, который произвёл фурор на Западе и теперь доступен в России. Давайте разберёмся, что делает этот девайс таким особенным

Plex повышает цены: что изменится и стоит ли спешить с покупкой?

Plex повышает цены: что изменится и стоит ли спешить с покупкой?

С 29 апреля 2025 года Plex значительно увеличит стоимость подписок и изменит условия бесплатного использования. Рассказываем, кому выгодно купить лицензию сейчас, а кому — лучше перейти на альтернативы. Что случилось? Plex, популярный медиасервер и каталогизатор контента, объявил о повышении цен на все виды подписки: * Месячная — с $4.99 до $6.99

Самохостинг (часть 9) - Arr stack + медиатека

Самохостинг (часть 9) - Arr stack + медиатека

В этой статье я расскажу, как настроить полноценную систему автоматического скачивания и организации медиаконтента с помощью Sonarr (для сериалов), Radarr (для фильмов), Lidarr (для музыки), Jackett (для поиска по трекерам) и qBittorrent (для загрузки торрентов). Эта экосистема интегрируется с Plex, о котором у нас уже есть отдельная статья. Что мы