Dashboard Postgresql Overview для postgres_exporter (Prometheus)
Сделал dashboard Postgresql overview для postgres_exporter.
Чем отличается от других дашбородов postgres_exporter?
Я объединил все другие дашборды postgres_exporter в один.
Этот дашборд показывает общую информацию по кластеру.
Скриншоты и краткая инструкция по установке: postgresql, postgres_exporter, prometheus, grafana под катом.
Почему бы не использовать pgwatch2 c 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
P.S. В этом дашборде мне не хватает знаний в promql и postgresql. Поэтому я надеюсь на то что вы мне поможете советом как улучшить дашборд или сделаете pull request.
P.S. Как руки дойдут, планирую сделать дашборд для информации по конкретной БД внутри PostgreSQL.