Dashboard Postgresql Overview для postgres_exporter (Prometheus)

Сделал 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

systemctl start postgresql-9.6


Postgres_exporter и Prometheus

Уточнение. Кто будет устанавливать postgres_exporter без rpm из бинарников, то ознакомьтесь с этим постом: https://mcs.mail.ru/help/monitoring-with-prometheus/postgresql-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

indeeudff0os9fzdqdfhrpdboby.jpeg

tr81ugngobhru0miibe7bgt4rp8.jpeg

b0yoq-rwfingvptkzqdrwsdzjvi.jpeg

kmsbycvyy5zpgphtlq8enzefob4.jpeg

kjuwzqfxsglk4dzyx44w7yka_fs.jpeg

zgmexzb97zio0xcr4gvbnvyeoe0.jpeg

3fsaoof3obeka8o0cjeiv2famcw.jpeg

dyzmnzfmgnbs09kaawhjjfcrqrw.jpeg

_jnrqr7jzo5jmixsyudgblw9zte.jpeg

e6w-p3if6zw4kug1qi327uj8nqc.jpeg

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

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

© Habrahabr.ru