实战一:Zabbix监控Nginx服务
1、官网下载nginx包,并进行源码编译安装
1、在官网进行下载源码包,并解压。
官网地址: https://nginx.org/en/download.html,下载14版,16版暂时兼容性较差。
[root@nginx ~]# cd /usr/local/src # 切换到此目录下 [root@nginx src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz # 下载nginx源码包 [root@nginx src]# tar xvf nginx-1.14.2.tar.gz # 解压nginx源码包
2、创建nginx用户,并以nginx用户启动nginx服务
[root@nginx src]# useradd -r -s /sbin/nologin nginx
3、安装依赖的包
[root@centos17src]#yum install gcc pcre-devel openssl-devel zlib-devel -y
4、开始configure编译
[root@nginx nginx-1.14.2]#cd nginx-1.16.1/ ./configure --prefix=/apps/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-stream_realip_module
5、开始make && make install 编译。
[root@nginx nginx-1.14.2]# make -j 2 && make install
6、创建软链接
[root@nginx nginx-1.14.2]# ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx # 创建软链接(/usr/sbin/nginx) [root@nginx nginx-1.14.2]# nginx # 启动nginx
7、将nginx服务设置为开机启动
[root@centos17nginx-1.14.2]#vim /etc/rc.d/rc.local 写入到默认的本地启动服务位置 /usr/sbin/nginx 将nginx服务的路径写上 [root@centos17nginx-1.14.2]#chmod +x /etc/rc.d/rc.local # 加上执行权限
8、开始配置nginx服务的status状态页:vim /apps/nginx/conf/nginx.conf
location /nginx_status { # 访问网页的URL stub_status on; # 打开状态页 access_log off; #allow 127.0.0.1; #deny all; }
9、验证nginx服务配置文件是否正确
[root@nginx nginx-1.14.2]# nginx -t # 检查此时的nginx配置文件是否正确 nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
10、重新加载nginx服务,然后在网页上访问此时的nginx状态页
[root@nginx nginx-1.14.2]# nginx -s reload # 重新加载nginx服务
11、访问网页上的nginx状态页
以上网页显示的状态页含义:
Active connections: 当前处于活动状态的客户端连接数,包括连接等待空闲连接数。 accepts:统计总值,Nginx自启动后已经接受的客户端请求的总数。 handled:统计总值,Nginx自启动后已经处理完成的客户端请求的总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接。 requests:统计总值,Nginx自启动后客户端发来的总的请求数。 Reading:当前状态,正在读取客户端请求报文首部的连接的连接数。 Writing:当前状态,正在向客户端发送响应报文过程中的连接数。 Waiting:当前状态,正在等待客户端发出请求的空闲连接数,开启keep-alive的情况下,这个值等于active–(reading+writing)。
2、传递自定义的check_nginx.sh脚本,并配置zabbix-agent服务
(1)将自定义nginx脚本传递到此目录下:/etc/zabbix/zabbix_agentd.d/(在安装tomcat服务时,已经安装zabbix-agent包,详情请看https://www.cnblogs.com/struggle-1216/p/12307115.html)
[root@node2 zabbix_agentd.d]# cat check_nginx.sh #!/bin/bash # host=${2:-'127.0.0.1'} port=${3:-'80'} page=${4:-'nginx_status'} info=$(/usr/bin/curl --connect-timeout 5 -s http://${host}:${port}/${page} 2>/dev/null) code=$(/usr/bin/curl --connect-timeout 5 -o /dev/null -s -w %{http_code} http://${host}:${port}/${page}) proc=$(/usr/bin/pgrep nginx | wc -l) case "$1" in status) echo "$code $proc" | awk '{code=$1}{proc=$2}END{if(code == "200" && proc != 0){printf("%d\n",1)}else{printf("%d\n",0)}}' ;; active) echo "$info" | awk '/^Active/{var=$NF}END{if(var~/^[0-9]+$/){printf("%d\n",var)}else{printf("%d\n",0)}}' ;; reading) echo "$info" | awk '/Reading/ {print $2}' ;; writing) echo "$info" | awk '/Writing/ {print $4}' ;; waiting) echo "$info" | awk '/Waiting/ {print $6}' ;; accepts) echo "$info" | awk 'NR==3 {print $1}' ;; handled) echo "$info" | awk 'NR==3 {print $2}' ;; requests) echo "$info" | awk 'NR==3 {print $3}' ;; restimes) echo "$info" | awk 'BEGIN{OFMT="%.3f"} NR==3 {print $4/$3}' ;; *) echo "ZBX_NOTSUPPORTED" ;; esac
(2)加上执行权限
[root@node2 zabbix_agentd.d]# chmod +x check_nginx.sh
(3)在zabbix-server服务端查看是否可以执行
[root@node2 zabbix_agentd.d]# bash check_nginx.sh writing 1 [root@node2 zabbix_agentd.d]# bash check_nginx.sh status 1
(4)配置zabbix-agent文件: vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/check_nginx.sh $1 # 指定脚本的绝对路径
(5)重新启动zabbix-agent服务,并查看此时监听的端口、运行状态
[root@node2 zabbix_agentd.d]# systemctl restart zabbix-agent [root@node2 zabbix_agentd.d]# ss -nlt State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 511 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 50 [::]:15833 [::]:* LISTEN 0 50 [::]:12345 [::]:* LISTEN 0 100 [::1]:25 [::]:* LISTEN 0 50 [::]:16867 [::]:* LISTEN 0 1 [::ffff:127.0.0.1]:8005 [::]:* LISTEN 0 100 [::]:8009 [::]:* LISTEN 0 100 [::]:8080 [::]:* LISTEN 0 128 [::]:22 [::]:* [root@node2 zabbix_agentd.d]# ps -ef |grep zabbix zabbix 49615 1 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 49616 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 49617 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 49618 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 49619 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 49620 49615 0 22:06 ? 00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec] root 49630 43185 0 22:06 pts/1 00:00:00 grep --color=auto zabbix
3、在zabbix-server服务端进行测试zabbix-agent配置的脚本
(1)在zabbix-server服务端用zabbix_get命令查看结果,验证效果,此时返回数值说明正常
[root@zabbix ~]# zabbix_get -s 192.168.7.102 -p 10050 -k "nginx.status[writing]" 1 [root@zabbix ~]# zabbix_get -s 192.168.7.102 -p 10050 -k "nginx.status[status]" 1 [root@zabbix ~]# zabbix_get -s 192.168.7.102 -p 10050 -k "nginx.status[waiting]" 0
4、开始在zabbix网页上进行创建nginx监控模板
(1)自定义模板
(2)自定义模板名称
(3)点击刚才创建好的linux_nginx模板,然后点应用集,创建应用集
将创建的linux_nginx模板名称关联到nginx服务器的模板上(node2:192.168.7.102)
(4)创建监控项
对监控项进行命名,修改相关配置
(5)将创建好的监控项关联到上面的nginx服务器上(也就是node2服务器:192.168.7.102主机)
(6)点击刚才创建的linux_nginx模板,在监控其他指标时,就可以直接克隆,不需要再一个一个修改了,节约时间
(7)将上面的writing改为status即可,然后点击添加。
(8)再继续克隆,将writing改为active,以此类推,将剩下脚本里有的所有参数都克隆添加一下即可,这里只做测试,就只添加三个即可。
(9)创建图形
(10)将上面添加的监控项一一对应
(11)三个图形已经添加完,如下:
(12)此时检查监控创建的图形情况
在监控的过程中,如果我们遇到了Reading的值很大,怎么办呢?
答:(1)可以进行增加服务器(2)查看服务器的CPU、磁盘IO是否正常,其他资源是否正常,后端响应时间是否正常,理论上reading很大,writing也会越大,而实际的waiting值比较大,reading和writing小才是正常的现象
创建监控nginx的80端口
(1)在以上创建linux_nginx的基础上克隆一个新的监控项,用来监控nginx的80端口
(2)创建图形即可
(3)查看监控图形