Есть очень полезная софтинка от компании
PostgresPro под названием "Mamonsu". Это написанный на Python-е демон, который прикидывается активным Zabbix-агентом и присылает на Zabbix-сервер кучу всяких метрик про состояние PostgreSQL-сервера. В частности, с её помощью очень удобно следить за разбуханием (bloating) базы, отставанием slave, слишком долго выполняющимися транзакциями, неосвобождающимися XID-ами и прочими аномалиями, которые имеет смысл оперативно устранять "на лету" до того как база с треском рухнет. Конкретно меня этот Mamonsu выручал не раз, и не два. В принципе, его можно использовать даже для профилирования запросов, хотя наверное PgBadger с этим справится получше.
Я ранее уже писал памятку по установке Mamonsu
вот здесь. Настало время её немного дополнить.
Изначально Mamonsu создавался как часть пакета "PostgresPro". Поэтому в основном заточен под использование именно с "платной доработанной" версией Postgres-а. С "халявной ванильной" он тоже работает, но ему нужны будут расширения как минимум "pg_stat_statements" и опционально "pg_buffercache". Если вы не собираетесь заниматься профилированием запросов и оптимизацией приложений, то второй вам не особо пригодится. А вот без первого ничего интересного из Postgres-а вытащить не получится. Поэтому нужно заранее позаботиться о том, чтобы включить его в конфиге СУБД (директива "shared_preload_libraries").
Далее собственно дополнения к предыдущей памятке.
- Внутри PostgreSQL непривилегированного пользователя для Mamonsu лучше называть именно вот "mamonsu", а не как-то по-другому. Почему? Да потому что в таком случае он сможет коннектиться к базе данных через Unix-сокет без предъявления логина-пароля. Ибо при установке пакета создается одноименный системный пользователь. Это удобно.
- Сперва редактируем конфиг mamonsu ("/etc/mamonsu/agent.conf"), а уже потом выполняем процедуру bootstrap! Именно в таком порядке. Об этом почему-то в официальной документации не пишут. Но юмор заключается в том, что bootstrap смотрит в этот конфиг, в котором "из коробки" находятся... ммм... не совсем пригодные настройки. Сколько же раз я сам наступал на эти грабли!
- Bootstrap нужно выполнять, авторизовавшись в Postgres-е от его (постгресного) суперпользователя. Иначе он не сможет создать нужные базы-расширения. В Debianоподобных системах проще всего делать "sudo -u postgres mamonsu bootstrap блаблабла". Если не планируется использовать "pg_buffercache", то ключ "--create-extensions" указывать не нужно. Если перед bootstrap-ом был правильно отредактирован конфиг (см. пункт 2), то можно запускать его вообще без параметров. Если нет, то обязательно задать как минимум ключи "-d" и "-M".
- Сразу после успешного bootstrap-а нужно зайти в базу данных, которую наколдовал для себя mamonsu и руками создать в ней расширение "pg_stat_statements". Да-да, "CREATE EXTENSION" и всё вот это. Почему-то он не делает этого сам даже если указать ключ "--create-extensions". Скорее всего, авторы mamonsu не отследили изменение логики работы этой библиотеки в последних версиях.
- Затем зайти в конфиг mamonsu и поотключать всё лишнее типа пассивного агента и прочие ненужности, об этом написано в предыдущей памятке.
- Запустить mamonsu, читать логи, смотреть какие плагины он не смог стартовать и тоже отключить их в конфиге. Для части из них требуется "платный" PostgresPro, для другой части всевозможные дополнительные Postgres-овские библиотеки. Практика показывает, что для мониторинга production-систем одного pg_stat_statements и плагинов на его основе более чем достаточно.
- При обновлении версии агента mamonsu надо таже обновлять и шаблон для Zabbix-сервера. Это команда "mamonsu export", её надо выполнять с такими привилегиями, чтобы mamonsu смог посмотреть в свою базу данных и в конфиг. Если вы последовали рекомендации из пункта 1, то достаточно сделать "sudo -u mamonsu mamonsu export блаблабла".
Собственно, всё. Выше были перечислены все основные острые углы, об которые можно зацепиться. Всем информативного мониторинга СУБД.