check_mysql_query 无法连接到 mysql,但可以从命令行运行

check_mysql_query 无法连接到 mysql,但可以从命令行运行

我在 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。此外,还要确保获取返回代码并将其传递给包装器脚本。

相关内容