В этой статье описаны мои действия, чтобы протестировать мониторинг Greenplum средствами Prometheus + Grafana. Для мониторинга серверов кластера будем использовать node_exporter. Для мониторинга СУБД — postgres_exporter.
Содержание
Установка и настройка 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
Добавляем источник данных.
И добавляем панель. Можно это сделать на основе существующей от авторов postgres_exporter.
Итоги
Такая панель получилась у меня. В следующих частях я постараюсь описать настройку необходимых аварийных сообщений.
Подскажи, как ты добился мониторинга состояния кластера и сегментов, используя postgres_exporter? Или использовал дополнительно скрипты из ADB?
Дополнительные метрики собираются через postgres_exporter.
Скрипты для сбора прописаны в файле /opt/postgres_exporter/queries.yaml
Подробнее github.com/prometheus-com...ter/queries.yaml
Путь до файла прописывается в /etc/systemd/system/postgres_exporter.service (пример конфигурации выше)