这里为了简单演示在linux系统下如何利用nagios对系统进行定制监控。nagios在linux的监控流程是使用nrpe客户端来调用/usr/lib64/nagios/plugins/目录下的脚本,然后将获取的数据返回给nagios,那些脚本会返回不同的状态值以及一些信息。nagios就是根据这些返回值来判断服务状态是否正常以及是否需要告警。这些状态值说明如下:
1、返回的状态值为0,表示OK,没有异常。
2、返回的状态值为1,表示WARNING,会触发WARNING报警。
3、返回的状态值为2,表示CRITICAL,会触发CRITICAL报警。
4、返回状态为3,表示UNKNOWN,
那面详细得来说明如何通过脚本定制监控数据库的连接数:
第一步:先写好获取数据的脚本,脚本中明确定义返回的状态码,
我这里的软件都是yum安装的
脚本内容如下:
1
2
3
4
5
6
7
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
<code>vi</code> <code>/usr/lib64/nagios/plugins/check_mysql_connections</code>
<code>#!/bin/bash</code>
<code>#Written by sjf</code>
<code>#This Nagios plugin can be check your mysql connections status</code>
<code>USAGE_Method="$(</code><code>basename</code> <code>$0) [-w|--warning] </code>
<code>[-c|--critical] </code><code>"USAGE_Value="</code><code>WARNING value must be small than CRITICAL value: `</code><code>basename</code> <code>$0` $*"</code>
<code>MYSQLUSER=nagios</code>
<code>MYSQLPS=nagiosadmin</code>
<code>MYSQLBIN=</code><code>/usr/bin/mysql</code>
<code>STATE_OK=0</code>
<code>STATE_WARNING=1</code>
<code>STATE_CRITICAL=2</code>
<code>STATE_UNKNOWN=3</code>
<code>if</code> <code>[ $</code><code># -lt 4 ];then</code>
<code>echo</code>
<code>echo</code> <code>"Usage: $USAGE_Method"</code>
<code>exit</code> <code>0</code>
<code>fi</code>
<code>while</code> <code>[ $</code><code># -gt 0 ];do</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code>-w|--warning)</code>
<code>shift</code>
<code>WARNING=$1</code>
<code>;;</code>
<code>-c|--critical)</code>
<code>CRITICAL=$1</code>
<code>esac</code>
<code>done</code>
<code>if</code> <code>[[ $WARNING -</code><code>eq</code> <code>$CRITICAL || $WARNING -gt $CRITICAL ]]</code>
<code>then</code>
<code>echo</code> <code>"$USAGE_Value"</code>
<code>used_connections=$($MYSQLBIN -u$MYSQLUSER -p$MYSQLPS -e </code><code>"show status like 'Threads_connected'\G"</code> <code>| </code><code>grep</code> <code>"Value"</code> <code>| </code><code>awk</code> <code>'{print $2}'</code><code>)</code>
<code>max_connections=$($MYSQLBIN -u$MYSQLUSER -p$MYSQLPS -e </code><code>"show variables like 'max_connections'\G"</code> <code>| </code><code>grep</code> <code>"Value"</code> <code>| </code><code>awk</code> <code>'{print $2}'</code><code>)</code>
<code>PERCENT=$(</code><code>bc</code> <code><<< </code><code>"scale=2;$used_connections/$max_connections"</code> <code>| </code><code>tr</code> <code>'^.'</code> <code>' '</code><code>)</code>
<code>if</code> <code>[[ </code><code>"$PERCENT"</code> <code>-gt </code><code>"$CRITICAL"</code> <code>]]</code>
<code>echo</code> <code>"CRITICAL - used_connections is : $used_connections"</code>
<code>exit</code> <code>2</code>
<code>if</code> <code>[[ </code><code>"$PERCENT"</code> <code>-gt </code><code>"$WARNING"</code> <code>&& </code><code>"$PERCENT"</code> <code>-lt </code><code>"$CRITICAL"</code> <code>]]</code>
<code>echo</code> <code>"WARNING - used_connections is : $used_connections"</code>
<code>exit</code> <code>1</code>
<code>if</code> <code>[[ </code><code>"$PERCENT"</code> <code>-lt </code><code>"$WARNING"</code> <code>]]</code>
<code>echo</code> <code>"OK - used_connections is : $used_connections"</code>
因为这里涉及到mysql数据库的权限,因此需要在mysql中添加naigos帐号,这一步操作命令如下:
<code>GRANT PROCESS, FILE, SUPER, REPLICATION CLIENT ON *.* TO </code><code>'nagios'</code><code>@</code><code>'localhost'</code> <code>IDENTIFIED BY </code><code>'nagiosadmin'</code><code>;</code>
<code>FLUSH PRIVILEGES;</code>
第二步:配置nrpe.cnf配置文件,定义获取数据的命令,以供nagios服务器端调用,配置如下:
<code>vim </code><code>/etc/nrpe</code><code>.cfg</code>
<code>command</code><code>[check_mysql_connections]=</code><code>/usr/lib64/nagios/plugins/check_mysql_connections</code> <code>-w 75 -c 85</code>
保存后,重新启动nrpe客户端,执行如下命令:
<code>killall nrpe</code>
<code>nrpe -c </code><code>/etc/nagios/nrpe</code><code>.cfg -d</code>
第三步:在命令配置文件中定义命令
<code>vi</code> <code>/etc/nagios/objects/commands</code><code>.cfg </code>
<code>define </code><code>command</code><code>{</code>
<code> </code><code>command_name check_mysql_connections</code>
<code> </code><code>command_line $USER1$</code><code>/check_mysql_connections</code> <code>-H $HOSTADDRESS$ -c $ARG1$</code>
<code> </code><code>}</code>
第四步:在nagios服务器端配置服务器调用该命令进行监控,配置如下:
<code>define service {</code>
<code>use generic-service</code>
<code>host_name www.sjf.com</code>
<code>service_description check_mysql_connections</code>
<code>check_period 24x7</code>
<code>notifications_enabled 1</code>
<code>max_check_attempts 3</code>
<code>normal_check_interval 3</code>
<code>retry_check_interval 2</code>
<code>contact_groups admins</code>
<code>notification_interval 10</code>
<code>notification_period 24x7</code>
<code>notification_options w,u,c,r</code>
<code>check_command check_mysql_connections</code>
<code>}</code>
最后检查配置问题以后,重新加载nagios的配置,具体操作命令如下:
<code>nagios -</code><code>v</code> <code>/etc/nagios/nagios</code><code>.cfg</code>
<code>systemctl restart nagios</code>
至此整个监控mysql连接数的流程就算添加完成了。其他的自定义监控也一样,拿脚本稍微改一改就能搞定了。
但是这里有个问题,每个版本的变量可能会发生改变,这点小伙伴们应该注意版本,希望对大家有所帮助!
本文转自 sjfbjs 51CTO博客,原文链接:http://blog.51cto.com/11886896/1874537