Сделал dashboard Postgresql overview для postgres_exporter.


Чем отличается от других дашбородов postgres_exporter?


Я объединил все другие дашборды postgres_exporter в один.


Этот дашборд показывает общую информацию по кластеру.


Скриншоты и краткая инструкция по установке: postgresql, postgres_exporter, prometheus, grafana под катом.


Почему бы не использовать pgwatch2 c influxdb?


Про InfluxDB

Вот краткий и неполный список проблем на момент версии 1.7 (применимо и к более младшим и скорее всего к старшим, CORE team не поменялась):


  • Стабильность. Периодически падает и теряет данные или ломает данные на диске. В последнем случае не может подняться или не может сделать компакшен, от чего количество открытых файлов улетает в космос. Лечится полной остановкой DB и выполнением команд в надежде, что хоть одна поможет.
  • Скорость. Заявленное в маркетинговых бумажках касается не постоянного рейта, а спайков.
  • Не работают внутренние лимиты на запросы вида SHOW TAG KEYS FROM ALL или SHOW EXACT SERIES CARDINALITY и на средней базе может положить все.
  • Потребление ресурсов. Сожрать 256ГБ RAM, закусить 320GB свопа и все равно упасть по OOMу — легко (в момент 6-ти часового запуска, который обусловлен тем, что при старте он читает с диска все индексы в память(InMem)).
  • Платная кластеризация (была представлена как часть OSS в версии 0.9 (December 8, 2014) и исчезла в 1.0 (September 26, 2014), став привилегией Enterprise версии).
  • Частые breaking changes. За 3 года сменили 5+ движков (закончили это делать на версии 0.9 (December 8, 2014)). Следующий Breaking Changes — это Influx 2.0, где они ушли от База Данных\Ретеншн полиси в сторону Buckets, поменяли язык запросов на Flux.
  • Периодически выкатывают фичи непонятно зачем сделанные, например сделали ifql (Flux) или Continuous Queries (последние выпилили в пользу task, по факту те же яйца только с Flux-ом) или Chronograf(буква C в TICK), при живой то графане.
  • Безалаберность при подготовке релизов.
  • Не самосогласованные утилиты экспорта и импорта из базы — если вы что-то экспортировали через cli, то импортировать обратно файлик не прокатит. restore из backup полностью заменяет всю метаинформацию о базах. Селективности и merge не завезли.
  • Телеграф как часть платформы TICK(буква T), например, они ломали поддержку Прометея в телеграфе 1.3.2 (замена символов не попадающих под [a-z]). Или, например, невозможность оверрайдить Retention Policy в (input,output).kafka, т.е. организовать полноценную связку metrics -> telegraf -> kafka -> telegraf -> influx у вас не получится.
  • Капаситор(бука K в TICK), очень неадекватно себя ведет, подстать InfluxDB. Выжирает RAM как не в себя, может говорить, что всё "ок", когда данных нет. Требует нежного обращения и ухода.

PostgreSQL


yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql96 postgresql96-server postgresql96-contrib

Инициализируем PostgreSQL.


/usr/pgsql-9.6/bin/postgresql96-setup initdb

В PostgreSQL добавляем расширение pg_stat_statements в postgresql.conf


shared_preload_libraries = 'pg_stat_statements'

Стартуем PostgreSQL


systemctl start postgresql-9.6

После этого в БД, выполните следующую команду:


CREATE EXTENSION pg_stat_statements

Postgres_exporter и Prometheus


Уточнение. Кто будет устанавливать postgres_exporter из бинарников

Ознакомьтесь с этим постом: https://mcs.mail.ru/help/monitoring-with-prometheus/postgresql-exporter
Конфиг экспортера от mail.ru заточен на k8s


А для большей части запросов в графиках надо подключать queries.yaml
Ссылка на файл в начале статьи есть, но вот в .service нет упоминания extend.query-path


Необходимые файлы вы можете взять здесь: https://github.com/lest/prometheus-rpm/tree/master/postgres_exporter


Postgres_exporter и Prometheus для Redhat систем устанавливаем из этого репозитория: https://github.com/lest/prometheus-rpm


Создаем файл /etc/yum.repos.d/prometheus.repo со следующим содержимым:


[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
       https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300

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


yum install -y prometheus2 postgres_exporter

В файле prometheus.yml для работы с postgres_exporter в scrape_configs добавьте следующую секцию:


scrape_configs:
  - job_name: postgresql
    static_configs:
      - targets: ['ip-адрес-prometheus:9187']
        labels:
          alias: postgres

Запускаем prometheus2 и postgres_exporter


systemctl start prometheus
systemctl start postgres_exporter

Grafana


Создаем файл /etc/yum.repos.d/grafana.repo со следующим содержимым:


[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

Устанавливаем grafana


yum -y install grafana initscripts urw-fonts wget

Запускаем grafana


systemctl start grafana-server

Берем dashboard здесь


https://grafana.com/grafana/dashboards/12273


Исходный код тут:


https://github.com/patsevanton/postgresql_overview_postgres_exporter












P.S. В этом дашборде мне не хватает знаний в promql и postgresql. Поэтому я надеюсь на то что вы мне поможете советом как улучшить дашборд или сделаете pull request.


P.S. Как руки дойдут, планирую сделать дашборд для информации по конкретной БД внутри PostgreSQL.