您的位置:首页 > 运维架构 > Nginx

Zabbix快速部署及自定义Item监控Nginx状态原理

2016-09-05 12:23 866 查看
监控软件的选择1)Nagios 优点:监控协议多、完善的告警机制、服务抖动检测 缺点:只能在终端配置、基于文件的配置方式、不方便扩展、易读性差、管理耗时2)Cacti 优点:多样的图形化数据、历史数据存储、趋势对比 缺点:报警机制不完善、只支持集中式数据监控3)Zabbix
优点:集合了Nagios和Cacti大部分优点,功能强大;特别是在针对集群机器较多、业务环境复杂和跨机房监控方面有优势(proxy收集功能)
缺点:部署稍微复杂,不支持服务抖动检测等... Zabbix特点· 多种数据收集方式(SNMP、IPMI、JMX)(SERVER、PROXY、AGENTS)· 高级告警配置(自定义告警升级、告警信息支持使用宏macro变量、远程命令实现自动化动作)· 实时绘图(自定义创建多监控项视图、网络拓扑、自定义面板screen,并允许在dashboard页面显示)
· 历史数据存储(数据存储在数据库中,可配置、内置数据清理机制)· 多模板使用(模板中可以添加组监控、模板允许继承)· 网络自动发现(自动发现网络设备、自动agent注册)· ZabbixAPI接口(提供程序级别的访问接口、第三方程序可很快接入)
Zabbix进程构成
· zabbix_agentd(客户端守护进程,手机客户端数据,如cpu负载、内存、磁盘使用等...)
· zabbix_get(zabbix工具,单独使用,常用于在server或者proxy端执行,用户获取监控数据,通常用于排错)· zabbix_sender(用于向server端主动发送数据,常用于再执行耗时比较长的check时,导致zabbix超时,使用sender主动提交一次数据)
· zabbix_proxy(代理守护进程,数据中转站,最后还要将获取到的数据提交到server里,一般跨机房、地区的环境需要使用到proxy)· zabbix_java_gateway(监控java时候使用到代理网关,类似于agent,最后数据还要提交给server)
· zabbix_server(server端守护进程,server可以被动去搜集数据,也可以让客户端主动提交数据) Zabbix部署1)系统环境
[root@linux-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@linux-node1 ~]# uname -r
3.10.0-327.el7.x86_64
2)yum源配置
[root@linux-node1 ~]# rpm -ivh [root@linux-node1' target='_blank'>http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
3)软件安装
[root@linux-node1 ~]# yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb -y
4)修改PHP时区
[root@linux-node1 ~]# sed -i 's@# php_value date.timezone Europe/Riga@php_value date.timezone Asia/Shanghai@g' /etc/httpd/conf.d/zabbix.conf
5)数据库设置(Centos 7 下yum默认安装数据库变成了mariadb)
[root@linux-node1 ~]# systemctl start mariadb
mysql
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@'localhost' identified by '123456';
exit
cd /usr/share/doc/zabbix-server-mysql-3.0.3
zcat create.sql.gz |mysql -uzabbix -p123456 zabbix
6)zabbix_server配置文件
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost    #数据库所在主机
DBName=zabbix      #数据库名
DBUser=zabbix      #数据库用户
DBPassword=123456   #数据库密码
7)开启zabbix_server和http
systemctl start zabbix-server
systemctl start httpd
8)web配置导航,访问http://10.0.0.150/zabbix/



自定义监控项Item
以监控Nginx实时连接状态为例,在zabbix中添加对应的主机和监控项(也是大部分监控项实现的原理)server端:172.16.2.150agent端:172.16.2.151 (Nginx应用环境)1)安装agent客户端
[root@linux-node1 tools]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm [root@linux-node1 tools]# yum install -y zabbix-agent
2)Nginx编译中添加http_stub_status_module状态模块
[root@linux-node1 tools]# cd /usr/local/src/nginx-1.10.1/ #nginx安装源码文件夹
./configure --prefix=/usr/local/nginx-1.10.1 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module #编译参数
[root@linux-node1 nginx-1.10.1]# vim /application/nginx/conf/nginx.conf
location /nginx_status { #在server便签中添加location模块
stub_status on; #开启状态模块
access_log off;
allow 172.16.2.0/24;
allow 10.0.0.0/24;
deny all;
}
[root@linux-node1 nginx]# /application/nginx/sbin/nginx -s reload
web查看nginx状态

Active connetction:nginx #正在处理的连接数
server: #表示Nginx共计处理了多少个链接
accepts: #成功创建了多少次握手   (请求丢失数 = 握手数 - 链接数)
handled request: #共计处理了多少请求
reading:Nginx  #读取到客户端的Header信息数
writing:Nginx  #返回给客户端的Header信息数
waiting: #已经处理完,正在等待下一次请求连接
3)agent端添加用户自定义参数
[root@linux-node1 nginx]# curl -s http://10.0.0.150/nginx-status|awk 'NR==1{print $NF}'
2 #测试curl命令能够成功返回活动连接数
[root@linux-node1 nginx]# vim /etc/zabbix/zabbix_agentd.conf #编辑agent配置文件
Server=172.16.2.150 #zabbix_server地址
Include=/etc/zabbix/zabbix_agentd.d/ #配置此文件夹为agent配置文件存放位置
[root@linux-node1 zabbix]# mkdir /etc/zabbix/zabbix_agentd.d #创建出上面的文件夹
[root@linux-node1 zabbix]# vim /etc/zabbix/zabbix_agentd.d/nginx.conf #创建自定义的监控项文件
UserParameter=nginx.active, /usr/bin/curl -s "http://10.0.0.150/nginx-status"|awk 'NR==1{print $NF}'
#nginx.active key值,为zabbix识别监控项的唯一标识,可以随意取名(a-Z0-9_)
#逗号后面是取值得具体命令,当zabbix_server过来询问agent的nginx.active这个key值时,agent会执行这个命令并且将得到的数字返回给zabbix_server
[root@linux-node1 zabbix]# systemctl restart zabbix-agent #重启agent服务
4)在server端测试添加的自定义参数
[root@linux-node1 zabbix]# yum install -y zabbix-get #安装zabbix-get工具
[root@linux-node1 zabbix]# zabbix_get -s 172.16.2.150 -p 10050 -k "nginx.active"
2 #成功返回参数
5)在zabbix web界面中添加主机



6)创建监控项






7)创建图形





过一段时间,就能看到我们添加的自定义项的数据和图形了。 多监控项制作模板上图中,多出来的三项监控也是同样的原理添加进来的:
[root@linux-node1 nginx-1.10.1]# cd /etc/zabbix/zabbix_agentd.d/
[root@linux-node1 zabbix_agentd.d]# ll
total 40
-rw-r--r-- 1 root root    96 Aug 31 16:30 linux.conf
-rw-r--r-- 1 root root   102 Aug 31 17:08 nginx.conf
-rw-r--r-- 1 root root  1531 Jul 24 15:05 userparameter_mysql.conf
-rw-r--r-- 1 root root 18866 Sep  1 01:56 userparameter_percona_mysql.conf
-rwxr-xr-x 1 root root  2803 Aug 31 20:09 zabbix_linux_plugin.sh
-rwxr-xr-x 1 root root  2776 Aug 31 17:15 zabbix_linux_plugin.sh.ori
[root@linux-node1 zabbix_agentd.d]# cat linux.conf
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "$2" "$3"
#其中key值用[*]表示接受任意参数,调用zabbix_linux_plugin.sh这个脚本 $1\$2\$3为具体参数
[root@linux-node1 zabbix_agentd.d]# cat zabbix_linux_plugin.sh #脚本
nginx_status_fun(){
NGINX_PORT=$1
NGINX_COMMAND=$2
nginx_active(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
nginx_reading(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
nginx_writing(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
nginx_waiting(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
nginx_accepts(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
}
nginx_handled(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
}
nginx_requests(){
/usr/bin/curl "http://172.16.2.150:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
}
case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1" "$2" "$3"
main(){
case $1 in
tcp_status)
tcp_status_fun $2;
;;
nginx_status)
nginx_status_fun $2 $3;
;;
memcached_status)
memcached_status_fun $2 $3;
;;
redis_status)
redis_status_fun $2 $3;
;;
*)
echo $"Usage: $0 {tcp_status key|memcached_status key|redis_status key|nginx_status key}"
esac
}
main $1 $2 $3
然后在zabbix添加一个模板,模板中添加这几个监控项,以后新加主机直接添加模板就可以自动加自定义监控项了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  自定义 选择 item