1 | % Nagios Installation and Configuration |
---|
2 | % |
---|
3 | |
---|
4 | # Introduction |
---|
5 | |
---|
6 | ## Goals |
---|
7 | |
---|
8 | * Install and configure Nagios disk space plugin |
---|
9 | |
---|
10 | ## Notes |
---|
11 | |
---|
12 | * Commands preceded with "$" imply that you should execute the command as |
---|
13 | a general user - not as root. |
---|
14 | * Commands preceded with "#" imply that you should be working as root. |
---|
15 | * Commands with more specific command lines (e.g. "rtrX>" or "mysql>") |
---|
16 | imply that you are executing commands on remote equipment, or within |
---|
17 | another program. |
---|
18 | |
---|
19 | # Exercises |
---|
20 | |
---|
21 | It is possible to alert on disk space thresholds with the existing |
---|
22 | check_snmp plugin, but it is rather fiddly to set up (because, for example, |
---|
23 | you have to manually map the filesystem mountpoint to the OID index). So |
---|
24 | the approach given here is to install a new plugin, which handles this for |
---|
25 | you. |
---|
26 | |
---|
27 | |
---|
28 | ## 1. Create a plugin script |
---|
29 | |
---|
30 | Create a file /usr/local/bin/check_hrstorage.pl with the following contents |
---|
31 | (the #! line must be the very first line in the file) |
---|
32 | |
---|
33 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
34 | #!/usr/bin/perl -w |
---|
35 | |
---|
36 | unless ($ARGV[2]) { |
---|
37 | print STDERR "Usage: $0 <host> <community> <mountpoint> [<warn%> [<crit%>]]\n"; |
---|
38 | exit 3; |
---|
39 | } |
---|
40 | |
---|
41 | my $res = `snmpwalk -On -Oq -r 2 -t 1 -c '$ARGV[1]' -v2c '$ARGV[0]' .1.3.6.1.2.1.25.2.3`; |
---|
42 | unless ($res =~ /^\.1.3.6/) { |
---|
43 | print "Unable to contact via SNMP\n"; |
---|
44 | exit 3; |
---|
45 | } |
---|
46 | |
---|
47 | my $table = {}; |
---|
48 | my $index; |
---|
49 | foreach my $line (split(/\n/,$res)) { |
---|
50 | my ($k,$v) = split(/ /,$line,2); |
---|
51 | $table->{$k} = $v; |
---|
52 | if ($v eq $ARGV[2] && $k =~ /^.1.3.6.1.2.1.25.2.3.1.3\.(\d+)$/) { |
---|
53 | $index = $1; |
---|
54 | } |
---|
55 | } |
---|
56 | |
---|
57 | unless ($index) { |
---|
58 | print "Unable to find mountpoint $ARGV[2]\n"; |
---|
59 | exit 3; |
---|
60 | } |
---|
61 | |
---|
62 | my $size = $table->{".1.3.6.1.2.1.25.2.3.1.5.$index"}; |
---|
63 | $size += 4294967296 if $size < 0; |
---|
64 | my $used = $table->{".1.3.6.1.2.1.25.2.3.1.6.$index"}; |
---|
65 | $used += 4294967296 if $used < 0; |
---|
66 | my $percent = $used * 100.0 / $size; |
---|
67 | |
---|
68 | my $block = $table->{".1.3.6.1.2.1.25.2.3.1.4.$index"}; |
---|
69 | if ($block =~ /^(\d+)/) { |
---|
70 | $block = $1; |
---|
71 | $size = $size * 1.0 * $block / 1024 / 1024; |
---|
72 | $used = $used * 1.0 * $block / 1024 / 1024; |
---|
73 | } |
---|
74 | printf "%.2f%% used (%d out of %d MB)\n", $percent, $used, $size; |
---|
75 | if ($ARGV[4] && $percent >= $ARGV[4]) { |
---|
76 | exit 2; # Critical |
---|
77 | } |
---|
78 | if ($ARGV[3] && $percent >= $ARGV[3]) { |
---|
79 | exit 1; # Warning |
---|
80 | } |
---|
81 | exit 0; |
---|
82 | |
---|
83 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
84 | |
---|
85 | |
---|
86 | Make it executable using the following command: |
---|
87 | |
---|
88 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
89 | # chmod +x /usr/local/bin/check_hrstorage.pl |
---|
90 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
91 | |
---|
92 | |
---|
93 | ## 2. Configure the plugin |
---|
94 | |
---|
95 | Create a new configuration file: |
---|
96 | |
---|
97 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
98 | # editor /etc/nagios-plugins/config/hrstorage.cfg |
---|
99 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
100 | |
---|
101 | |
---|
102 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
103 | define command { |
---|
104 | command_name check_hrstorage |
---|
105 | command_line /usr/local/bin/check_hrstorage.pl '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$' '$ARG4$' |
---|
106 | } |
---|
107 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
108 | |
---|
109 | |
---|
110 | ## 3. Add a service check |
---|
111 | |
---|
112 | A service check can now be added to an individual host, or to a hostgroup. |
---|
113 | For example: |
---|
114 | |
---|
115 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
116 | define service { |
---|
117 | host_name noc |
---|
118 | service_description Disk space / |
---|
119 | check_command check_hrstorage!NetManage!/!80!90 |
---|
120 | use generic-service |
---|
121 | notification_interval 0 |
---|
122 | } |
---|
123 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
124 | |
---|
125 | The parameters to this check_hrstorage are: |
---|
126 | |
---|
127 | * SNMP community |
---|
128 | * Filesystem mount point |
---|
129 | * Warning threshold (%) |
---|
130 | * Critical threshold (%) |
---|