天天看点

nagios通过脚本对系统进行定制监控

 这里为了简单演示在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>&lt;&lt;&lt; </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>&amp;&amp; </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