Назад | Перейти на главную страницу

Munin с postgresql 9.2

Я пытаюсь настроить 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 в файле конфигурации плагина решил проблему для меня.