Zabbix快速部署及自定义Item监控Nginx状态原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zabbix快速部署及自定义Item监控Nginx状态原理相关的知识,希望对你有一定的参考价值。
监控软件的选择
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)系统环境
[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected] ~]# uname -r 3.10.0-327.el7.x86_64
2)yum源配置
[[email protected] ~]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
3)软件安装
[[email protected] ~]# yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb -y
4)修改php时区
[[email protected] ~]# sed -i ‘[email protected]# php_value date.timezone Europe/[email protected]_value date.timezone Asia/[email protected]‘ /etc/httpd/conf.d/zabbix.conf
5)数据库设置(Centos 7 下yum默认安装数据库变成了mariadb)
[[email protected] ~]# systemctl start mariadb mysql create database zabbix character set utf8 collate utf8_bin; grant all on zabbix.* to [email protected]‘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配置文件
[[email protected] ~]# 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.150
agent端:172.16.2.151 (Nginx应用环境)
1)安装agent客户端
[[email protected] tools]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm [[email protected] tools]# yum install -y zabbix-agent
2)Nginx编译中添加http_stub_status_module状态模块
[[email protected] 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 #编译参数 [[email protected] 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; } [[email protected] 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端添加用户自定义参数
[[email protected] nginx]# curl -s http://10.0.0.150/nginx-status|awk ‘NR==1{print $NF}‘ 2 #测试curl命令能够成功返回活动连接数 [[email protected] nginx]# vim /etc/zabbix/zabbix_agentd.conf #编辑agent配置文件 Server=172.16.2.150 #zabbix_server地址 Include=/etc/zabbix/zabbix_agentd.d/ #配置此文件夹为agent配置文件存放位置 [[email protected] zabbix]# mkdir /etc/zabbix/zabbix_agentd.d #创建出上面的文件夹 [[email protected] 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 [[email protected] zabbix]# systemctl restart zabbix-agent #重启agent服务
4)在server端测试添加的自定义参数
[[email protected] zabbix]# yum install -y zabbix-get #安装zabbix-get工具 [[email protected] zabbix]# zabbix_get -s 172.16.2.150 -p 10050 -k "nginx.active" 2 #成功返回参数
5)在zabbix web界面中添加主机
6)创建监控项
7)创建图形
过一段时间,就能看到我们添加的自定义项的数据和图形了。
多监控项制作模板
上图中,多出来的三项监控也是同样的原理添加进来的:
[[email protected] nginx-1.10.1]# cd /etc/zabbix/zabbix_agentd.d/ [[email protected] 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 [[email protected] 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为具体参数 [[email protected] 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添加一个模板,模板中添加这几个监控项,以后新加主机直接添加模板就可以自动加自定义监控项了
本文出自 “改变从每一天开始” 博客,请务必保留此出处http://lilongzi.blog.51cto.com/5519072/1846379
以上是关于Zabbix快速部署及自定义Item监控Nginx状态原理的主要内容,如果未能解决你的问题,请参考以下文章