一、監控本地(localhost)記憶體
1、上傳監控腳本 check_mem 到/usr/local/nagios/libexec
1
2
<code># chown -R nagios.nagios check_mem</code>
<code># chmod +x check_mem</code>
2、修改commands配置
3
4
5
<code># vim /usr/local/nagios/etc/objects/commands.cfg </code>
<code>define </code><code>command</code><code>{</code>
<code> </code><code>command_name check_mem</code>
<code> </code><code>command_line $USER1$</code><code>/check_mem</code> <code>-w $ARG1$ -c $ARG2$</code>
<code> </code><code>}</code>
3、修改localhost.cfg
6
7
<code># vim /usr/local/nagios/etc/objects/localhost.cfg </code>
<code>define service{</code>
<code> </code><code>use </code><code>local</code><code>-service</code>
<code> </code><code>host_name localhost</code>
<code> </code><code>service_description check_mem</code>
<code> </code><code>check_command check_mem!20!10</code>
4、重新開機nagios服務
<code># service nagios restart</code>
5、check_mem 腳本
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<code>#!/bin/bash </code>
<code>USAGE=</code><code>"`basename $0` [-w|--warning]<percent free> [-c|--critical]<percent free>"</code>
<code>THRESHOLD_USAGE=</code><code>"WARNING threshold must be greater than CRITICAL: `basename $0` $*"</code>
<code>calc=</code><code>/tmp/memcalc</code>
<code>percent_free=</code><code>/tmp/mempercent</code>
<code>critical=</code><code>""</code>
<code>warning=</code><code>""</code>
<code>STATE_OK=0</code>
<code>STATE_WARNING=1</code>
<code>STATE_CRITICAL=2</code>
<code>STATE_UNKNOWN=3</code>
<code># print usage </code>
<code>if</code> <code>[[ $</code><code># -lt 4 ]]</code>
<code>then</code>
<code> </code><code>echo</code> <code>""</code>
<code> </code><code>echo</code> <code>"Wrong Syntax: `basename $0` $*"</code>
<code> </code><code>echo</code> <code>"Usage: $USAGE"</code>
<code> </code><code>exit</code> <code>0</code>
<code>fi</code>
<code># read input </code>
<code>while</code> <code>[[ $</code><code># -gt 0 ]] </code>
<code> </code><code>do</code>
<code> </code><code>case</code> <code>"$1"</code> <code>in</code>
<code> </code><code>-w|--warning)</code>
<code> </code><code>shift</code>
<code> </code><code>warning=$1</code>
<code> </code><code>;;</code>
<code> </code><code>-c|--critical)</code>
<code> </code><code>critical=$1</code>
<code> </code><code>esac</code>
<code> </code><code>shift</code>
<code> </code><code>done</code>
<code># verify input </code>
<code>if</code> <code>[[ $warning -</code><code>eq</code> <code>$critical || $warning -lt $critical ]]</code>
<code> </code><code>echo</code> <code>"$THRESHOLD_USAGE"</code>
<code># Total memory available </code>
<code>total=`</code><code>free</code> <code>-m | </code><code>head</code> <code>-2 |</code><code>tail</code> <code>-1 |</code><code>gawk</code> <code>'{print $2}'</code><code>`</code>
<code># Total memory used </code>
<code>used=`</code><code>free</code> <code>-m | </code><code>head</code> <code>-2 |</code><code>tail</code> <code>-1 |</code><code>gawk</code> <code>'{print $3}'</code><code>`</code>
<code># Calc total minus used </code>
<code>free</code><code>=`</code><code>free</code> <code>-m | </code><code>head</code> <code>-2 |</code><code>tail</code> <code>-1 |</code><code>gawk</code> <code>'{print $2-$3}'</code><code>`</code>
<code># normal values </code>
<code>#echo "$total"MB total </code>
<code>#echo "$used"MB used </code>
<code>#echo "$free"MB free </code>
<code># make it into % percent free = ((free mem / total mem) * 100) </code>
<code>echo</code> <code>"5"</code> <code>> $calc </code><code># decimal accuracy </code>
<code>echo</code> <code>"k"</code> <code>>> $calc </code><code># commit </code>
<code>echo</code> <code>"100"</code> <code>>> $calc </code><code># multiply </code>
<code>echo</code> <code>"$free"</code> <code>>> $calc </code><code># division integer </code>
<code>echo</code> <code>"$total"</code> <code>>> $calc </code><code># division integer </code>
<code>echo</code> <code>"/"</code> <code>>> $calc </code><code># division sign </code>
<code>echo</code> <code>"*"</code> <code>>> $calc </code><code># multiplication sign </code>
<code>echo</code> <code>"p"</code> <code>>> $calc </code><code># print </code>
<code>percent=`</code><code>/usr/bin/dc</code> <code>$calc|</code><code>/bin/sed</code> <code>'s/^\./0./'</code><code>|</code><code>/usr/bin/tr</code> <code>"."</code> <code>" "</code><code>|</code><code>/usr/bin/gawk</code> <code>{</code><code>'print $1'</code><code>}`</code>
<code>#percent1=`/usr/bin/dc $calc` </code>
<code>#echo "$percent1" </code>
<code>if</code> <code>[[ </code><code>"$percent"</code> <code>-</code><code>le</code> <code>$critical ]]</code>
<code> </code><code>then</code>
<code> </code><code>echo</code> <code>"CRITICAL - $free MB ($percent%) Free Memory"</code>
<code> </code><code>exit</code> <code>2</code>
<code>if</code> <code>[[ </code><code>"$percent"</code> <code>-</code><code>le</code> <code>$warning ]]</code>
<code> </code><code>echo</code> <code>"WARNING - $free MB ($percent%) Free Memory"</code>
<code> </code><code>exit</code> <code>1</code>
<code>if</code> <code>[[ </code><code>"$percent"</code> <code>-gt $warning ]]</code>
<code> </code><code>echo</code> <code>"OK - $free MB ($percent%) Free Memory"</code>
<code> </code><code>exit</code> <code>0</code>
二、監控用戶端記憶體使用情況
2、修改nrpe.cfg
<code># vim /usr/local/nagios/etc/nrpe.cfg </code>
<code>command</code><code>[check_users]=</code><code>/usr/local/nagios/libexec/check_users</code> <code>-w 3 -c 5</code>
<code>command</code><code>[check_load]=</code><code>/usr/local/nagios/libexec/check_load</code> <code>-w 15,10,5 -c 30,25,20</code>
<code>command</code><code>[check_xvda]=</code><code>/usr/local/nagios/libexec/check_disk</code> <code>-w 10% -c 5% -p </code><code>/dev/xvda</code>
<code>command</code><code>[check_zombie_procs]=</code><code>/usr/local/nagios/libexec/check_procs</code> <code>-w 5 -c 10 -s Z</code>
<code>command</code><code>[check_total_procs]=</code><code>/usr/local/nagios/libexec/check_procs</code> <code>-w 150 -c 200 </code>
<code>command</code><code>[check_xvdb2]=</code><code>/usr/local/nagios/libexec/check_disk</code> <code>-w 10% -c 5% -p </code><code>/dev/xvdb2</code>
<code>command</code><code>[check_swap]=</code><code>/usr/local/nagios/libexec/check_swap</code> <code>-w 20% -c 10%</code>
<code>command</code><code>[check_mem]=</code><code>/usr/bin/sudo</code> <code>/usr/local/nagios/libexec/check_mem</code> <code>-w 20 -c 10 </code><code>#增加此行</code>
3、在nagios伺服器端增加監控服務
<code># vim /usr/local/nagios/etc/servers/192.168.200.111.cfg</code>
<code> </code><code>use generic-service</code>
<code> </code><code>host_name 192.168.200.111</code>
<code> </code><code>check_command check_nrpe!check_mem</code>
三、排錯
1、NRPE: Unable to read output
(1)為nagios使用者增加sudo權限
<code># visudo</code>
<code>nagios ALL=(ALL) NOPASSWD:</code><code>/usr/local/nagios/libexec/check_mem</code>
(2)注釋掉一下行,表示不需要控制終端
<code>#Defaults requiretty</code>
四、nagios監控mysql
1、check_mysql
nagios監控mysql使用的是 check_mysql 這個插件,需要在nagios伺服器上先安裝mysql-devel,然後再重新安裝nagios-plugin,這樣才會出現check_mysql。否則即使copy了一份,也照樣用不了。
2、編譯或重新編譯 nagios-plugin
<code>#yum -y install mysql-devl</code>
<code>#cd nagios-plugins-2.0.3</code>
<code>#./configure --with-nagios-user=nagios --with-nagios-group=nagios</code>
<code>#make && make install</code>
3、檢視 check_mysql
<code># ls /usr/local/nagios/libexec/check_mysql</code>
4、建立專用資料庫
<code># mysql -uroot -p</code>
<code>mysql> create database nagios_monitor;</code>
<code>mysql> grant </code><code>select</code> <code>on nagios_monitor.* to nagios@</code><code>'%'</code> <code>identified by </code><code>'123qaz!@#'</code><code>;</code>
<code>Query OK, 0 rows affected (0.00 sec)</code>
<code>mysql> flush privileges;</code>
<code>mysql> </code><code>select</code> <code>User,Password,Host from mysql.user;</code>
<code>+--------+-------------------------------------------+--------------+</code>
<code>| User | Password | Host |</code>
<code>| root | *B9627CB37815863D1E98D0C41E0233A772355E2B | localhost |</code>
<code>| root | *B9627CB37815863D1E98D0C41E0233A772355E2B | 127.0.0.1 |</code>
<code>| root | *B9627CB37815863D1E98D0C41E0233A772355E2B | ::1 |</code>
<code>| cacti | *BC3E1F14C7940F9C8BCDB05A38385754BB55CD64 | localhost |</code>
<code>| nagios | *BC3E1F14C7940F9C8BCDB05A38385754BB55CD64 | % |</code>
<code>8 rows </code><code>in</code> <code>set</code> <code>(0.00 sec)</code>
5、check 一下
<code># /usr/local/nagios/libexec/check_mysql -H 192.168.200.105 -unagios -dnagios_monitor -p 123qaz!@#</code>
<code># 報了一個錯</code>
<code>/usr/local/nagios/libexec/check_mysql</code><code>: error </code><code>while</code> <code>loading shared libraries: libmysqlclient.so.18: cannot </code><code>open</code> <code>shared object </code><code>file</code><code>: No such </code><code>file</code> <code>or directory</code>
<code># 解決:</code>
<code>ln</code> <code>-sv </code><code>/usr/local/mysql/lib/libmysqlclient</code><code>.so.18 </code><code>/usr/lib64/libmysqlclient</code><code>.so.18</code>
<code># 再重新測試</code>
<code># /usr/local/nagios/libexec/check_mysql -H 192.168.200.111 -unagios -dnagios_monitor -p 123qaz!@#</code>
<code>Uptime: 13991 Threads: 5 Questions: 1242101 Slow queries: 0 Opens: 159 Flush tables: 1 Open tables: 60 Queries per second avg: 88.778|Connections=315c;;; Open_files=85;;; Open_tables=60;;; Qcache_free_memory=16285768;;; Qcache_hits=1210926c;;; Qcache_inserts=16654c;;; Qcache_lowmem_prunes=0c;;; Qcache_not_cached=2c;;; Qcache_queries_in_cache=283;;; Queries=1242101c;;; Questions=1242101c;;; Table_locks_waited=2c;;; Threads_connected=5;;; Threads_running=1;;; Uptime=13991c;;;</code>
6、監控localhost
(1)修改 commands.cfg
<code># vim /usr/local/nagios/etc/objects/commands.cfg</code>
<code> </code><code>command_name check_mysql</code>
<code> </code><code>command_line $USER1$</code><code>/check_mysql</code> <code>-H $HOSTADDRESS$ -unagios -dnagios_monitor -p123qaz!@</code><code>#</code>
<code>}</code>
(2)修改 localhost.cfg
<code># vim /usr/local/nagios/etc/objects/localhost.cfg</code>
<code> </code><code>service_description check_mysql</code>
<code> </code><code>check_command check_mysql</code>
(3)重新開機 nagios
7、監控用戶端
(1)check 一下
<code># /usr/local/nagios/libexec/check_mysql -H 192.168.200.111 -unagios -dnagios_monitor -p123qaz!@#</code>
(2)用戶端修改 nrpe.cfg
<code>command</code><code>[check_mysql]=</code><code>/usr/local/nagios/libexec/check_mysql</code> <code>-H 192.168.200.111 -unagios -dnagios_monitor -p123qaz!@</code><code>#</code>
(3)重新開機 nrpe
<code># killall nrpe</code>
<code># /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d</code>
(4)服務端定義服務
<code># vim /usr/local/nagios/etc/servers/192.168.200.111.cfg </code>
<code> </code><code>check_command check_nrpe!check_mysql</code>
(5)重新開機 nagios 服務
本文轉自 nmshuishui 51CTO部落格,原文連結:http://blog.51cto.com/nmshuishui/1553445,如需轉載請自行聯系原作者