我在 Debian Wheezy 上运行 Nagios 3。我能够从命令行运行以下查询。mysql db 的凭据存储在~nagios/.my.cnf
nagios@intranet:~$ /usr/lib/nagios/plugins/check_mysql_query -H 'myhost.mydomain.com' -q "SELECT cast(AVG(availability)*100 AS DECIMAL(5,2) ) FROM crm.api_clients;" -w 70:100 -c 40:100
QUERY OK: 'SELECT cast(AVG(availability)*100 AS DECIMAL(5,2) ) FROM crm.api_clients;' returned 100.000000
但是当从 Nagios 调用相同的命令时,它无法连接到数据库。
命令和服务定义的相关部分是
define command{
command_name check_proxy
command_line /usr/lib/nagios/plugins/check_mysql_query -H 'myhost.mydomain.com' -q "SELECT cast(AVG(availability)*100 AS DECIMAL(5,2) ) FROM crm.api_clients;" -w '$ARG1$' -c '$ARG2$'
}
define service{
use generic-service ; Name of service template to use
host_name rds_read_replica
service_description Proxy availability
check_command check_proxy!70:100!40:100
}
在 Web 控制台中,我看到针对该服务出现以下错误:
QUERY CRITICAL: Access denied for user 'nagios'@'172.33.13.112' (using password: NO)
当我将用户名和密码传递给命令时,控制台会运行。但我想使用check_mysql_query
存储在中的凭据.my.cnf
。我该如何实现?
答案1
Nagios 将在没有 ENV 的情况下运行插件,因此不会设置 $HOME。您可以使用 进行模拟env -i
以进行手动测试。
您可以将检查命令更改为类似的命令HOME=/home/nagios && /usr/lib/nagios/plugins/check_mysql_query ...
(或任何路径)。
如果无法实现该功能,请将整个 check_command 包装到 shell 脚本中,该脚本在调用实际插件之前设置 HOME。此外,还要确保获取返回代码并将其传递给包装器脚本。