设为首页 收藏本站
查看: 3155|回复: 0

[经验分享] Zabbix快速部署及自定义Item监控Nginx状态原理

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-6 09:05:37 | 显示全部楼层 |阅读模式
监控软件的选择
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)系统环境
1
2
3
4
[iyunv@linux-node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[iyunv@linux-node1 ~]# uname -r
3.10.0-327.el7.x86_64



2)yum源配置
1
[iyunv@linux-node1 ~]# rpm -ivh http://mirrors.aliyun.com/zabbix ... .0-1.el7.noarch.rpm



3)软件安装
1
[iyunv@linux-node1 ~]# yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb -y



4)修改PHP时区
1
[iyunv@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)
1
2
3
4
5
6
7
[iyunv@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配置文件
1
2
3
4
5
[iyunv@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost    #数据库所在主机
DBName=zabbix      #数据库名
DBUser=zabbix      #数据库用户
DBPassword=123456   #数据库密码



7)开启zabbix_server和http
1
2
systemctl start zabbix-server
systemctl start httpd



8)web配置导航,访问http://10.0.0.150/zabbix/
wKiom1fM8h-iHBg3AAC3ru9AroU884.jpg
wKiom1fM8i6irVTOAADv3mlIYlg998.jpg

自定义监控项Item
以监控Nginx实时连接状态为例,在zabbix中添加对应的主机和监控项(也是大部分监控项实现的原理)
server端:172.16.2.150
agent端:172.16.2.151 (Nginx应用环境)
1)安装agent客户端
1
2
[iyunv@linux-node1 tools]# rpm -ivh http://mirrors.aliyun.com/zabbix ... .0-1.el7.noarch.rpm
[iyunv@linux-node1 tools]# yum install -y zabbix-agent



2)Nginx编译中添加http_stub_status_module状态模块
1
2
3
4
5
6
7
8
9
10
11
[iyunv@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 #编译参数
[iyunv@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;
        }
[iyunv@linux-node1 nginx]# /application/nginx/sbin/nginx -s reload



web查看nginx状态
wKioL1fM8jyAFfuVAABGqLry7Fs121.jpg
1
2
3
4
5
6
7
Active connetction:nginx #正在处理的连接数
server: #表示Nginx共计处理了多少个链接
accepts: #成功创建了多少次握手   (请求丢失数 = 握手数 - 链接数)
handled request: #共计处理了多少请求
reading:Nginx  #读取到客户端的Header信息数
writing:Nginx  #返回给客户端的Header信息数
waiting: #已经处理完,正在等待下一次请求连接



3)agent端添加用户自定义参数
1
2
3
4
5
6
7
8
9
10
11
[iyunv@linux-node1 nginx]# curl -s http://10.0.0.150/nginx-status|awk 'NR==1{print $NF}'
2 #测试curl命令能够成功返回活动连接数
[iyunv@linux-node1 nginx]# vim /etc/zabbix/zabbix_agentd.conf #编辑agent配置文件
Server=172.16.2.150 #zabbix_server地址
Include=/etc/zabbix/zabbix_agentd.d/ #配置此文件夹为agent配置文件存放位置
[iyunv@linux-node1 zabbix]# mkdir /etc/zabbix/zabbix_agentd.d #创建出上面的文件夹
[iyunv@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
[iyunv@linux-node1 zabbix]# systemctl restart zabbix-agent #重启agent服务



4)在server端测试添加的自定义参数
1
2
3
[iyunv@linux-node1 zabbix]# yum install -y zabbix-get #安装zabbix-get工具
[iyunv@linux-node1 zabbix]# zabbix_get -s 172.16.2.150 -p 10050 -k "nginx.active"
2 #成功返回参数



5)在zabbix web界面中添加主机
wKiom1fM8kmxUbMdAAAdRAO1DW4642.jpg
wKiom1fM8m-BUY31AACPZQxC-Zk647.jpg
6)创建监控项
wKioL1fM8nzzRiR1AABhyfEWEL0015.jpg
wKiom1fM8obCNl84AAATRzzRjeM078.jpg
wKioL1fM8pax0lYMAABxPcTHXg8767.jpg
7)创建图形
wKiom1fM8qLx1tFhAACDrQEH87A523.jpg
wKiom1fM8sGhZo6PAAB_27bfjHQ368.jpg
wKiom1fM8tWQps6DAAD2fuZubkk597.jpg
过一段时间,就能看到我们添加的自定义项的数据和图形了。

多监控项制作模板
上图中,多出来的三项监控也是同样的原理添加进来的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
[iyunv@linux-node1 nginx-1.10.1]# cd /etc/zabbix/zabbix_agentd.d/
[iyunv@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
[iyunv@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为具体参数
    [iyunv@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添加一个模板,模板中添加这几个监控项,以后新加主机直接添加模板就可以自动加自定义监控项了
    wKioL1fM8uPixDXUAAFQGb30LIA798.jpg



    运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-268308-1-1.html 上篇帖子: zabbix监控——清理历史数据 下篇帖子: Ubuntu系统LNMP环境下安装配置zabbix3.0 监控
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表