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


Администрирование операционных систем на базе Linux (Debian/Ubuntu и Centos/RedHat) Мониторинг серверов и сетевой инфраструктуры при помощи Zabbix Администрирование серверов баз данных Postgresql
local monz postgres postgresql zabbix гите
 
 

* В этом блоге я описываю свою повседневную рабочую практику, поэтому все статьи в блоге написаны лично мной и при копировании их на свой сайт пожалуйста указывайте ссылку на страницу откуда вы скопировали.
* Если какая-то статья вам помогла, то вы можете дать мне немного денег вместо простого спасибо (ссылка на форму поддержки проекта внизу страницы), если вы что-то не поняли или у вас что-то не получается, то вы можете нанять меня и я вам все подробно расскажу (расценки и ссылки в конце статьи).


(последние правки 3 недели, 3 дня)

Сегодня я хотел бы продолжить цикл статей по мониторингу различных сервисов при помощи Zabbix и начнем пожалуй с баз данных Postgresql, на деле там ничего особо сложного нет и все уже давно придумано до нас. Нам остается только внедрить сборщик данных на сервер и понять, что за сведения мы собираем и где стоит установить границы срабатывания триггеров.

Сбор статистических данных и оперативное реагирование на нестандартное поведение не менее важная часть работы системного администратора. чем резервное копирование. Мониторинг основных показателей базы данных 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

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

 

Моя официальная страница на FaceBook
Мой микроблог в твиттер

Установка Postgresql версии 10 в Ubuntu Linux и Debian Linux

Установка Postgresql версии 10 в Ubuntu Linux и Debian Linux

На данный момент,10-ая версия Postgresql является стабильной и данный релиз принес довольно много "вкусностей", таких как: логическая репликация, партиционирование, улучшена производительность физической репликации, hash-индексы стали реплицируемы, поддержка полнотекстового поиска на jsonb колонках, улучшенная поддержка работы с xml и многое другое ... Естественно, что сходу мигрировать ваш сайт или приложение на новую версию не стоит, так как в ряде случаев вам потребуется некоторая доработка для обеспечения совместимости с десятой версией.


Установка Postgresql 10.4 на платформу ARM

Установка Postgresql 10.4 на платформу ARM

Собрать Postgresql 10.4 под платформу ARM я решил для того чтобы проверить одну свою идею по поводу логической репликации. Логическая репликация это новая фишка Postgresql 10-ой версии позволяющая реплицировать в Read only режиме отдельные таблицы на другой Postgresql server. Но вот правда одна незадача выяснилась, а именно под мою ARM-платформу собранных пакетов не нашлось.


Легковесный почтовый сервер с хранением учетных данных в базе Postgresql

Легковесный почтовый сервер с хранением учетных данных в базе Postgresql

До этого я рассказывал исключительно о монстроидальном комплексе совместной работы под названием Zimbra и вы наверное поняли, что запустить его на небольшом VPS у вас не получится, так как он потребляет просто огромное количество системных ресурсов. Но, что же делать, если требуется собственный почтовый сервер и вы сильно ограничены в системных ресурсах? Правильный ответ, это собрать его самому из Opensource-компонентов и полученный результат удивит вас своей легковесностью.


Установка свежих версий Postgresql (10.X) в Debian Linux

Установка свежих версий Postgresql (10.X) в Debian Linux

В LTS-версии дистрибутивов обычно входят такие-же LTS версии пакетов и в ряде случаев это конечно хорошо и стабильные обкатанные версии это гораздо лучше чем dev-ветки, но иногда требуются именно новые возможности которые появились недавно. Например мне, требовалась логическая репликация Postgresql в Debian версии 9.4, но логическая репликация появилась только в Postgresql 10, а штатный пакет в дистрибутиве имеет версию 9.6.


Настройка потоковой репликации Postgresql сервера (WAL-репликация)

Настройка потоковой репликации Postgresql сервера (WAL-репликация)

Потоковая репликация Postgresql сервера позволяет создать асинхронную Read Only копию сервера баз данных который можно использовать как FailOver-сервер или строить на нем какие-то тяжелые аналитические отчеты которые бы в свою очередь сильно загрузили боевой сервер. Назначений можно придумать огромное множество, да и настраивается эта технология довольно просто, правда есть у нее есть и несколько недостатков.


Чистка архива WAL в реплицируемых базах Postgresql

Чистка архива WAL в реплицируемых базах Postgresql

Потоковая репликация Postgresql это конечно круто, но есть у этой технологии и немного минусов. Во первых, при активной записи и обновлении данных генерируется довольно много трафика и я на одном из микро-тарифов довольно быстро вышел за лимиты, а во вторых, WAL-логи при активной записи и обновлении данных в базе Postgresql очень быстро разрастаются и начинают занимать гораздо больше места, чем сама база данных. Сегодня мы будем решать вторую проблему.


Как вы наверное понимаете, бесплатно сейчас работать никто не будет и если ответ на ваш вопрос потребует больше трех минут времени и вам требуется полноценная консультация, то расценки на мои услуги представленны ниже.


Есть вопросы?
Спрашивайте и я обязательно вам отвечу!

* Поля обязательные для заполнения .