LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Server (https://www.linuxquestions.org/questions/linux-server-73/)
-   -   nagios mysqld.pl check fails (https://www.linuxquestions.org/questions/linux-server-73/nagios-mysqld-pl-check-fails-4175411861/)

bluethundr 06-16-2012 09:17 PM

nagios mysqld.pl check fails
 
Hello,

I'm trying to use the check_mysqld.pl plugin from the exchange.

When I run the command from the nagios server on the command line it seems to succeed:

Code:

[root@cloud:/usr/local/nagios/etc/objects] #/usr/local/nagios/libexec/check_nrpe -H beta.domain.com -c check_mysqld
MYSQL 5.5.23 OK


But in the nagios web interface the check fails with a critical error:

Code:

CRITICAL ERROR - Unable to connect to database '' on server 'localhost' on port 3306 with user '' - Access denied for user 'nagios'@'localhost' (using password: NO)
If I run the plugin on the client end as the nagios user this is what the run looks like:

Code:

[nagios@beta ~]$ /usr/local/nagios/libexec/check_mysqld.pl
 MYSQL 5.5.23 OK


In the command definition I did allow space for the username and password just in case I had a problem implementing it remotely:

Code:

# 'check_mysqld' command definition
define command{
        command_name    check_mysqld
      command_line    $USER1$/check_mysqld.pl -u $ARG1$ -p $ARG2$
}


My service definition was pretty straight forward:

Code:

# Define a service to check MYSQL on the local machine.define service{
        use                            local-service
        host_name                      beta
        service_description            MYSQL
        check_command                  check_mysqld
        notifications_enabled          0
        }

(leaving notifications disabled until I sort this out)


In my nrpe command definition on the client, this is what I have:

Code:

command[check_mysqld]=/usr/local/nagios/libexec/check_mysqld.pl -u root -p secret
So I am wondering why this check fails with the above error in the web interface when it succeeds on the command line as I have shown. Thanks for any input you may have!

MensaWater 06-18-2012 07:08 AM

The error is telling you the reason it failed is because it was looking for the MySQL database on localhost which would be your Nagios master but your command line makes it clear you want to check for it on a remote host. (beta.domain.com = remote host and presumably cloud = nagios master).

localhost always = 127.0.0.1 and always means the host on which you presently are on. When you run check_mysql.pl and don't specify a host from your Nagios master then it is trying to check your master and NOT beta.domain.com.

You're using the wrong command in services.cfg (or commands.cfg). Your command line used check_nrpe rather than check_mysqld. That is to say you are not doing the same check from command line that you have defined in Nagios services.cfg and commands.cfg.

You should either modify your services.cfg command to do the same check_nrpe you did from command line OR modify your check_mysqld in commands.cfg so it does the check_nrpe you did from command line (or modify it so it does check_mysql.pl but allows specification of a remote host).

check_nrpe expects you to ask the remote host's nrpe daemon to run whatever is defined in the remote host's nrpe.cfg for the specified command. check_mysql.pl however is a completely separate plugin so you can either check it with check_nrpe if defined in nrpe.cfg on the remote host (as you did from command line) or use check_mysql.pl itself without going through the check_nrpe/nrpe configuration at all. Either way is valid. One reason you might choose to do check_nrpe instead of check_mysql.pl is to avoid having to open up the database on your remote host to external connections. Here we tend to do DB checks using the remote DB check rather than check_nrpe and use check_nrpe mainly for things we define locally on each host (e.g. memory checks, cpu checks, process checks).


All times are GMT -5. The time now is 04:29 AM.