simplify the nagios check_mysql_health plugin process:

1. use the new plugin deploy feature in nagios (nagios::plugin::deploy)
2. remove unnecessary classes and inheritance - this plugin seems reasonable to install by default, and in fact it could be argued that the other 'check_mysql' plugin that still remains can be removed, as its functionality is vastly overshadowed by this one
3. add the 'repl_client_priv' mysql grant privs to the nagios user. these are needed for the check_mysql_health plugin slave replication modes. According to http://dev.mysql.com/doc/refman/5.0/en/privileges-provided.html#priv_replication-client - The REPLICATION CLIENT privilege enables the use of SHOW MASTER STATUS and SHOW SLAVE STATUS. These privileges are not too much to provide to the nagios user, as they are only informational
4. setup the define "check_health" so it can be used easily
This commit is contained in:
Micah Anderson 2010-10-17 18:23:42 -04:00
parent 9463479afa
commit 6031165200

View file

@ -1,61 +1,85 @@
# manifests/server/nagios.pp
class mysql::server::nagios::base {
class mysql::server::nagios {
case $nagios_mysql_password {
'': { fail("please specify \$nagios_mysql_password to enable nagios mysql check")}
}
mysql_user{$nagios_mysql_user:
password_hash => mysql_password("${nagios_mysql_password}"),
require => Package['mysql'],
}
mysql_grant{$nagios_mysql_user:
privileges => 'select_priv',
require => [ Mysql_user[$nagios_mysql_user], Package['mysql'] ],
}
}
class mysql::server::nagios inherits mysql::server::nagios::base {
# Flip this variable if you need to check MySQL through check_ssh or check_nrpe,
# in that case you will have to manually define nagios::service::mysql
if ($nagios_mysql_notcp != true) {
$nagios_mysql_user = 'nagios@%'
nagios::service::mysql { 'mysql':
check_hostname => $fqdn,
check_username => 'nagios',
check_password => $nagios_mysql_password,
check_mode => 'tcp',
require => Mysql_grant[$nagios_mysql_user],
}
}
else {
$nagios_mysql_user = 'nagios@localhost'
}
}
class mysql::server::nagios::check_health inherits mysql::server::nagios::base {
nagios::plugin{'check_mysql_health':
source => 'mysql/nagios/check_mysql_health';
}
@@nagios_command{
'check_mysql_health':
command_line => '$USER1$/check_mysql_health --hostname $ARG1$ --port $ARG2$ --username $ARG3$ --password $ARG4$ --mode $ARG5$ --database $ARG6$',
require => Nagios::Plugin['check_mysql_health'];
}
case $mysql_nagios_user {
'': { $mysql_nagios_user = 'nagios' }
}
# Flip this variable if you need to check MySQL through check_ssh or check_nrpe,
# in that case you will have to manually define nagios::service::mysql
if ($nagios_mysql_notcp != true) {
$nagios_mysql_user = 'nagios@%'
nagios::service::mysql { 'mysql':
check_hostname => $fqdn,
check_username => 'nagios',
check_password => $nagios_mysql_password,
check_mode => 'tcp',
require => Mysql_grant[$nagios_mysql_user],
}
}
else {
$nagios_mysql_user = 'nagios@localhost'
}
mysql_user{$nagios_mysql_user:
password_hash => mysql_password("${nagios_mysql_password}"),
require => Package['mysql'],
}
# repl_client_priv is needed to check the replication slave status
# modes: slave-lag, slave-io-running and slave-sql-running
mysql_grant{$nagios_mysql_user:
privileges => [ 'select_priv', 'repl_client_priv' ],
require => [ Mysql_user[$nagios_mysql_user], Package['mysql'] ],
}
nagios::plugin::deploy{'check_mysql_health':
source => 'mysql/nagios/check_mysql_health',
require_package => 'libdbd-mysql-perl';
}
@@nagios_command{
'check_mysql_health':
command_line => '$USER1$/check_mysql_health --hostname $ARG1$ --port $ARG2$ --username $ARG3$ --password $ARG4$ --mode $ARG5$ --database $ARG6$';
}
define check_health (
$ensure = present,
$check_hostname = $fqdn,
$check_port = '3306',
$check_username = 'nagios',
$check_password = $nagios_mysql_password,
$check_database = 'information_schema',
$check_warning = undef,
$check_critical = undef,
$check_health_mode = $name,
$check_name = undef,
$check_name2 = undef,
$check_regexp = undef,
$check_units = undef,
$check_mode = 'tcp' )
{
case $check_mode {
'tcp': {
if ($check_hostname == 'localhost') {
$real_check_hostname = '127.0.0.1'
}
else {
$real_check_hostname = $check_hostname
}
}
default: {
if ($check_hostname == '127.0.0.1') {
$real_check_hostname = 'localhost'
}
else {
$real_check_hostname = $check_hostname
}
}
}
nagios::service { "mysql_health_${name}":
ensure => $ensure,
check_command => "check_mysql_health!${check_hostname}!${check_port}!${check_username}!${check_password}!${name}!${check_database}",
}
}
}