我正在使用 Nagios 的 check_postgres.pl 插件。我尝试使用 check_postgres_checkpoint 选项来监控自上次运行检查点以来的时间。当我以 root 身份从 CLI 运行命令时,我得到了输出,但我无法在 Nagios Web 界面中获取输出。它显示的错误是,
ERROR: pg_controldata could not read the given data directory: "/opt/PostgreSQL/9.1/data"
它试图访问数据目录下方的“global”目录中的 pg_control 文件,该文件仅对 postgres 用户具有读取权限。
有人能建议我如何解决这个问题吗?
谢谢。
答案1
在我看来,实现此目的的最佳方式是通过 sudo,正如 Khaled 所建议的那样。
运行“visudo”并添加如下行:
nagios ALL=NOPASSWD:/path/to/check_postgres.pl
然后,将命令 def 更改为通过 sudo 运行插件。哦,一定要确保未设置“requiretty”(也通过 visudo),否则会失败。
或者,您可以创建一个包含 nagios + postgres 的新组,并让 /opt/PostgreSQL/9.1/data 由 postgres:postnag(或其他)拥有,但您需要确保所有新文件也属于“postnag”组(例如,通过 chmod g+s)。这是一个更复杂的解决方案,但不涉及 sudo(有些人似乎不喜欢这样使用 sudo...?)。
答案2
- 以用户身份运行您的检查脚本
postgres
。
或者
- 以 root 身份运行检查脚本
或者
- 通过 cron 以上述用户之一的身份运行检查,并将其数据写入
check_postgres
可以读取的地方
或者
- ……我相信你自己可以想出更多类似的选择 :-)
答案3
可以通过授予 nagios 用户 sudo 权限来执行此插件而无需密码来解决此问题。
答案4
授予 pg_controldata seutuid 权限。这是比 sudo mangling 更简单、更安全的方法:
chmod u+s /usr/lib/postgresql/9.0/bin/pg_controldata