一、agent采集监控数据方式(键值对)
agent采集数据是以键值对的方式进行采集,一个键对应一个值。
使用nginx为例进行说明。
注意:在编译nginx’的时候,添加http_stub_status_module模块,该模块是nginx监控模块,作用是监控nginx的一些状态信息。
./configure --with-http_stub_status_module --prefix=/usr/local/nginx
make && make install
编译配置文件:
我们只需要在server段中添加一个status就可以了,注意这个status是随意起的名字,然后保存从其nginx服务。实现的效果图图片
访问显示结果:
[root@toto2 conf]# curl 172.25.13.120/status
Active connections: 1
server accepts handled requests
2 2 1
Reading: 0 Writing: 1 Waiting: 0
页面的参数介绍:
Active connections: 1
-----> 当前活动的连接数
server accepts handled requests
2 2 12
2 ---->总连接数connection
2----> 成功的连接数connection 失败连接=(总连接数-成功连接数)
12 ---->总共处理的请求数requests
Reading: 0 Writing: 1 Waiting: 0
Reading: 0 ---->读取客户端Header的信息数 请求头
Writing: 1 ---->返回给客户端的header的信息数 响应头
Waiting: 0 ---->等待的请求数,开启了keepalive
在安装了agent主机的 /etc/zabbix/zabbix_agentd.d目录上创建该文件,agent会根据该文件中所写的内容进行数据读取:
vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
文件编写规则:UserParameter=键,值(该值可以是执行命令之后的结果)
UserParameter=nginx.active,curl -s http://localhost/status |grep Active |awk '{print $3}'
UserParameter=nginx.accept,curl -s http://localhost/status |awk NR==3 |awk '{print $2}'
UserParameter=nginx.request,curl -s http://localhost/status |awk NR==3 |awk '{print $3}'
三个键分别对应的值,位nginx状态信息中,总请求数,成功的连接数,以及总共处理的请求数。
toto2 重新启动服务:systemctl restart zabbix-agent.service
测试:在另外的主机安装用来获取数据的程序。
yum install -y zabbix-get.x86_64
使用命令通过键提取toto2主机上的对应的值。
[root@toto1 conf.d]# zabbix_get -s 172.25.13.120 -p 10050 -k 'nginx.active'
1
[root@toto1 conf.d]# zabbix_get -s 172.25.13.120 -p 10050 -k 'nginx.accept'
29
[root@toto1 conf.d]# zabbix_get -s 172.25.13.120 -p 10050 -k 'nginx.request'
4
读取成功,说明agent的数据提起模式就是使用的键—>值的形式。
二、通过jmx协议监控java程序
JMX 全称是Java Management Extensions,即Java管理扩展。Java程序会开放一些端口,用来获取运行状况。
从Zabbix2.0开始,内置了监控JMX的功能,叫做"Zabbix Java Gateway ",在Zabbix Serve上会启动名为"Zabbix Java Gateway "的进程,当需要获取JMX数据时,Zabbix Server会"问 "JMX Gateway,然后JMX Gateway 根据JMX管理API去查询需要的数据。在使用时,Java程序不需要在代码中新增任何东西,只需要在启动时加上一些JVM参数,使得它可以支持使用监控端口监控JMX。
数据采集过程:
zabbix server --------->zabbix java gatetway------------>java app
以zabbix监控tomcat服务进行说明演示
1 、toto2 主机安装tomcat。
安装jdk。提供java程序运行的环境
[root@toto2 ~]# rpm -ivh jdk-8u121-linux-x64.rpm
解压tomcat压缩包,并设值软链接
[root@toto2 ~]# tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
[root@toto2 ~]# cd /usr/local/
[root@toto2 local]# ln -s apache-tomcat-8.5.24/ tomcat
[root@toto2 local]# ls
apache-tomcat-8.5.24 etc include lib64 nginx share tomcat
bin games lib libexec sbin src
修改tomcat的配置文件,使得该程序向外提供一个数据采集的端口。vim /usr/local/tomcat/bin/catalina.sh
:在空白处添加下列语句
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 # 程序向外提供的数据采集的端口
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
开启服务,查看端口是否正常
[root@toto2 tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@toto2 tomcat]# netstat -antlp
tcp6 0 0 :::8080 :::* LISTEN 4795/java # 默认的端口
tcp6 0 0 :::8888 :::* LISTEN 4795/java # 添加的数据采集端口
至此tomcat已经成启动,被监控的服务已经存在。
2 zabbix server 进行设置,对服务进行监控
安装 zabbix-java-gateway 服务
[root@toto1 ~]# yum install zabbix-java-gateway.x86_64 -y
修改zabbix-java-gateway 配置文件:/etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0" ##监听地址
LISTEN_PORT=10052 ##监听端口
START_POLLERS=5 ##开启的工作线程数量
启动zabbix-java-gateway 服务
[root@toto1 ~]# systemctl start zabbix-java-gateway.service
[root@toto1 ~]# systemctl enable zabbix-java-gateway.service
修改zabbix server 配置文件 ,指定zabbix-java-gateway 相关信息
JavaGateway=172.25.13.110 # zabbix-java-gateway 所在主机ip
JavaGatewayPort=10052 # zabbix-java-gateway 服务的监听端口
StartJavaPollers=5 # 为zabbix-java-gateway 服务开启的进程数
重新启动服务
systemctl restart zabbix-server.service
查看启动的进程
29885 ? S 0:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values
29886 ? R 0:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values
29887 ? S 0:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values
29888 ? R 0:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values
29889 ? S 0:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values
3 在zabbix监测界面的配置
监控程序所在的主机(toto2)添加JMX接口
添加JMX模板
三、通过SNMP协议采集数据
即通过SNMP的查询和陷入进行监控数据的采集。适合对网络设备,如防火墙、交换机、路由器等的监控数据的采集。目前Zabbix系统支持SNMP v1 SNMP v2c和SNMP v3版本的协议。通过SNMP协议采集数据不需要在被监控设备上安装任何第三方软件,但是需要配置和开启SNMP服务,并允许监控服务器查询。这个是我们目前使用比较多的数据采集方法。缺点是,其通信协议走的UDP协议,传输为不可靠传输,所以存在丢数据的现象。同时,MIB库一般是跟被监控设备有关,不适合监控自定义的项目。
四、通过IPMI代理采集数据
智能平台管理接口(IPMI,Intelligent Platform Management Interface),是管理基于Intel架构的企业系统中所使用的外围设备所采用的一种工业标准。通过这种方法采集数据的优点是:它可以采集到其它方法无法采集到的硬件状态信息,例如CPU温度、风扇转数等等。缺点是,需要被监控硬件能够支持。而这个一般在购买服务器(这种方法一般只适用于服务器)时是需要单独购买控制卡的。