Nagios监控nginx服务具体过程

1在nginx 服务器上安装nrpe客户端:

Nginx的服务须要监控起来。不然万一down了而不及时修复,会影响web应用。例如以下web应用上面启动的nginx后台进程
[[email protected] ~]# ps aux|grep nginx
nobody   15294  0.0  0.0  22432  3464 ?        S    Jul03   0:05 nginx: worker process      
nobody   15295  0.0  0.0  22432  3480 ?        S    Jul03   0:05 nginx: worker process      
......      
nobody   15316  0.0  0.0  22432  3468 ?

S    Jul03   0:05 nginx: worker process      
nobody   15317  0.0  0.0  22432  3480 ?        S    Jul03   0:05 nginx: worker process      
root     16260  0.0  0.0  20584  1684 ?        Ss   Jun18   0:00 nginx: master process /usr/local/nginx/sbin/nginx
root     21211  0.0  0.0 103252   860 pts/1    S+   17:50   0:00 grep nginx

1.1,rpm方式安装nrpe客户端

下载地址:http://download.csdn.net/detail/mchdba/7493875

[[email protected] nagios]# ll

总计 768

-rw-r--r-- 1 root root 713389 12-16 12:08 nagios-plugins-1.4.11-1.x86_64.rpm

-rw-r--r-- 1 root root  32706 12-16 12:09 nrpe-2.12-1.x86_64.rpm

-rw-r--r-- 1 root root  18997 12-16 12:08 nrpe-plugin-2.12-1.x86_64.rpm

[[email protected] nagios]# rpm -ivh *.rpm --nodeps  --force

1.2 在配置文件最末尾,加入配置信息以及监控主机服务器ip地址

[[email protected] localhost nagios]# vim /etc/nagios/nrpe.cfg

# add by tim on 2014-06-11

command[check_users]=/usr/local/nagios/libexec/check_users -w 8 -c 15

command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20

command[check_sda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/sda

command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z

#command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 50 -c 80

command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 750 -c 800

command[check-host-alive]=/usr/local/nagios/libexec/check_ping -H 10.xx.3.29 -w 3000.0,80% -c 5000.0,100% -p 5

allowed_hosts = 127.0.0.1,10.xx.3.41

check下命令是否生效:

[[email protected] nrpe-2.15]# /usr/local/nagios/libexec/check_users -w 8 -c 15

USERS OK - 2 users currently logged in |users=2;8;15;0

[[email protected] nrpe-2.15]#

看到已经USERS OK -….命令已经生效。

1.3 启动nrpe报错例如以下:

[[email protected] ~]# service nrpe restart

Shutting down nrpe:                                        [失败]

Starting nrpe: /usr/sbin/nrpe: error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directory

[失败]

[[email protected] ~]#

[[email protected] nagios_client]# service nrpe start

Starting nrpe: /usr/sbin/nrpe: error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directory

[失败]

[[email protected] nagios_client]#

建立连接

[[email protected] nagios_client]# ln -s /usr/lib64/libssl.so /usr/lib64/libssl.so.6

(假设没有libssl.so,就採用别的libssl.so.10来做软连接,ln -s /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.6)

[[email protected] nagios_client]#

再又一次启动例如以下:

[[email protected] nagios_client]# service nrpe start

Starting nrpe: /usr/sbin/nrpe: error while loading shared libraries: libcrypto.so.6: cannot open shared object file: No such file or directory

[失败]

[[email protected] ~]# ll /usr/lib64/libcrypto.so

lrwxrwxrwx. 1 root root 18 10月 13 2013 /usr/lib64/libcrypto.so -> libcrypto.so.1.0.0

[[email protected] nagios_client]#

再建链接:
[[email protected] nagios_client]# ln -s /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.6

(或者假设没有libcrypto.so,就採用libcrypto.so.10做软连接, ln -s /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.6)

[[email protected] nagios_client]# service nrpe start

Starting nrpe:                                             [确定]

[[email protected] nagios_client]#

1.4 检測下nrpe是否正常执行:

去nagios服务器端check下

[[email protected] ~]#  /usr/local/nagios/libexec/check_nrpe -H 10.xx.3.xx

NRPE v2.12

[[email protected] ~]#

看到返回NRPE v2.15表示已经连接成功,客户端的nrpe服务已经监控完毕。

2,比較简单的通过check_http的方式监控

能够在/etc/nagios/nrpe.cfg里面採用check_http的方式来获取nginx是否执行:

(1)     编辑nrpe.cfg

Vim /etc/nagios/nrpe.cfg

command[check_nginx_status]=/usr/lib/nagios/plugins/check_http -I localhost -p 80 -u /nginx_status -e 200 -w 3 -c 10

(2)     重新启动nrpe服务

[[email protected] ~]# service nrpe restart

Shutting down nrpe:                                        [确定]

Starting nrpe:                                             [确定]

[[email protected] ~]#

(3)     在nagios服务器端check。成功。

[[email protected] ~]# /usr/local/nagios/libexec/check_nrpe -H10.xx.1.22 -c check_nginx_status

HTTP OK HTTP/1.1 200 OK - 254 bytes in 0.002 seconds |time=0.002031s;3.000000;10.000000;0.000000 size=254B;;;0

(4)     在services.cfg里面加入check_nginx_status服务

define service{

host_name               lb-net-2

service_description     check_nginx_status

check_command           check_nrpe!check_nginx_status

max_check_attempts      5

normal_check_interval   3

retry_check_interval    2

check_period            24x7

notification_interval   10

notification_period     24x7

notification_options    w,u,c,r

contact_groups          opsweb

}

(5)     在command.cfg加入check_nginx_status服务

define command{

command_name    check_nginx_status

command_line    $USER1$/check_nginx_status -I $HOSTADDRESS$ -w $Warning$ -c $Cri$

}

(6)     又一次载入nagios

[[email protected] objects]# service nagios reload

Running configuration check...

Reloading nagios configuration...

done

[[email protected] objects]#

(7)     查看界面的nginx监控服务。例如以下所看到的:

3 编写脚本来监控nginx服务

3.1 调试具体经过

[[email protected] run]# find / -name nginx.pid

/usr/local/nginx/logs/nginx.pid

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -n /usr/local/nginx/logs/nginx.pid -s nginx_status -o /tmp/ -w 1500 -c 2000

expr: 參数数目错误

expr: 语法错误

(standard_in) 1: syntax error

/usr/lib/nagios/plugins/check_nginxstatus: line 258: [: : integer expression expected

/usr/lib/nagios/plugins/check_nginxstatus: line 262: [: : integer expression expected

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

去查看262行。将逻辑运算符  "-a" 改成 "&&"

[[email protected] run]# vim /usr/lib/nagios/plugins/check_nginxstatus

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -n /usr/local/nginx/logs/nginx.pid -s nginx_status -o /tmp/ -w 1500 -c 2000

expr: 參数数目错误

expr: 语法错误

(standard_in) 1: syntax error

/usr/lib/nagios/plugins/check_nginxstatus: line 258: [: missing `]‘

/usr/lib/nagios/plugins/check_nginxstatus: line 262: [: : integer expression expected

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

[[email protected] run]#

看到已经OK了。再改动文件。

[[email protected] run]# vim /usr/lib/nagios/plugins/check_nginxstatus

[[email protected] run]#

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -n /usr/local/nginx/logs/nginx.pid -s nginx_status -o /tmp/ -w 1500 -c 2000

expr: 參数数目错误

expr: 语法错误

(standard_in) 1: syntax error

/usr/lib/nagios/plugins/check_nginxstatus: line 258: [: missing `]‘

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

[[email protected] run]#

将[]改成使用"[[]]"。 就可以!

[[email protected] run]# vim /usr/lib/nagios/plugins/check_nginxstatus

[[email protected] run]#

[[email protected] run]#

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -n /usr/local/nginx/logs/nginx.pid -s nginx_status -o /tmp/ -w 1500 -c 2000

expr: 參数数目错误

expr: 语法错误

(standard_in) 1: syntax error

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

[[email protected] run]#

凝视掉#reqpcon=`echo "scale=2; $reqpsec / $conpsec" | bc -l`之后。就不会报(standard_in) 1: syntax error错误,例如以下所看到的:

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -s nginx_status -n nginx.pid -w 15000 -c 20000

expr: 參数数目错误

expr: 语法错误

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

[[email protected] run]#

凝视掉# reqpsec=`expr $tmp2_reqpsec - $tmp1_reqpsec` 就不会再报 expr: 參数数目错误,例如以下所看到的:

报错:

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -s nginx_status -n nginx.pid -w 15000 -c 20000

expr: 语法错误

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

再次凝视掉 #reqpcon=`echo "scale=2; $reqpsec / $conpsec" | bc -l` 后。执行不会报expr: 语法错误。例如以下所看到的:

[[email protected] run]# /usr/lib/nagios/plugins/check_nginxstatus -H localhost -P 80 -p /usr/local/nginx/logs/ -s nginx_status -n nginx.pid -w 15000 -c 20000

OK - nginx is running.  requests per second,  connections per second ( requests per connection) | ‘reqpsec‘= ‘conpsec‘= ‘conpreq‘= ]

[[email protected] run]#

看到这里发现‘reqpsec‘= ‘conpsec‘= ‘conpreq‘=都没有值,可是nginx又是在启动执行着,问题出在哪里?经过排查,原来是nginx_status服务没有启动。须要在/usr/local/nginx/conf/nginx.conf配置文件中面加入例如以下配置:

# 加入pid參数

pid        logs/nginx.pid;

#charset koi8-r;

access_log  logs/host.access.log  main;

location /nginx_status {

stub_status on;

access_log   off;

deny all;

}

然后又一次载入nginx,看到新的nginx-status文件是生成了。可是文件内容为空,例如以下所看到的:

[[email protected] logs]# ll /tmp/nginx*

-rw-r--r--. 1 root root 0 7月   3 15:06 /tmp/nginx-status.1

[[email protected] logs]#

去查看ngins后台日志

[[email protected] logs]# cd /usr/local/nginx/

[[email protected] logs]# tail -n 300 error.log

……

2014/07/03 15:05:47 [error] 4285#0: *1851293 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /nginx_status HTTP/1.0", host: "localhost"

2014/07/03 15:05:48 [error] 4285#0: *1851294 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /nginx_status HTTP/1.0", host: "localhost"

2014/07/03 15:06:12 [error] 4282#0: *1851362 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /nginx_status HTTP/1.0", host: "localhost"

2014/07/03 15:06:13 [error] 4282#0: *1851363 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /nginx_status HTTP/1.0", host: "localhost"

2014/07/03 15:06:55 [error] 4285#0: *1851509 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /nginx_status HTTP/1.0", host: "localhost"

2014/07/03 15:06:56 [error] 4285#0: *1851519 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /nginx_status HTTP/1.0", host: "localhost"

查看nginx编译參数

[[email protected] logs]# /usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.4.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)

configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_realip_module

证明白实是载入了stub_status插件,之后去改动配置文件。凝视掉deny all;又一次载入nginx。

[[email protected] logs]# vim /usr/local/nginx/conf/nginx.conf

#deny all;

[[email protected] logs]# service nginx reload

reload nginx

[[email protected] logs]#

[[email protected] logs]# ll /tmp/nginx*

ls: 无法訪问/tmp/nginx*: 没有那个文件或文件夹

[[email protected] logs]#

还是没有看到/tmp/nginx-status.1状态文件生成。因为nagios下监控nginx的脚本是从nginx-status.1获取数据,假设没有这个文件,没有办法获取数据。

继续google,”nginx stub_status没有生成nginx-status.1”文件。看到有人说仅仅要配置好了这个状态文件有没有无所谓,我就试着直接执行脚本看看是否能生效。

[[email protected] logs]# ll /tmp/nginx*

ls: 无法訪问/tmp/nginx*: 没有那个文件或文件夹

[[email protected] logs]# /root/check_nginx2.sh  -H localhost -P 80 -p /usr/local/nginx/logs/ -n nginx.pid -s nginx_status -w 15000 -c 20000

OK - nginx is running. 1 requests per second, 2 connections per second (.50 requests per connection) | ‘reqpsec‘=1 ‘conpsec‘=2 ‘conpreq‘=.50 ]

[[email protected] logs]#

看到‘reqpsec‘=1 ‘conpsec‘=2 ‘conpreq‘=.50里面有数据了,再去check下文件有没有生成,例如以下所看到的:

[[email protected] logs]# ll /tmp/nginx*

ls: 无法訪问/tmp/nginx*: 没有那个文件或文件夹

[[email protected] logs]#

还是没有文件生成,可是check已经有数据了,证明不一定要拘泥于是否在/tmp/文件夹下是否有nginx-status.1文件。

通过脚本分析例如以下:

[[email protected] logs]# vim /usr/lib/nagios/plugins/check_nginxstatus

180 get_status() {

181     if [ "$secure" = 1 ]

182     then

183         wget_opts="-O- -q -t 3 -T 3 --no-check-certificate"

184         out1=`wget ${wget_opts} http://${hostname}:${port}/${status_page}`

185         sleep 1

186         out2=`wget ${wget_opts} http://${hostname}:${port}/${status_page}`

187     else

188         wget_opts="-O- -q -t 3 -T 3"

189         out1=`wget ${wget_opts} http://${hostname}:${port}/${status_page}`

190         sleep 1

191         out2=`wget ${wget_opts} http://${hostname}:${port}/${status_page}`

192     fi

193

194     if [ -z "$out1" -o -z "$out2" ]

195     then

196         echo "UNKNOWN - Local copy/copies of $status_page is empty."

197         exit $ST_UK

198     fi

199 }

是通过訪问`wget -O- -q -t 3 -T 3 --no-check-certificate http://10.xx.xx.xx:80/nginx_status`这个链接来获取status的数据记录的,而不是去载入/tmp/nginx-status.1文件来获取数据的。

直接訪问 http://10.xx.xx.xx:80/nginx_status 地址就能获取nginx执行数据,例如以下图所看到的:

在nagios服务器上check下。报错:

[[email protected] ~]# /usr/local/nagios/libexec/check_nrpe -H10.xx.xx.xx -c check_nginx_status

UNKNOWN - Local copy/copies of nginx_status is empty.

[[email protected] ~]#

检查监控脚本,搜索 ‘Local copy/copies of nginx_status is empty.’在第197行,有例如以下代码:

195     if [ -z "$out1" -o -z "$out2" ]

196     then

197         echo "UNKNOWN - Local copy/copies of $status_page is empty."

198         exit $ST_UK

199     fi

看出是因为if [ -z "$out1" -o -z "$out2" ]这个推断生效。导致监控脚本执行到这里就exit了。继续调试。发现用nagios服务器调用脚本的时候。执行到下面第190行到第192行

out1=`/usr/bin/wget ${wget_opts} http://${hostname}:${port}/${status_page}`

sleep 1

out2=`/usr/bin/wget ${wget_opts} http://${hostname}:${port}/${status_page}`

的时候。out1为空,out2也为空,所以在后面的if [ -z "$out1" -o -z "$out2" ]推断通过报出信息为:UNKNOWN - Local copy/copies of $status_page is empty. 然后直接exit。

说明:因为nginx是要调用wget命令来获取nginx_status状态的,而wget命令是仅仅能以root用户来执行的, 所以须要将nagios用户设置成能够无需password直接su成root,这样就能以nagios用户执行命令sudo /usr/lib/nagios/plugins/check_nginxstatus 。在centos系统中。无法直接调用sudo命令,须要改动/etc/sudoers, 找到 #Defaults requiretty 并取消凝视,另外新增一行。表示nagios用户不须要登陆终端就能够调用命令。例如以下所看到的:

Defaults    requiretty

Defaults:nagios    !requiretty

#加入nagios 请求sudo,同意特定指令时(可跟參数),不须要password(如)。

nagios ALL=(ALL) NOPASSWD: ALL

改动完后。再check,数据出来了:

[[email protected] ~]# /usr/local/nagios/libexec/check_nrpe -H10.xx.xx.xx -c check_nginx_status

OK - nginx is running. 1 requests per second, 1 connections per second (1.00 requests per connection) | ‘reqpsec‘=1 ‘conpsec‘=1 ‘conpreq‘=1.00 ]

[[email protected] ~]#

3.2  share下check_nginxstatus脚本

  1. #!/bin/sh
  2. PROGNAME=`basename $0`
  3. VERSION=\\\"Version 1.1,\\\"
  4. AUTHOR=\\\"tim man\\\"
  5. ST_OK=0
  6. ST_WR=1
  7. ST_CR=2
  8. ST_UK=3
  9. hostname=\\\"localhost\\\"
  10. port=80
  11. path_pid=/var/run
  12. name_pid=\\\"nginx.pid\\\"
  13. status_page=\\\"nginx_status\\\"
  14. pid_check=1
  15. secure=0
  16. print_version() {
  17. echo \\\"$VERSION $AUTHOR\\\"
  18. }
  19. print_help() {
  20. print_version $PROGNAME $VERSION
  21. echo \\\"\\\"
  22. echo \\\"$PROGNAME is a Nagios plugin to check whether nginx is running.\\\"
  23. echo \\\"It also parses the nginx\\\‘s status page to get requests and\\\"
  24. echo \\\"connections per second as well as requests per connection. You\\\"
  25. echo \\\"may have to alter your nginx configuration so that the plugin\\\"
  26. echo \\\"can access the server\\\‘s status page.\\\"
  27. echo \\\"The plugin is highly configurable for this reason. See below for\\\"
  28. echo \\\"available options.\\\"
  29. echo \\\"\\\"
  30. echo \\\"$PROGNAME -H localhost -P 80 -p /var/run -n nginx.pid \\\"
  31. echo \\\" -s nginx_statut -o /tmp [-w INT] [-c INT] [-S] [-N]\\\"
  32. echo \\\"\\\"
  33. echo \\\"Options:\\\"
  34. echo \\\" -H/--hostname)\\\"
  35. echo \\\" Defines the hostname. Default is: localhost\\\"
  36. echo \\\" -P/--port)\\\"
  37. echo \\\" Defines the port. Default is: 80\\\"
  38. echo \\\" -p/--path-pid)\\\"
  39. echo \\\" Path where nginx\\\‘s pid file is being stored. You might need\\\"
  40. echo \\\" to alter this path according to your distribution. Default\\\"
  41. echo \\\" is: /var/run\\\"
  42. echo \\\" -n/--name_pid)\\\"
  43. echo \\\" Name of the pid file. Default is: nginx.pid\\\"
  44. echo \\\" -N/--no-pid-check)\\\"
  45. echo \\\" Turn this on, if you don\\\‘t want to check for a pid file\\\"
  46. echo \\\" whether nginx is running, e.g. when you\\\‘re checking a\\\"
  47. echo \\\" remote server. Default is: off\\\"
  48. echo \\\" -s/--status-page)\\\"
  49. echo \\\" Name of the server\\\‘s status page defined in the location\\\"
  50. echo \\\" directive of your nginx configuration. Default is:\\\"
  51. echo \\\" nginx_status\\\"
  52. echo \\\" -S/--secure)\\\"
  53. echo \\\" In case your server is only reachable via SSL, use this\\\"
  54. echo \\\" this switch to use HTTPS instead of HTTP. Default is: off\\\"
  55. echo \\\" -w/--warning)\\\"
  56. echo \\\" Sets a warning level for requests per second. Default is: off\\\"
  57. echo \\\" -c/--critical)\\\"
  58. echo \\\" Sets a critical level for requests per second. Default is:\\\"
  59. echo \\\" off\\\"
  60. exit $ST_UK
  61. }
  62. while test -n \\\"$1\\\"; do
  63. case \\\"$1\\\" in
  64. -help|-h)
  65. print_help
  66. exit $ST_UK
  67. ;;
  68. --version|-v)
  69. print_version $PROGNAME $VERSION
  70. exit $ST_UK
  71. ;;
  72. --hostname|-H)
  73. hostname=$2
  74. shift
  75. ;;
  76. --port|-P)
  77. port=$2
  78. shift
  79. ;;
  80. --path-pid|-p)
  81. path_pid=$2
  82. shift
  83. ;;
  84. --name-pid|-n)
  85. name_pid=$2
  86. shift
  87. ;;
  88. --no-pid-check|-N)
  89. pid_check=0
  90. ;;
  91. --status-page|-s)
  92. status_page=$2
  93. shift
  94. ;;
  95. --secure|-S)
  96. secure=1
  97. ;;
  98. --warning|-w)
  99. warning=$2
  100. shift
  101. ;;
  102. --critical|-c)
  103. critical=$2
  104. shift
  105. ;;
  106. *)
  107. echo \\\"Unknown argument: $1\\\"
  108. print_help
  109. exit $ST_UK
  110. ;;
  111. esac
  112. shift
  113. done
  114. get_wcdiff() {
  115. if [ ! -z \\\"$warning\\\" -a ! -z \\\"$critical\\\" ]
  116. then
  117. wclvls=1
  118. if [ ${warning} -ge ${critical} ]
  119. then
  120. wcdiff=1
  121. fi
  122. elif [ ! -z \\\"$warning\\\" -a -z \\\"$critical\\\" ]
  123. then
  124. wcdiff=2
  125. elif [ -z \\\"$warning\\\" -a ! -z \\\"$critical\\\" ]
  126. then
  127. wcdiff=3
  128. fi
  129. }
  130. val_wcdiff() {
  131. if [ \\\"$wcdiff\\\" = 1 ]
  132. then
  133. echo \\\"Please adjust your warning/critical thresholds. The warning \\\\
  134. must be lower than the critical level!\\\"
  135. exit $ST_UK
  136. elif [ \\\"$wcdiff\\\" = 2 ]
  137. then
  138. echo \\\"Please also set a critical value when you want to use \\\\
  139. warning/critical thresholds!\\\"
  140. exit $ST_UK
  141. elif [ \\\"$wcdiff\\\" = 3 ]
  142. then
  143. echo \\\"Please also set a warning value when you want to use \\\\
  144. warning/critical thresholds!\\\"
  145. exit $ST_UK
  146. fi
  147. }
  148. check_pid() {
  149. if [ -f \\\"$path_pid/$name_pid\\\" ]
  150. then
  151. retval=0
  152. else
  153. retval=1
  154. fi
  155. }
  156. get_status() {
  157. if [ \\\"$secure\\\" = 1 ]
  158. then
  159. wget_opts=\\\"-O- -q -t 3 -T 3 --no-check-certificate\\\"
  160. #out1=`/usr/bin/wget ${wget_opts} http://${hostname}:${port}/${status_page}`
  161. out1=`/usr/bin/wget -O- -q -t 3 -T 3 http://localhost:80/nginx_status`
  162. sleep 1
  163. out2=`/usr/bin/wget -O- -q -t 3 -T 3 http://localhost:80/nginx_status`
  164. else
  165. wget_opts=\\\"-O- -q -t 3 -T 3\\\"
  166. out1=`/usr/bin/wget -O- -q -t 3 -T 3 http://localhost:80/nginx_status`
  167. sleep 1
  168. out2=`/usr/bin/wget -O- -q -t 3 -T 3 http://localhost:80/nginx_status`
  169. fi
  170. if [ -z \\\"$out1\\\" -o -z \\\"$out2\\\" ]
  171. then
  172. echo \\\"out1:$out1 out2:$out2, UNKNOWN - Local copy/copies of $status_page is empty.\\\"
  173. exit $ST_UK
  174. fi
  175. }
  176. get_vals() {
  177. tmp1_reqpsec=`echo ${out1}|awk \\\‘{print $10}\\\‘`
  178. tmp2_reqpsec=`echo ${out2}|awk \\\‘{print $10}\\\‘`
  179. reqpsec=`expr $tmp2_reqpsec - $tmp1_reqpsec`
  180. tmp1_conpsec=`echo ${out1}|awk \\\‘{print $9}\\\‘`
  181. tmp2_conpsec=`echo ${out2}|awk \\\‘{print $9}\\\‘`
  182. conpsec=`expr $tmp2_conpsec - $tmp1_conpsec`
  183. reqpcon=`echo \\\"scale=2; $reqpsec / $conpsec\\\" | bc -l`
  184. if [ \\\"$reqpcon\\\" = \\\".99\\\" ]
  185. then
  186. reqpcon=\\\"1.00\\\"
  187. fi
  188. }
  189. do_output() {
  190. output=\\\"nginx is running. $reqpsec requests per second, $conpsec connections per second ($reqpcon requests per connection)\\\"
  191. }
  192. do_perfdata() {
  193. perfdata=\\\"\\\‘reqpsec\\\‘=$reqpsec \\\‘conpsec\\\‘=$conpsec \\\‘conpreq\\\‘=$reqpcon\\\"
  194. }
  195. # Here we
  196. get_wcdiff
  197. val_wcdiff
  198. if [ ${pid_check} = 1 ]
  199. then
  200. check_pid
  201. if [ \\\"$retval\\\" = 1 ]
  202. then
  203. echo \\\"There\\\‘s no pid file for nginx. Is nginx running? Please also make sure whether your pid path and name is correct.\\\"
  204. exit $ST_CR
  205. fi
  206. fi
  207. get_status
  208. get_vals
  209. do_output
  210. do_perfdata
  211. if [[ -n \\\"$warning\\\" ]] && [[ -n \\\"$critical\\\" ]]
  212. then
  213. if [[ \\\"$reqpsec\\\" -ge \\\"$warning\\\" ]] && [[ \\\"$reqpsec\\\" -lt \\\"$critical\\\" ]]
  214. then
  215. echo \\\"WARNING - ${output} | ${perfdata}\\\"
  216. exit $ST_WR
  217. elif [ \\\"$reqpsec\\\" -ge \\\"$critical\\\" ]
  218. then
  219. echo \\\"CRITICAL - ${output} | ${perfdata}\\\"
  220. exit $ST_CR
  221. else
  222. echo \\\"OK - ${output} | ${perfdata} ]\\\"
  223. exit $ST_OK
  224. fi
  225. else
  226. echo \\\"OK - ${output} | ${perfdata}\\\"
  227. exit $ST_OK
  228. fi
时间: 06-24

Nagios监控nginx服务具体过程的相关文章

Nagios监控nginx服务详细过程

1在nginx 服务器上安装nrpe客户端: Nginx的服务需要监控起来,不然万一down了而不及时修复,会影响web应用,如下web应用上面启动的nginx后台进程[[email protected] ~]# ps aux|grep nginxnobody   15294  0.0  0.0  22432  3464 ?        S    Jul03   0:05 nginx: worker process      nobody   15295  0.0  0.0  22432  3

Nagios监控Memcached服务

说到Memcached服务,其实作为运维人员用的还是很多的: 1.在做LB的时候,为了保证同一台机器的请求的session信息防止丢失,我们用Memcached对session做分布式存储. 2.做mysql缓存的时候,我们常常吧mysql查询的结果缓存到Memcached中,这样能够较少php程序与mysql的交互,也能大大减轻数据库的压力. 从以上来看,Memcached其实也是蛮重要的,那么我们更有必要对其进行时刻的监控,接下来引入正题 Nagios监控Memcached服务是否正常运行.

Python 监控nginx服务是否正常

Python 监控nginx服务是否正常 #!/usr/bin/env python import os, sys, time from time import strftime while True: try: ret = os.popen('ps -C nginx -o pid,cmd').readlines() if len(ret) <2: os.system("service nginx start") sys.exit(0) except Exception,ex:

zabbix3.0.4监控nginx服务

Zabbix3.0.4添加对Nginx服务的监控 一. 通过Nginx的http_stub_status_module模块提供的状态信息来监控,所以在Agent端需要配置Nginx状态获取的脚本,和添加key信息等,然后在Server端配置Nginx的监控模板等.请根据自己情况调整,这里只做简单的参照. 主要是使用Github这个项目的代码 zabbix-templates 检查Nginx是否安装了 http_stub_status_module 模块,通过下面的命令可以看到编译参数. 如没有h

Zabbix监控nginx服务进程状态

zabbix监控nginx需要开启nginx status,要确认nginx编译http_sub_module模块! 1.检查当前nginx是否安装配置http_sub_module模块 # nginx -V Tengine version: Tengine/1.5.2 (nginx/1.2.9) built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) TLS SNI support enabled configure arguments: --p

python——nagios监控nginx日志 request_time

遇到问题:nginx日志包含非常重要的信息.比如upstream_response_time 和request_time.现需求监控改值. 解决问题:编写python脚本,通过nagios check_nrpe 插件完成监控. 前提了解: nginx日志格式: log_format  main  '$remote_addr |$time_local| $request | $status | $body_byte s_sent | $http_referer | $http_user_agent

nagios 监控 nginx

开启防火墙161端口 252.10760.195.252.110 iptables -I INPUT -p udp -s 60.195.252.107 –dport 161 -j ACCEPT iptables -I INPUT -p udp -s 60.195.252.110 –dport 161 -j ACCEPT 2012-03-21 23:07:38|  分类: 监控 |举报|字号 订阅 1.在被控端执行操作:把check_nginx插件放进/usr/local/nagios/libex

nagios监控服务

   nagios监控系统 1: ngios工作原理 1.Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来. Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态.安装完成后,在nagios主目录下的/libe

python根据nagios配置文件将监控的服务联系人等信息导出到excel表格

前阵子,遇到需要把nagios监控的服务统计到表格的需求,想着如果每一次改动,都要去维护表格的话,难免会有疏漏或者问题,于是观察了nagios的host.cfg,services.cfg等配置文件写了一个脚本,包含对多个主机关联到同一个服务的处理等,脚本也有局限性,就是需要把每个主机,都归类到某个组,比如Linux主机归类到Linux组,实际环境,一般也是有这样做归类的,脚本运行过程中会有文件产生,但都很小,以下是相应模块安装和脚本文件,建议在测试机上面跑完再到实际环境跑. 一,安装xlsxwr