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状态原理的主要内容,如果未能解决你的问题,请参考以下文章

按照zabbix客户端及自定义监控nginx连接状态

zabbix邮件报警及自定义脚本实战

使用zabbix监控nginx的活动连接数

2019.11.2 Zabbix agent端监控及自定义监控项配置

zabbix服务器添加监控主机,使用监控模板及自定义监控项

zabbix-nginx监测及自定义模板