Сделал 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 добавляем расширение 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
Ознакомьтесь с этим постом: 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.
Slach
хороший дашборд