Skip to main content

Nagios Monitoring MySQL Servers

By October 25, 2013September 12th, 2022No Comments

Monitoring MySQL with Nagios Core

From what we have seen so far with Nagios, the configuration has been quite simple with none of the plugin requiring additional parameters. In this example where we monitor MySQL servers, we will need to pass through a username and password for MySQL when checking the service availability. Firstly we will create a MySQL user: We start on the MySQL user and we will log in to the database server and create a new user for Nagios to use. As added security, we will ensure that the user can only connect from the Nagios Monitoring Server.

CREATE USER 'nagios'@'' IDENTIFIED BY 'password'

To be able to test the account we must move to the Nagios server as we have restricted the account to just the host: in this case the Nagios server. To test the account from the Nagios server we could use the MySQL client alternatively we can run the plugin directly:

sudo -s -u nagios /usr/lib/nagios/plugins/check_mysql -H -u nagios -p password

Nagios Configuration

We now will configure monitor of MySQL. The is a command already configured on my Ubuntu Nagios server. This is in the file: /etc/nagios-plugins/config/mysql.cfg

# 'check_mysql' command definition
define command{
        command_name    check_mysql
        command_line    /usr/lib/nagios/plugins/check_mysql -H '$HOSTADDRESS$'

# 'check_mysql_cmdlinecred' command definition
define command{
        command_name    check_mysql_cmdlinecred
        command_line    /usr/lib/nagios/plugins/check_mysql -H '$HOSTADDRESS$' -u '$ARG1$' -p '$ARG2$'

# 'check_mysql_database' command definition
define command{
        command_name    check_mysql_database
        command_line    /usr/lib/nagios/plugins/check_mysql -d '$ARG3$' -H '$HOSTADDRESS$' -u '$ARG1$' -p '$ARG2$'

We can see that there are three commands configured to use the MySQL plugin. For our example, we will use the check_mysql_cmdlinecred.

Moving into the main configuration directory on the Nagios server, /etc/nagios3/conf.d we will be working with three files

  • a new host file
  • hostgroups file
  • services file

Firstly we will edit the exiting services file: services_nagios2.cfg. We can add in a new service monitoring definition for MySQL

define service {
        hostgroup_name                  mysql-servers
        service_description             MYSQL
        check_command                   check_mysql_cmdlinecred!nagios!password
        use                             generic-service
        notification_interval           0 ; set > 0 if you want to be renotified

Next we will create the hostgroup for MySQL, we are using a group as we are likely to have more than one MySQL server. The file we need to edit is:  hostgroups_nagios2.cfg

define hostgroup {
        hostgroup_name  mysql-servers
        alias           MySQL Servers
        members         mysql.tup.local

Group membership can be defined in the group as we have done here or from the host definition. Finally we create a new definition for the MySQL host. We define this as mysql.cfg

define host {
  host_name mysql.tup.local
  alias mysql
  max_check_attempts 3
  check_period 24x7
  check_command check-host-alive
  contacts root
  notification_interval 60
  notification_period 24x7

With the configuration in place ,we are now ready to test the setup with the pre-flight checks

nagios3 -v /etc/nagios3/nagios.cfg

And if all is correct we can restart the service. Now we can monitor MySQL from the web from end of Nagios