Merge "Adding Nagios Support"
This commit is contained in:
170
packstack/plugins/nagios_910.py
Normal file
170
packstack/plugins/nagios_910.py
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
"""
|
||||||
|
Installs and configures Nagios
|
||||||
|
"""
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
import logging
|
||||||
|
|
||||||
|
import packstack.installer.engine_validators as validate
|
||||||
|
from packstack.installer import basedefs, output_messages
|
||||||
|
import packstack.installer.common_utils as utils
|
||||||
|
|
||||||
|
from packstack.modules.ospluginutils import gethostlist,\
|
||||||
|
getManifestTemplate,\
|
||||||
|
appendManifestFile
|
||||||
|
|
||||||
|
# Controller object will be initialized from main flow
|
||||||
|
controller = None
|
||||||
|
|
||||||
|
# Plugin name
|
||||||
|
PLUGIN_NAME = "OS-Nagios"
|
||||||
|
PLUGIN_NAME_COLORED = utils.getColoredText(PLUGIN_NAME, basedefs.BLUE)
|
||||||
|
|
||||||
|
logging.debug("plugin %s loaded", __name__)
|
||||||
|
|
||||||
|
def initConfig(controllerObject):
|
||||||
|
global controller
|
||||||
|
controller = controllerObject
|
||||||
|
logging.debug("Adding OpenStack Nagios configuration")
|
||||||
|
paramsList = [
|
||||||
|
{"CMD_OPTION" : "nagios-host",
|
||||||
|
"USAGE" : "The IP address of the server on which to install the Nagios server",
|
||||||
|
"PROMPT" : "Enter the IP address of the Nagios server",
|
||||||
|
"OPTION_LIST" : [],
|
||||||
|
"VALIDATORS" : [validate.validate_ssh],
|
||||||
|
"DEFAULT_VALUE" : utils.getLocalhostIP(),
|
||||||
|
"MASK_INPUT" : False,
|
||||||
|
"LOOSE_VALIDATION": True,
|
||||||
|
"CONF_NAME" : "CONFIG_NAGIOS_HOST",
|
||||||
|
"USE_DEFAULT" : False,
|
||||||
|
"NEED_CONFIRM" : False,
|
||||||
|
"CONDITION" : False },
|
||||||
|
{"CMD_OPTION" : "nagios-passwd",
|
||||||
|
"USAGE" : "The password of the nagiosadmin user on the Nagios server",
|
||||||
|
"PROMPT" : "Enter the password for the nagiosadmin user",
|
||||||
|
"OPTION_LIST" : [],
|
||||||
|
"VALIDATORS" : [validate.validate_not_empty],
|
||||||
|
"DEFAULT_VALUE" : uuid.uuid4().hex[:16],
|
||||||
|
"MASK_INPUT" : True,
|
||||||
|
"LOOSE_VALIDATION": True,
|
||||||
|
"CONF_NAME" : "CONFIG_NAGIOS_PW",
|
||||||
|
"USE_DEFAULT" : False,
|
||||||
|
"NEED_CONFIRM" : False,
|
||||||
|
"CONDITION" : False },
|
||||||
|
]
|
||||||
|
|
||||||
|
groupDict = { "GROUP_NAME" : "NAGIOS",
|
||||||
|
"DESCRIPTION" : "Nagios Config parameters",
|
||||||
|
"PRE_CONDITION" : "CONFIG_NAGIOS_INSTALL",
|
||||||
|
"PRE_CONDITION_MATCH" : "y",
|
||||||
|
"POST_CONDITION" : False,
|
||||||
|
"POST_CONDITION_MATCH" : True}
|
||||||
|
|
||||||
|
controller.addGroup(groupDict, paramsList)
|
||||||
|
|
||||||
|
|
||||||
|
def initSequences(controller):
|
||||||
|
conf = controller.CONF
|
||||||
|
if conf['CONFIG_NAGIOS_INSTALL'] != 'y':
|
||||||
|
return
|
||||||
|
|
||||||
|
nagiossteps = [
|
||||||
|
{'title': 'Adding Nagios server manifest entries', 'functions':[createmanifest]},
|
||||||
|
{'title': 'Adding Nagios host manifest entries', 'functions':[createnrpemanifests]}
|
||||||
|
]
|
||||||
|
controller.addSequence("Installing Nagios", [], [], nagiossteps)
|
||||||
|
|
||||||
|
def _serviceentry(**kwargs):
|
||||||
|
s = 'define service {\n'
|
||||||
|
keys = kwargs.keys()
|
||||||
|
keys.sort()
|
||||||
|
for key in keys:
|
||||||
|
s += "\t%s\t%s\n"%(key, kwargs[key])
|
||||||
|
s+= "\t}\n"
|
||||||
|
return s
|
||||||
|
|
||||||
|
def _copy_script(**kwargs):
|
||||||
|
# TODO : Replace all these shell templates with with python
|
||||||
|
s = ('file{"/usr/lib64/nagios/plugins/%(name)s":'
|
||||||
|
'mode => 755, owner => "nagios", seltype => "nagios_unconfined_plugin_exec_t",'
|
||||||
|
'content => template("packstack/%(name)s.erb"),}\n'
|
||||||
|
'nagios_command{"%(name)s": command_line => "/usr/lib64/nagios/plugins/%(name)s", }\n' % kwargs)
|
||||||
|
return s
|
||||||
|
|
||||||
|
def createmanifest():
|
||||||
|
manifest_entries = ''
|
||||||
|
# I should be adding service entries with nagios_service but it appears to be broken
|
||||||
|
# http://projects.puppetlabs.com/issues/3420
|
||||||
|
service_entries = ''
|
||||||
|
for hostname in gethostlist(controller.CONF):
|
||||||
|
manifest_entries += "nagios_host{'%s': address => '%s', use => 'linux-server', }\n" % (hostname, hostname)
|
||||||
|
|
||||||
|
service_entries += _serviceentry(name='load5-%s'%hostname, service_description='5 minute load average',
|
||||||
|
host_name=hostname, check_command="check_nrpe!load5", use="generic-service",
|
||||||
|
normal_check_interval='5')
|
||||||
|
|
||||||
|
service_entries += _serviceentry(name='df_var-%s'%hostname,
|
||||||
|
service_description='Percent disk space used on /var',
|
||||||
|
host_name=hostname,
|
||||||
|
check_command="check_nrpe!df_var", use="generic-service")
|
||||||
|
|
||||||
|
manifest_entries += _copy_script(name="keystone-user-list")
|
||||||
|
service_entries += _serviceentry(name='keystone-user-list',
|
||||||
|
service_description='number of keystone users',
|
||||||
|
host_name=controller.CONF['CONFIG_NAGIOS_HOST'],
|
||||||
|
check_command="keystone-user-list", use="generic-service",
|
||||||
|
normal_check_interval='5')
|
||||||
|
|
||||||
|
if controller.CONF['CONFIG_GLANCE_INSTALL'] == 'y':
|
||||||
|
manifest_entries += _copy_script(name="glance-index")
|
||||||
|
service_entries += _serviceentry(name='glance-index',
|
||||||
|
service_description='number of glance images',
|
||||||
|
host_name=controller.CONF['CONFIG_NAGIOS_HOST'],
|
||||||
|
check_command="glance-index", use="generic-service",
|
||||||
|
normal_check_interval='5')
|
||||||
|
|
||||||
|
if controller.CONF['CONFIG_NOVA_INSTALL'] == 'y':
|
||||||
|
manifest_entries += _copy_script(name="nova-list")
|
||||||
|
service_entries += _serviceentry(name='nova-list',
|
||||||
|
service_description='number of nova vm instances',
|
||||||
|
host_name=controller.CONF['CONFIG_NAGIOS_HOST'],
|
||||||
|
check_command="nova-list", use="generic-service",
|
||||||
|
normal_check_interval='5')
|
||||||
|
|
||||||
|
if controller.CONF['CONFIG_CINDER_INSTALL'] == 'y':
|
||||||
|
manifest_entries += _copy_script(name="cinder-list")
|
||||||
|
service_entries += _serviceentry(name='cinder-list',
|
||||||
|
service_description='number of cinder volumes',
|
||||||
|
host_name=controller.CONF['CONFIG_NAGIOS_HOST'],
|
||||||
|
check_command="cinder-list", use="generic-service",
|
||||||
|
normal_check_interval='5')
|
||||||
|
|
||||||
|
if controller.CONF['CONFIG_SWIFT_INSTALL'] == 'y':
|
||||||
|
manifest_entries += _copy_script(name="swift-list")
|
||||||
|
service_entries += _serviceentry(name='swift-list',
|
||||||
|
service_description='number of swift containers',
|
||||||
|
host_name=controller.CONF['CONFIG_NAGIOS_HOST'],
|
||||||
|
check_command="swift-list", use="generic-service",
|
||||||
|
normal_check_interval='5')
|
||||||
|
|
||||||
|
manifest_entries+="file{'/etc/nagios/resource.d/nagios_service.cfg': \n" \
|
||||||
|
"ensure => present, mode => 644,\n" \
|
||||||
|
"content => '%s'}" % service_entries
|
||||||
|
|
||||||
|
controller.CONF['CONFIG_NAGIOS_MANIFEST_CONFIG'] = manifest_entries
|
||||||
|
|
||||||
|
manifestfile = "%s_nagios.pp" % controller.CONF['CONFIG_NAGIOS_HOST']
|
||||||
|
manifestdata = getManifestTemplate("nagios_server.pp")
|
||||||
|
appendManifestFile(manifestfile, manifestdata)
|
||||||
|
|
||||||
|
def createnrpemanifests():
|
||||||
|
for hostname in gethostlist(controller.CONF):
|
||||||
|
controller.CONF['CONFIG_NRPE_HOST'] = hostname
|
||||||
|
manifestfile = "%s_nagios_nrpe.pp" % hostname
|
||||||
|
manifestdata = getManifestTemplate("nagios_nrpe.pp")
|
||||||
|
appendManifestFile(manifestfile, manifestdata)
|
||||||
|
|
||||||
|
controller.MESSAGES.append("To use Nagios, browse to http://%s/nagios "
|
||||||
|
"username : nagiosadmin, password : %s" %
|
||||||
|
(controller.CONF['CONFIG_NAGIOS_HOST'],
|
||||||
|
controller.CONF['CONFIG_NAGIOS_PW']))
|
||||||
@@ -108,6 +108,18 @@ def initConfig(controllerObject):
|
|||||||
"USE_DEFAULT" : False,
|
"USE_DEFAULT" : False,
|
||||||
"NEED_CONFIRM" : False,
|
"NEED_CONFIRM" : False,
|
||||||
"CONDITION" : False },
|
"CONDITION" : False },
|
||||||
|
{"CMD_OPTION" : "nagios-install",
|
||||||
|
"USAGE" : "Set to 'y' if you would like Packstack to install Nagios to monitor openstack hosts",
|
||||||
|
"PROMPT" : "Should Packstack install Nagios to monitor openstack hosts",
|
||||||
|
"OPTION_LIST" : ["y", "n"],
|
||||||
|
"VALIDATORS" : [validate.validate_options],
|
||||||
|
"DEFAULT_VALUE" : 'n',
|
||||||
|
"MASK_INPUT" : False,
|
||||||
|
"LOOSE_VALIDATION": False,
|
||||||
|
"CONF_NAME" : "CONFIG_NAGIOS_INSTALL",
|
||||||
|
"USE_DEFAULT" : False,
|
||||||
|
"NEED_CONFIRM" : False,
|
||||||
|
"CONDITION" : False },
|
||||||
]
|
]
|
||||||
groupDict = { "GROUP_NAME" : "GLOBAL",
|
groupDict = { "GROUP_NAME" : "GLOBAL",
|
||||||
"DESCRIPTION" : "Global Options",
|
"DESCRIPTION" : "Global Options",
|
||||||
|
|||||||
14
packstack/puppet/modules/packstack/templates/cinder-list.erb
Normal file
14
packstack/puppet/modules/packstack/templates/cinder-list.erb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/env bash
|
||||||
|
|
||||||
|
. /etc/nagios/keystonerc_admin
|
||||||
|
|
||||||
|
data=$(cinder list 2>&1)
|
||||||
|
rv=$?
|
||||||
|
|
||||||
|
if [ "$rv" != "0" ] ; then
|
||||||
|
echo $data
|
||||||
|
exit $rv
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$data" | grep -v -e '--------' -e ' Status ' | wc -l
|
||||||
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/env bash
|
||||||
|
|
||||||
|
. /etc/nagios/keystonerc_admin
|
||||||
|
|
||||||
|
data=$(glance index 2>&1)
|
||||||
|
rv=$?
|
||||||
|
|
||||||
|
if [ "$rv" != "0" ] ; then
|
||||||
|
echo $data
|
||||||
|
exit $rv
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$data" | grep -v -e "^ID " -e "---------------" | wc -l
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/env bash
|
||||||
|
|
||||||
|
. /etc/nagios/keystonerc_admin
|
||||||
|
|
||||||
|
data=$(keystone user-list 2>&1)
|
||||||
|
rv=$?
|
||||||
|
|
||||||
|
if [ "$rv" != "0" ] ; then
|
||||||
|
echo $data
|
||||||
|
exit $rv
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$data" | grep -v -e " id " -e "---------------" | wc -l
|
||||||
13
packstack/puppet/modules/packstack/templates/nova-list.erb
Normal file
13
packstack/puppet/modules/packstack/templates/nova-list.erb
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/env bash
|
||||||
|
|
||||||
|
. /etc/nagios/keystonerc_admin
|
||||||
|
|
||||||
|
data=$(nova list 2>&1)
|
||||||
|
rv=$?
|
||||||
|
|
||||||
|
if [ "$rv" != "0" ] ; then
|
||||||
|
echo $data
|
||||||
|
exit $rv
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$data" | grep -v -e '--------' -e '| Status |' -e '^$' | wc -l
|
||||||
14
packstack/puppet/modules/packstack/templates/swift-list.erb
Normal file
14
packstack/puppet/modules/packstack/templates/swift-list.erb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/env bash
|
||||||
|
|
||||||
|
. /etc/nagios/keystonerc_admin
|
||||||
|
|
||||||
|
data=$(swift list 2>&1)
|
||||||
|
rv=$?
|
||||||
|
|
||||||
|
if [ "$rv" != "0" ] ; then
|
||||||
|
echo $data
|
||||||
|
exit $rv
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$data" |wc -l
|
||||||
|
|
||||||
@@ -20,6 +20,8 @@ class {'memcached':}
|
|||||||
class {'apache':}
|
class {'apache':}
|
||||||
class {'apache::mod::wsgi':}
|
class {'apache::mod::wsgi':}
|
||||||
file { '/etc/httpd/conf.d/openstack-dashboard.conf':}
|
file { '/etc/httpd/conf.d/openstack-dashboard.conf':}
|
||||||
|
file { '/etc/httpd/conf.d/nagios.conf':}
|
||||||
|
file { '/etc/httpd/conf.d/php.conf':}
|
||||||
|
|
||||||
firewall { '001 horizon incoming':
|
firewall { '001 horizon incoming':
|
||||||
proto => 'tcp',
|
proto => 'tcp',
|
||||||
|
|||||||
41
packstack/puppet/templates/nagios_nrpe.pp
Normal file
41
packstack/puppet/templates/nagios_nrpe.pp
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package{'nrpe':
|
||||||
|
ensure => present,
|
||||||
|
before => Class['nagios_configs']
|
||||||
|
}
|
||||||
|
|
||||||
|
class nagios_configs(){
|
||||||
|
|
||||||
|
file_line{'allowed_hosts':
|
||||||
|
path => '/etc/nagios/nrpe.cfg',
|
||||||
|
match => 'allowed_hosts=',
|
||||||
|
line => 'allowed_hosts=%(CONFIG_NAGIOS_HOST)s',
|
||||||
|
}
|
||||||
|
|
||||||
|
# 5 minute load average
|
||||||
|
file_line{'load5':
|
||||||
|
path => '/etc/nagios/nrpe.cfg',
|
||||||
|
match => 'command\[load5\]=',
|
||||||
|
line => 'command[load5]=cut /proc/loadavg -f 1 -d " "',
|
||||||
|
}
|
||||||
|
|
||||||
|
# disk used on /var
|
||||||
|
file_line{'df_var':
|
||||||
|
path => '/etc/nagios/nrpe.cfg',
|
||||||
|
match => "command\[df_var\]=",
|
||||||
|
line => "command[df_var]=df /var/ | sed -re 's/.* ([0-9]+)%%.*/\\1/' | grep -E '^[0-9]'",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class{'nagios_configs':
|
||||||
|
notify => Service['nrpe'],
|
||||||
|
}
|
||||||
|
|
||||||
|
service{'nrpe':
|
||||||
|
ensure => running,
|
||||||
|
hasstatus => true,
|
||||||
|
}
|
||||||
|
|
||||||
|
firewall { '001 nrpe incoming':
|
||||||
|
proto => 'tcp',
|
||||||
|
dport => ['5666'],
|
||||||
|
action => 'accept',
|
||||||
|
}
|
||||||
64
packstack/puppet/templates/nagios_server.pp
Normal file
64
packstack/puppet/templates/nagios_server.pp
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
package{['nagios', 'nagios-plugins-nrpe', 'nagios-plugins-ping']:
|
||||||
|
ensure => present,
|
||||||
|
before => Class['nagios_configs']
|
||||||
|
}
|
||||||
|
|
||||||
|
file { 'resource-d':
|
||||||
|
path => '/etc/nagios/resource.d',
|
||||||
|
ensure => directory,
|
||||||
|
owner => 'nagios',
|
||||||
|
before => Class['nagios_configs'],
|
||||||
|
require => Package['nagios']
|
||||||
|
}
|
||||||
|
|
||||||
|
class nagios_configs(){
|
||||||
|
file{['/etc/nagios/resource.d/nagios_command.cfg', '/etc/nagios/resource.d/nagios_host.cfg']:
|
||||||
|
ensure => 'present',
|
||||||
|
mode => '0644',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the entry for localhost, it contains services we're not
|
||||||
|
# monitoring
|
||||||
|
file{['/etc/nagios/objects/localhost.cfg']:
|
||||||
|
ensure => 'present',
|
||||||
|
content => '',
|
||||||
|
}
|
||||||
|
|
||||||
|
Nagios_command{
|
||||||
|
target => '/etc/nagios/resource.d/nagios_command.cfg'
|
||||||
|
}
|
||||||
|
Nagios_host{
|
||||||
|
target => '/etc/nagios/resource.d/nagios_host.cfg'
|
||||||
|
}
|
||||||
|
|
||||||
|
file_line{'resource.d':
|
||||||
|
path => '/etc/nagios/nagios.cfg',
|
||||||
|
line => 'cfg_dir=/etc/nagios/resource.d',
|
||||||
|
}
|
||||||
|
|
||||||
|
nagios_command{'check_nrpe':
|
||||||
|
command_line => '/usr/lib64/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$',
|
||||||
|
}
|
||||||
|
|
||||||
|
exec{'nagiospasswd':
|
||||||
|
command => '/usr/bin/htpasswd -b /etc/nagios/passwd nagiosadmin %(CONFIG_NAGIOS_PW)s',
|
||||||
|
}
|
||||||
|
|
||||||
|
file {"/etc/nagios/keystonerc_admin":
|
||||||
|
ensure => "present", owner => "nagios", mode => '0600',
|
||||||
|
content => "export OS_USERNAME=admin
|
||||||
|
export OS_TENANT_NAME=admin
|
||||||
|
export OS_PASSWORD=%(CONFIG_KEYSTONE_ADMIN_PW)s
|
||||||
|
export OS_AUTH_URL=http://%(CONFIG_KEYSTONE_HOST)s:35357/v2.0/ ",}
|
||||||
|
|
||||||
|
%(CONFIG_NAGIOS_MANIFEST_CONFIG)s
|
||||||
|
}
|
||||||
|
|
||||||
|
class{'nagios_configs':
|
||||||
|
notify => [Service['nagios'], Service['httpd']],
|
||||||
|
}
|
||||||
|
|
||||||
|
service{['nagios', 'httpd']:
|
||||||
|
ensure => running,
|
||||||
|
hasstatus => true,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user