Skip to content

Commit 45509a5

Browse files
committed
Added Sensu monitoring checks
1 parent de0adda commit 45509a5

19 files changed

+367
-44
lines changed

.fixtures.yml

+3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
fixtures:
22
repositories:
3+
apt:
4+
repo: 'git://github.com/puppetlabs/puppetlabs-apt'
35
stdlib: "https://github.com/puppetlabs/puppetlabs-stdlib.git"
46
concat: "https://github.com/puppetlabs/puppetlabs-concat.git"
57
collectd: "https://github.com/Yuav/puppet-collectd.git"
68
yum: "https://github.com/voxpupuli/puppet-yum.git"
79
forge_modules:
810
refacter: "yuav/refacter"
11+
sensu: "sensu/sensu"
912
symlinks:
1013
monitoring: "#{source_dir}"

lib/facter/rabbitmq.rb

+2
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
end
66

77
Facter.add(:rabbitmq_management_present) do
8+
confine :rabbitmq_present => true
89
setcode do
910
!!Facter::Util::Resolution.exec('/usr/sbin/rabbitmqctl status | grep rabbitmq_management')
1011
end
1112
end
1213

1314
Facter.add(:rabbitmq_management_port) do
15+
confine :rabbitmq_present => true
1416
setcode do
1517
Facter::Util::Resolution.exec('/usr/sbin/rabbitmqctl environment | /bin/grep -A 10 rabbitmq_management | /bin/grep "listener,\[{port" | /bin/grep -o -E "[0-9]+"')
1618
end

manifests/init.pp

+9-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,16 @@
1212
# Supported tools: collectd
1313
#
1414
class monitoring (
15-
$metric_collector = $::monitoring::params::metric_collector,
15+
$metrics_tool = $::monitoring::params::metrics_tool,
1616
$collectd_network_server_hostname = $::monitoring::params::collectd_network_server_hostname,
17-
$collectd_network_server_port = $::monitoring::params::collectd_network_server_port,) inherits ::monitoring::params {
17+
$collectd_network_server_port = $::monitoring::params::collectd_network_server_port,
18+
$monitoring_tool = $::monitoring::params::monitoring_tool,
19+
$sensu_disk_usage_magic_factor = $::monitoring::params::sensu_disk_usage_magic_factor,
20+
$sensu_rabbitmq_hostname = $::monitoring::params::sensu_rabbitmq_hostname,
21+
$sensu_rabbitmq_password = $::monitoring::params::sensu_rabbitmq_password,
22+
) inherits ::monitoring::params {
23+
24+
validate_numeric($sensu_disk_usage_magic_factor)
1825

1926
# Ensure facts refresh monitoring tools are applied last
2027
# Would rather use custom stages instead, but stages doesn't support subclasses

manifests/install.pp

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
#
22
class monitoring::install () {
3-
4-
case $::monitoring::metric_collector {
3+
case $::monitoring::metrics_tool {
54
'collectd' : {
65
class { '::monitoring::metrics::collectd':
7-
collectd_network_server_hostname => $::monitoring::collectd_network_server_hostname,
8-
collectd_network_server_port => $::monitoring::collectd_network_server_port,
6+
network_server_hostname => $::monitoring::collectd_network_server_hostname,
7+
network_server_port => $::monitoring::collectd_network_server_port,
8+
}
9+
}
10+
default : {
11+
fail("Unsupported metrics tool: ${::monitoring::metrics_tool}")
12+
}
13+
}
14+
15+
case $::monitoring::monitoring_tool {
16+
'sensu' : {
17+
class { '::monitoring::monitoring::sensu':
18+
rabbitmq_hostname => $::monitoring::sensu_rabbitmq_hostname,
19+
rabbitmq_password => $::monitoring::sensu_rabbitmq_password,
920
}
1021
}
1122
default : {
12-
fail("Unsupported metric collector: ${::monitoring::metric_collector}")
23+
fail("Unsupported monitoring tool: ${::monitoring::monitoring_tool}")
1324
}
1425
}
1526
}

manifests/metrics/collectd.pp

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
# Collect metrics using collectd. Will attempt to collectd metrics from all supported types by default
55
#
66
class monitoring::metrics::collectd (
7-
$collectd_network_server_hostname = $::monitoring::params::collectd_network_server_hostname,
8-
$collectd_network_server_port = $::monitoring::params::collectd_network_server_port,) {
7+
$network_server_hostname = $::monitoring::collectd_network_server_hostname,
8+
$network_server_port = $::monitoring::collectd_network_server_port,) {
99
class { '::collectd':
1010
purge => true,
1111
recurse => true,
1212
purge_config => false,
1313
minimum_version => '5.4',
1414
}
1515

16-
collectd::plugin::network::server { $collectd_network_server_hostname: port => $collectd_network_server_port, }
16+
collectd::plugin::network::server { $network_server_hostname: port => $network_server_port, }
1717

1818
class { '::collectd::plugin::logfile':
1919
log_level => 'info',

manifests/monitoring/sensu.pp

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Class: monitoring::monitoring::sensu
2+
#===================================
3+
#
4+
class monitoring::monitoring::sensu (
5+
$rabbitmq_hostname = $::monitoring::sensu_rabbitmq_hostname,
6+
$rabbitmq_password = $::monitoring::sensu_rabbitmq_password,
7+
) {
8+
9+
# Don't override sensu install on sensu server node
10+
if !defined(Class['::sensu']) {
11+
class { '::sensu':
12+
server => false,
13+
api => false,
14+
rabbitmq_host => $rabbitmq_hostname,
15+
rabbitmq_password => $rabbitmq_password,
16+
purge => true,
17+
use_embedded_ruby => true,
18+
safe_mode => true,
19+
}
20+
}
21+
22+
include ::monitoring::monitoring::sensu::base
23+
24+
if ($::redis_present) {
25+
include ::monitoring::monitoring::sensu::redis
26+
}
27+
28+
# $services = [
29+
# 'collectd',
30+
# 'centrify',
31+
# 'elasticsearch',
32+
# 'influxdb',
33+
# 'mysql',
34+
# 'postfix',
35+
# 'rabbitmq',
36+
# 'redis',
37+
# ]
38+
#
39+
# $services.each |$service| {
40+
# if defined(Class[$service]) {
41+
# class { "::lysaker_sensu::checks::${service}": }
42+
# }
43+
# }
44+
}

manifests/monitoring/sensu/base.pp

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Class: lysaker_sensu::checks::base
2+
#==================================
3+
#
4+
class monitoring::monitoring::sensu::base (
5+
$plugins_location = $::monitoring::sensu_plugins_location,
6+
$disk_usage_magic_factor = $::monitoring::sensu_disk_usage_magic_factor,) {
7+
package { [
8+
'sensu-plugins-cpu-checks',
9+
'sensu-plugins-memory-checks',
10+
'sensu-plugins-disk-checks',
11+
'sensu-plugins-load-checks',
12+
'sensu-plugins-filesystem-checks',
13+
'sensu-plugins-process-checks',
14+
'sensu-plugins-network-checks',
15+
]:
16+
provider => sensu_gem,
17+
}
18+
19+
sensu::check { 'memory': command => "${plugins_location}check-memory.rb", }
20+
21+
sensu::check { 'memory-percent': command => "${plugins_location}check-memory-percent.rb -w 85 -c 95", }
22+
23+
sensu::check { 'swap-percent': command => "${plugins_location}check-swap-percent.rb", }
24+
25+
$ignore_fs_types = 'nfs,nfs4,cifs,devtmpfs,tmpfs,aufs,proc'
26+
$ignore_mnt = '"^/run/|^/sys/|^/var/lib/docker/|^/snap/"'
27+
28+
sensu::check { 'disk-usage':
29+
command => "${plugins_location}check-disk-usage.rb -x ${ignore_fs_types} -p ${ignore_mnt} -m ${disk_usage_magic_factor}",
30+
}
31+
32+
sensu::check { 'load': command => "${plugins_location}check-load.rb --per-core --warn 4,8,12 --crit 8,12,16", }
33+
34+
sensu::check { 'root-fs-writable': command => "${plugins_location}check-fs-writable.rb --directory /etc/sensu/", }
35+
36+
sensu::check { 'process-zombie-state':
37+
command => "${plugins_location}check-process.rb --state Z --warn-over 20 --critical-over 40 --warn-under 0 --critical-under 0",
38+
}
39+
40+
}

manifests/monitoring/sensu/redis.pp

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Class: monitoring::monitoring::sensu::redis
2+
# ===========================================
3+
#
4+
class monitoring::monitoring::sensu::redis (
5+
$plugins_location = $::monitoring::sensu_plugins_location,
6+
) {
7+
8+
package { 'sensu-plugins-redis':
9+
provider => sensu_gem,
10+
}
11+
12+
sensu::check { 'redis-process':
13+
command => "${plugins_location}check-process.rb --pattern redis-server --warn-under 1",
14+
}
15+
sensu::check { 'redis-info':
16+
command => "${plugins_location}check-redis-info.rb",
17+
}
18+
sensu::check { 'redis-ping':
19+
command => "${plugins_location}check-redis-ping.rb",
20+
}
21+
sensu::check { 'redis-memory-percentage':
22+
command => "${plugins_location}check-redis-memory-percentage.rb --warnmem 50 --critmem 75",
23+
}
24+
}

manifests/params.pp

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@
44
# It sets variables according to platform.
55
#
66
class monitoring::params {
7-
$metric_collector = 'collectd'
7+
$metrics_tool = 'collectd'
88
$collectd_network_server_hostname = 'influxdb'
99
$collectd_network_server_port = 25826
1010

11+
$monitoring_tool = 'sensu'
12+
$sensu_rabbitmq_hostname = 'rabbitmq'
13+
$sensu_rabbitmq_password = 'guest'
14+
$sensu_plugins_location = '/opt/sensu/embedded/bin/'
15+
$sensu_disk_usage_magic_factor = 0.9
16+
1117
case $::osfamily {
1218
'Debian', 'RedHat', 'Amazon' : { }
1319
default : { fail("${::operatingsystem} not supported") }

metadata.json

+12-13
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,27 @@
1919
{
2020
"operatingsystem": "RedHat",
2121
"operatingsystemrelease": [
22-
"4",
23-
"5",
2422
"6",
2523
"7"
2624
]
2725
},
2826
{
2927
"operatingsystem": "CentOS",
3028
"operatingsystemrelease": [
31-
"4",
32-
"5",
3329
"6",
3430
"7"
3531
]
3632
},
3733
{
3834
"operatingsystem": "OracleLinux",
3935
"operatingsystemrelease": [
40-
"4",
41-
"5",
4236
"6",
4337
"7"
4438
]
4539
},
4640
{
4741
"operatingsystem": "Scientific",
4842
"operatingsystemrelease": [
49-
"4",
50-
"5",
5143
"6",
5244
"7"
5345
]
@@ -62,9 +54,8 @@
6254
{
6355
"operatingsystem": "Ubuntu",
6456
"operatingsystemrelease": [
65-
"10.04",
66-
"12.04",
67-
"14.04"
57+
"14.04",
58+
"16.04"
6859
]
6960
}
7061
],
@@ -75,11 +66,19 @@
7566
},
7667
{
7768
"name": "puppet-collectd",
78-
"version_requirement": ">= 5.0.0"
69+
"version_requirement": ">= 5.0.0 < 9.9.9"
70+
},
71+
{
72+
"name": "puppetlabs-apt",
73+
"version_requirement": ">= 2.2.0 < 5.0.0"
74+
},
75+
{
76+
"name": "sensu/sensu",
77+
"version_requirement": ">= 2.1.0 < 5.0.0"
7978
},
8079
{
8180
"name": "yuav-refacter",
82-
"version_requirement": ">= 1.0.0"
81+
"version_requirement": ">= 1.0.0 < 9.9.9"
8382
}
8483
]
8584
}

0 commit comments

Comments
 (0)