Мониторинг Greenplum средствами Prometheus + Grafana

В этой статье описаны мои действия, чтобы протестировать мониторинг Greenplum средствами Prometheus + Grafana. Для мониторинга серверов кластера будем использовать node_exporter. Для мониторинга СУБД — postgres_exporter.

Примерная схема мониторинга Greenplum + Prometheus + Grafana
Примерная схема мониторинга Greenplum + Prometheus + Grafana

Установка и настройка node_exporter

Установим и настроим node_exporter для мониторинга серверов. Последующие действия нужно выполнить на всех серверах кластера.

curl -Lo /etc/yum.repos.d/_copr_ibotty-prometheus-exporters.repo https://copr.fedorainfracloud.org/coprs/ibotty/prometheus-exporters/repo/epel-7/ibotty-prometheus-exporters-epel-7.repo
yum install node_exporter
useradd -s /sbin/false prometheus

Сконфигурируем сервис (/etc/systemd/system/node_exporter.service).

[Unit]

Description=node_exporter
Wants=network-online.target
After=network-online.target

[Service]

User=prometheus
Group=prometheus
Type=simple
ExecStart=/sbin/node_exporter

[Install]
WantedBy=multi-user.target

Запускаем сервис node_exporter

systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
systemctl status node_exporter

Проверим получение метрик

curl vav-mdw:9100/metrics | grep node_uname_info

Установка и настройка postgres_exporter

Создадим в базе postgres ресурсную группу, пользователя и необходимые объекты для мониторинга на мастере.

CREATE RESOURCE GROUP monitor_group WITH (concurrency=10, cpu_rate_limit=2, memory_limit=5, memory_shared_quota=0, memory_spill_ratio=0);
CREATE ROLE monitor NOSUPERUSER LOGIN password 'monitor' RESOURCE GROUP monitor_group;
ALTER USER monitor SET SEARCH_PATH TO monitor,pg_catalog;

ALTER USER monitor SET SEARCH_PATH TO monitor,pg_catalog;

CREATE SCHEMA IF NOT EXISTS monitor;
GRANT USAGE ON SCHEMA monitor TO monitor;
GRANT CONNECT ON DATABASE postgres TO monitor;

CREATE OR REPLACE FUNCTION get_pg_stat_activity() RETURNS SETOF pg_stat_activity AS
$$ SELECT * FROM pg_catalog.pg_stat_activity; $$
LANGUAGE sql
EXECUTE ON MASTER
VOLATILE
SECURITY DEFINER;

CREATE OR REPLACE VIEW monitor.pg_stat_activity
AS
  SELECT * from get_pg_stat_activity();

GRANT SELECT ON monitor.pg_stat_activity TO monitor;

CREATE OR REPLACE FUNCTION get_pg_stat_replication() RETURNS SETOF pg_stat_replication AS
$$ SELECT * FROM pg_catalog.pg_stat_replication; $$
LANGUAGE sql
EXECUTE ON MASTER
VOLATILE
SECURITY DEFINER;

CREATE OR REPLACE VIEW monitor.pg_stat_replication
AS
  SELECT * FROM get_pg_stat_replication();
GRANT SELECT ON monitor.pg_stat_replication TO monitor;

Добавим файл паролей (/home/gpadmin/.pgpass). Последующие действия нужно выполнить на мастере и резервном мастере

echo "localhost:5432:*:monitor:monitor" >> /home/gpadmin/.pgpass
chown gpadmin:gpadmin /home/gpadmin/.pgpass
chmod go-rwx /home/gpadmin/.pgpass

Добавим разрешение в файл pg_hba.conf.

host     all         monitor         127.0.0.1/28    md5

Применим изменения.

gpstop -u

Устанавливаем postgres_exporter.

export VERSION="<версия>"
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v$VERSION/postgres_exporter-0.10.0.linux-amd64.tar.gz -O - | tar -xzv -C /tmp
cp /tmp/postgres_exporter-$VERSION.linux-amd64/postgres_exporter /usr/local/bin
rm -rf /tmp/postgres_exporter-$VERSION.linux-amd64
chown -R gpadmin:gpadmin /usr/local/bin/postgres_exporter

Создадим файл со строкой подключения (/opt/postgres_exporter/postgres_exporter.env).

DATA_SOURCE_NAME="postgresql://monitor@localhost:5432/postgres?sslmode=disable"

Создадим файл дополнительными запросами (/opt/postgres_exporter/queries.yaml). Ссылка на пример queries.yaml

Сконфигурируем сервис (/etc/systemd/system/postgres_exporter.service).

[Unit]
Description=Prometheus exporter for Postgresql
Wants=network-online.target
After=network-online.target
[Service]
User=gpadmin
Group=gpadmin
WorkingDirectory=/opt/postgres_exporter
EnvironmentFile=/opt/postgres_exporter/postgres_exporter.env
ExecStart=/usr/local/bin/postgres_exporter --disable-settings-metrics --extend.query-path=/opt/postgres_exporter/queries.yaml
Restart=always
[Install]
WantedBy=multi-user.target

Можно использовать файл для аутентификации. Подробнее https://inuits.eu/blog/prometheus-tls/

Запускаем сервис postgres_exporter.

systemctl daemon-reload
systemctl start postgres_exporter
systemctl enable postgres_exporter
systemctl status postgres_exporter

Проверим получение метрик

curl vav-mdw:9187/metrics | grep pg_static

Установка и настройка Prometheus

На сервере мониторинга ставим Prometheus из докер образа.

Подготовим конфигурационный файл Prometheus (/opt/prometheus/prometheus.yml).

global:
  scrape_interval:     10s
  evaluation_interval: 10s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'gp_servers'
    scrape_interval: 5s

    static_configs:
      - targets: ['vav-mdw:9100', 'vav-sdw1:9100', 'vav-sdw2:9100', 'vav-smdw:9100']
        labels:
          gpcluster: 'prod_cluster'

      - targets: ['vav-test:9100']
        labels:
          gpcluster: 'test_cluster'

  - job_name: greenplum
    static_configs:
      - targets: ['vav-mdw:9187']
        labels:
          gpcluster: prod_cluster
          gprole: master

      - targets: ['vav-smdw:9187']
        labels:
          gpcluster: prod_cluster
          gprole: slave
      - targets: ['vav-test:9187']
        labels:
          gpcluster: test_cluster
          gprole: master

Запускаем Docker образ.

docker run -d -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Установка и настройка Grafana

На тестовой сборке я запустил графану из образа следующим способом

docker run -d -p 3000:3000 grafana/grafana

Добавляем источник данных.

add_greenplum_monitor_grafana_prometheus

И добавляем панель. Можно это сделать на основе существующей от авторов postgres_exporter.

Итоги

Такая панель получилась у меня. В следующих частях я постараюсь описать настройку необходимых аварийных сообщений.

panel_greenplum_monitor_grafana_prometheus

2 комментария

  • Подскажи, как ты добился мониторинга состояния кластера и сегментов, используя postgres_exporter? Или использовал дополнительно скрипты из ADB?

    • Дополнительные метрики собираются через postgres_exporter.

      Скрипты для сбора прописаны в файле /opt/postgres_exporter/queries.yaml

      Подробнее github.com/prometheus-com...ter/queries.yaml

      Путь до файла прописывается в /etc/systemd/system/postgres_exporter.service (пример конфигурации выше)

Добавить комментарий

Ваш адрес email не будет опубликован.