Мониторинг PostgreSQL с помощью Prometheus и Grafana
Содержание
Введение
В данной статье рассматривается настройка мониторинга PostgreSQL с помощью Prometheus и Grafana. Предполагается, что PostgreSQL, Prometheus и Grafana уже установлены в вашей системе. Если это не так, то вы можете ознакомиться со следующими статьями:
Настройка PostgreSQL
Чтобы Prometheus мог собирать метрики с PostgreSQL, необходимо создать специальную учетную запись в PostgreSQL. Для этого:
-
Подключитесь к PostgreSQL, например, с помощью
psql
:sudo -u postgres psql
-
Создайте учетную запись
postgres_exporter
:CREATE USER postgres_exporter;
-
Установите пароль для учетной записи:
\password postgres_exporter
-
Установите пути поиска схем:
ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;
-
Разрешите учетной записи
postgres_exporter
подключаться к базе данныхpostgres
:GRANT CONNECT ON DATABASE postgres TO postgres_exporter;
-
Разрешите учетной записи
postgres_exporter
получать доступ кpg_monitor
:GRANT pg_monitor to postgres_exporter;
Настройка PostgreSQL Exporter
PostgreSQL Exporter — это демон, который позволяет собирать метрики PostgreSQL в Prometheus. Подробнее о нем можно узнать здесь.
Предварительные настройки
Перед установкой PostgreSQL Exporter необходимо создать отдельную системную учетную запись, от имени которой будет работать PostgreSQL Exporter. Это необходимо для ограничения доступа учетной записи, предназначенной только для работы PostgreSQL Exporter. Для этого
-
Создайте системную группу с именем
postgres_exporter
:sudo groupadd --system postgres_exporter
-
Создайте системную учетную запись с именем
postgres_exporter
:sudo useradd -s /sbin/nologin --system -g postgres_exporter postgres_exporter
Загрузка и установка
Для загрузки и установки PostgreSQL Exporter выполните следующие шаги:
-
Перейдите в папку
/tmp
:cd /tmp
-
Перейдите на страницу загрузки PostgreSQL Exporter и скопируйте ссылку на архив требуемой версии.
-
Загрузите архив с помощью команды
wget
:wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.17.1/postgres_exporter-0.17.1.linux-amd64.tar.gz
-
Распакуйте архив с помощью команды
tar
:tar -zxvf postgres_exporter-0.17.1.linux-amd64.tar.gz
-
Перейдите в разархивированную папку:
cd postgres_exporter-0.17.1.linux-amd64
-
Переместите исполняемый файл
postgres_exporter
в папку/usr/local/bin
:sudo mv postgres_exporter /usr/local/bin/postgres_exporter
-
Измените владельца исполняемого файла на учетную запись
postgres_exporter
и группуpostgres_exporter
:sudo chown postgres_exporter:postgres_exporter /usr/local/bin/postgres_exporter
-
Создайте конфигурационный файл
/etc/postgres_exporter.conf
со следующим содержимым:DATA_SOURCE_NAME='postgresql://postgres_exporter:ваш-пароль@localhost:5432/postgres?sslmode=disable'
-
Поменяйте владельца и права файла
/etc/postgres_exporter.conf
:sudo chown postgres_exporter:postgres_exporter /etc/postgres_exporter.conf sudo chmod 0600 /etc/postgres_exporter.conf
Настройка демона
Для настройки запуска PostgreSQL Exporter как демона выполните следующие шаги:
-
Создайте конфигурационный файл
/etc/systemd/system/postgres_exporter.service
со следующим содержимым:[Unit] Description=PostgreSQL Exporter Wants=network-online.target After=network-online.target [Service] User=postgres_exporter Group=postgres_exporter Type=simple ExecStart=/usr/local/bin/postgres_exporter EnvironmentFile=/etc/postgres_exporter.conf [Install] WantedBy=multi-user.target
-
Перезапустите конфигурацию systemd:
sudo systemctl daemon-reload
-
Запустите демона
postgres_exporter
:sudo systemctl start postgres_exporter
-
Включите демона
postgres_exporter
в автозагрузку:sudo systemctl enable postgres_exporter
-
Проверьте, что
postgres_exporter
возвращает метрики:curl http://localhost:9187/metrics
Пример метрик:
go_gc_duration_seconds{quantile="0"} 1.2448e-05 go_gc_duration_seconds{quantile="0.25"} 1.2448e-05 go_gc_duration_seconds{quantile="0.5"} 1.2448e-05
Настройка Prometheus
Необходимо сообщить Prometheus, что нужно собирать метрики с Prometheus Exporter. Для этого в /etc/prometheus/prometheus.yaml
нужно добавить следующие строки:
scrape_configs:
- job_name: "postgres_exporter"
static_configs:
- targets: ["localhost:9187"]
После этого нужно перезапустить Prometheus:
sudo systemctl restart prometheus
Чтобы проверить, что все работает, нужно:
- Зайти в веб-интерфейс Prometheus, который по умолчанию доступен по адресу
http://X.X.X.X:9090
, гдеX.X.X.X
— IP-адрес вашего сервера. - В веб-интерфейсе на вкладке «Query» запросить какую-нибудь метрику, которую предоставляет PostgreSQL Exporter, например,
pg_database_size_bytes
. Если метрики отображаются, значит все работает.
Также за состоянием сбора метрик можно следить на странице «Status > Target health».
Настройка Grafana
Для визуализации метрик PostgreSQL можно создать как свой дашборд, так и воспользоваться существующими. Для этого:
- Откройте Grafana Labs, перейдите на страницу подходящего вам дашборда.
- Скопируйте ID подходящего вам дашборда.
- Откройте Grafana, перейдите на страницу «Dashboards».
- На странице «Dashboards» на нажмите «New», «Import».
- Вставьте ранее скопированный ID и нажмите «Load».
- Выберите название, расположение, а также источник данных для нового дашборда, после чего нажмите «Import».