Я пытаюсь настроить Munin для сбора статистики на сервере с postgresql 9.1 и 9.2 (сервер в настоящее время работает под управлением 9.1, протестировал новую виртуальную машину с 9.2, чтобы исключить некоторые странные проблемы на работающем сервере. Мне пришлось исправить некоторые плагинов для 9.2 из-за переименованных столбцов (например, procpid в pid), но это не проблема).
Munin устанавливается из репозиториев EPEL, postgres - из официального. Оба в актуальном состоянии.
Когда я пытаюсь запустить munin-node-configure --suggest, я получаю следующий результат:
# The following plugins caused errors:
# postgres_bgwriter:
# Junk printed to stderr
# postgres_cache_:
# Junk printed to stderr
# postgres_checkpoints:
# Junk printed to stderr
# postgres_connections_:
# Junk printed to stderr
# postgres_connections_db:
# Junk printed to stderr
# postgres_locks_:
# Junk printed to stderr
# postgres_querylength_:
# Junk printed to stderr
# postgres_scans_:
# Junk printed to stderr
# postgres_size_:
# Junk printed to stderr
# postgres_transactions_:
# Junk printed to stderr
# postgres_tuples_:
# Junk printed to stderr
# postgres_users:
# Junk printed to stderr
# postgres_xlog:
# Junk printed to stderr
После долгих поисков я отредактировал /etc/munin/plugin-conf.d/munin-node и добавил следующее:
[postgres*]
user postgres
В результате munin-node-configure перестает жаловаться на stderr и позволяет мне добавлять плагины, но когда я подключаюсь к серверу по telnet на 4949 и пытаюсь получить статистику, я просто получаю «Плохой выход». Когда я запускаю плагин индивидуально через munin-run (например, munin-run postgres_size_ALL), он работает полностью нормально. Если посмотреть на /var/log/munin/munin-node.log, то вот результат:
Error output from postgres_size_ALL:
DBI connect('dbname=template1','',...)failed: could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"? at /usr/share/perl5/vendor_perl/Munin/Plugin/Pgsql.pm line 377
Service 'postgres_size_ALL exited with status 1/0.
У меня сейчас нет идей ... сокет определенно существует, а pg_hba.conf настроен так, чтобы все пользователи / базы данных с localhost доверяли.
Оказалось, что SELinux блокирует доступ к сокету.
setsebool -P allow_user_postgresql_connect on
У меня тоже была эта проблема, но я не использую SELinux. В моей системе (Gentoo Linux) сокет PostgreSQL UNIX защищен разрешениями группы, все пользователи, которые хотят получить доступ к этому сокету, должны быть в группе postgres
. Мой пользователь munin
уже был членом postgres
(таким образом, все работало хорошо из оболочки), но, как оказалось, Munin - одна из тех программ, которые неявно не применяют группы пользователей. Установка обоих user munin
и group postgres
в файле конфигурации плагина решил проблему для меня.