一、agent采集监控数据方式(键值对)

agent采集数据是以键值对的方式进行采集,一个键对应一个值。
使用nginx为例进行说明。

注意:在编译nginx’的时候,添加http_stub_status_module模块,该模块是nginx监控模块,作用是监控nginx的一些状态信息。

./configure --with-http_stub_status_module --prefix=/usr/local/nginx

make && make install

编译配置文件:

zabbix 采集数据时间不准 zabbix采集间隔_zabbix 采集数据时间不准


我们只需要在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 采集数据时间不准 zabbix采集间隔_tomcat_02

以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已经成启动,被监控的服务已经存在。

zabbix 采集数据时间不准 zabbix采集间隔_java_03

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接口

zabbix 采集数据时间不准 zabbix采集间隔_zabbix 采集数据时间不准_04

添加JMX模板

zabbix 采集数据时间不准 zabbix采集间隔_tomcat_05


zabbix 采集数据时间不准 zabbix采集间隔_nginx_06


zabbix 采集数据时间不准 zabbix采集间隔_zabbix 采集数据时间不准_07


zabbix 采集数据时间不准 zabbix采集间隔_java_08

三、通过SNMP协议采集数据

即通过SNMP的查询和陷入进行监控数据的采集。适合对网络设备,如防火墙、交换机、路由器等的监控数据的采集。目前Zabbix系统支持SNMP v1 SNMP v2c和SNMP v3版本的协议。通过SNMP协议采集数据不需要在被监控设备上安装任何第三方软件,但是需要配置和开启SNMP服务,并允许监控服务器查询。这个是我们目前使用比较多的数据采集方法。缺点是,其通信协议走的UDP协议,传输为不可靠传输,所以存在丢数据的现象。同时,MIB库一般是跟被监控设备有关,不适合监控自定义的项目。

四、通过IPMI代理采集数据

智能平台管理接口(IPMI,Intelligent Platform Management Interface),是管理基于Intel架构的企业系统中所使用的外围设备所采用的一种工业标准。通过这种方法采集数据的优点是:它可以采集到其它方法无法采集到的硬件状态信息,例如CPU温度、风扇转数等等。缺点是,需要被监控硬件能够支持。而这个一般在购买服务器(这种方法一般只适用于服务器)时是需要单独购买控制卡的。