Мониторинг основных показателей базы данных Postgresql при помощи Zabbix


Сбор статистических данных и оперативное реагирование на нестандартное поведение не менее важная часть работы системного администратора. чем резервное копирование. Мониторинг основных показателей базы данных Postgresql позволяет вовремя перейти к тюнингу параметров, партиционированию или горизонтальному или вертикальному масштабированию СУБД.

Одна из самых популярных задач на фриланс-сайтах это помогите "оптимизировать сервер баз данных", дескать он работал хорошо, а потом стал тормозить. Так вот, именно для таких случаев статистика и снимается и вы анализируя различные параметры и их совокупности в динамике сможете понять когда база данных стала тормозить и что именно там тормозит.

Для мониторинга состояния сервера баз данных Postgresql я использую наработки опубликованные на GITHUB: https://github.com/pg-monz/pg_monz/releases

Официальная страница проекта находится по адресу: http://pg-monz.github.io/pg_monz/index-en.html

 

В загруженном архиве находится несколько каталогов:

  • template
  • usr-local-bin
  • usr-local-etc
  • zabbix_agentd.d

Думаю, что можно по названиям догадаться, что в каталоге template хранятся необходимые нам для работы шаблоны которые мы импортируем через web-интерфейс заббикс-сервера, а usr-local-bin и usr-local-etc это бинарные файлы которые необходимо разметить в каталоге /usr/local/bin/ и /usr/local/etc/. Наконец, содержимое zabbix_agentd.d надо разместить в /etc/zabbix/zabbix_agentd.d (пути могут отличаться в зависимости от дистрибутива).

Для работы скриптов сбора данных необходимо установить пакет bc:

# apt-get install bc

Скрипты и конфигурационные файлы совершенно не обязательно размещать в каталоге /usr/local/, но если вы разместите их в другом каталоге, то вам придется отредактировать макро-параметры для этого шаблона.

Следующим этапом нам необходимо отредактировать конфигурационный файл /usr/local/etc/pgsql_funcs.conf и добавить в него параметр:

export PGPASSFILE=/usr/local/etc/pgpass

Дополнительно вы можете отредактировать имя пользователя, базы и т.п. самое главное чтобы у этого пользователя было достаточно прав на сбор статистики с сервера баз данных (у суперпользователя postgres прав на все хватит, но это не очень безопасный метод доступа).

Файл /usr/local/etc/pgpass в свою очередь содержит пароль пользователя postgres:

127.0.0.1:5432:*:postgres:SecretPassword

Этот файл естественно должен быть доступен только для zabbix-агента, и мы назначаем на него соответствующие разрешения:

# chown zabbix:zabbix ./pgpass
# chmod 600 ./pgpass

Перезапускаем Zabbix-агента при помощи команды:

# systemctl restart zabbix-agent

Проверяем, что источники данных выдают корректные значения и для этого мы будем использовать команду zabbix_get:

# zabbix_get -s 127.0.0.1 -p 10050 -k "db.list.discovery[/usr/local/bin,/usr/local/etc]"

В результате выполнения этого запроса мы получим список баз данных на сервере в формате JSON, например такой:

{"data":[{"{#DBNAME}":"postgres"},{"{#DBNAME}":"cloud_db"},... ]}

Если этот запрос отработал без ошибок, то это означает, что вы все сделали правильно и теперь подождите некоторое время пока отработают правила обнаружения начнет собираться статистика по базам данных на сервере.

Для настройки сбора данных с сервера мне потребовалось переопределить два параметра в разделе макросы.

Для получения сведений о медленных запросах используется анализ log-файлов, но у Zabbix естественно доступа к log-файлам Postgresql нет и вы получите ошибку:

27283:20180925:120620.040 active check "logrt["/var/log/postgresql//postgresql-.*\.log",
"PANIC|FATAL|ERROR|[Ee]rror"]" is not supported: Cannot open file 
"/var/log/postgresql//postgresql-10-main.log.6.gz": [13] Permission denied

Для того чтобы активировать этот кусок функционала добавьте пользователя zabbix в группу adm:

# usermod -a -G adm zabbix

После внедрения этой системы мониторинга вы получите большой объем статистических данных которые сильно помогут вам в работе.