(18)主动监控:
被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
相对于主动监控,被动监控需要消耗掉更多的资源,所以当集群中压力比较大的情况下,建议使用主动监控;如果压力还是很大,则需要使用proxy来分担zabbix的部分压力;
要想启用主动监控,必须确保Agent端开启了主动监控的功能,即配置"Active checks related"端的配置,必须指定ServerAct
ive(zabbix server的主机是谁)、Hostname(Agent自己的主机名)或者HostnameItem。还要在zabbix server上指定Type;
zabbix_sender发送数据:
zabbix server上的某主机上,直接定义Item时随便定义一个不与其它已有key冲突的key即可,即item type为"zabbix trapper";
zabbix_sender:
-z zabbix_server_ip
-p zabbix_server_port
-s zabbix_agent_hostname
-k key
-o value
注意:对于正常状态下的监控,Item中使用key来获取数据,需要指定的Type为Zabbix agent(active);如果我们想要手动发送一串数据给服务端,并且让服务端捕获,并生成一个监控信息的话,需要使用zabbix trapper;两者其实都是由Agent发送数据给server。不同的是,Zabbix Agent(active)使用的是已经定义的key;而zabbix trapper使用的是通过zabbix_sender命令发送的数据,这种方式经常用于实验环境;
实验:主动监控-zabbix agent(active),只需要Agent端打开主动监控的配置,然后web-GUI中配置的Item使用zabbix agent(active)的type即可,此处不做演示!
实验:主动监控-zabbix trapper:
node1节点上:
开启主动监控的配置!
node1节点上:
zabbix_sender -z 192.168.109.7 -p 10051 -s node1.com -k send.test.data -o 156
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000609"
sent: 1; skipped: 0; total: 1
zabbix_sender -z 192.168.109.7 -p 10051 -s node1.com -k send.test.data -o 651
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.040468"
sent: 1; skipped: 0; total: 1
(19)基于SNMP(简单网络管理协议)协议的监控(仅需要了解即可):
注意:以上的监控都是基于Zabbix Agent服务来实现监控的;
SNMP协议是一款非常古老的协议。几乎所有设备都支持该协议,他是用UDP的161、和UDP的162端口。他有三个版本,v1、v2c、v3,每个版本之间的差异很大,并不会完全的兼容。该协议本身不安全,所以,启用SNMP需要经过精心的设计,他拥有管理的功能,例如禁用网卡、远程重启等等;实际生产中,在被监控的状态下,一般只启用数据请求、响应功能(只读:get、getnext),不应该启用管理功能(写:set);SNMP被管控端可以使用trap方法,将数据发送给管控端,类似于Zabbix trapper;
MIB:Management Information Base,管理信息数据库
OID:Object ID,对象标识符,OID定义"通信和信息处理世界中的任何事物,它是可标识(可以命名)的,同时它可被注册"可以看出,OID是与对象相关联的用来无歧义地标识对象的全局唯一的值,可保证对象在通信或信息处理中正确地定位和管理。通俗地讲,OID就是网络世界中对象的身份证。
使用SNMP协议监控设备,监控的对象一般是交换机、路由器等设备;
实验:实现基于SNMP的监控:
在node2节点上:
yum install net-snmp net-snmp-utils
systemctl restart snmpd
snmpget -v 2c -c public 192.168.109.6 .1.3.6.1.2.1.1.3.0#本机验证
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (15878) 0:02:38.78
snmpget -v 2c -c public 192.168.109.6 .1.3.6.1.2.1.1.5.0#本机测试
SNMPv2-MIB::sysName.0 = STRING: node2
snmpwalk -v 2c -c public 192.168.109.6 .1.3.6.1.2.1.25#本机测试
HOST-RESOURCES-MIB::hrSystemUptime.0 = Timeticks: (1752903) 4:52:09.03
HOST-RESOURCES-MIB::hrSystemUptime.0 = No more variables left in this MIB View (It is past the end of the MIB tree)
vim /etc/snmp/snmpd.conf
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
view systemview included .1.3.6.1.2.1.2 # 网络接口的相关数据
view systemview included .1.3.6.1.4.1.2021
#系统资料负载,memory, disk io, cpu load
systemctl restart snmpd
注意:此处的实验使用了Linux OS,实际生产中,一般使用SNMP来配置路由器或者交换机。一定要注意,配置之前,先在SNMP的配置文件中启用该分支,还要了解该分支下有哪些OID,代表的含义是什么,并设置好ACL,确保有监控的权限;
注意:/etc/snmp/snmpd.conf配置文件的结构:
注意:真正的管理端需要启用的是/usr/lib/systemd/system/snmptrapd.service服务;被管控端需要启用/usr/lib/systemd/system/snmpd.service服务;
注意:默认情况下,snmpd服务(161端口)开放的就是一个只读的权限,配置文件默认所授予的可以访问的资源应该够SNMP的基础应用!
注意:使用SNMP访问的常见资源是:
.1.3.6.1.2.1.
1.1.0:系统描述信息,SysDesc
1.3.0:监控时间, SysUptime
1.5.0:主机名,SysName
1.7.0:主机提供的服务,SysService
2.1.0:网络接口数目
2.2.1.2:网络接口的描述信息
2.2.1.3:网络接口类型
(20)基于JMX的监控:
在企业中,很多程序是基于Java来编写的,java程序运行在JVM之上,而JVM自己就可以监听在某个套接字上,将自己内部的状态信息输出出去,所以监控服务器只需要直接连接JVM的套接字就可以获取到Java进程的相关信息,不需要通过Agent、SNMP;可是zabbix是没有办法自己链接JVM的套接字的,也就是说,zabbix自身是不能够作为客户端来链接该套接字的。所以,就需要额外安装一个服务来连接JVM的套接字的。这个服务就是zabbix-java-gateway.x86_64(Java网关);可以通过该网关来监听多个JVM;zabbix-java-gateway可以是一个单独的主机,可以和zabbix server安装到一台主机上;
如果以监控tomcat为例,首先需要在/etc/sysconfig/tomcat文件中添加:
CATALINA_OPTS="
-Djava.rmi.server.hostname=TOMCAT_SERVER_IP
-Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
#该配置的含义就是启用JVM的JMX接口,默认是关闭的;
注意:CATALINA_OPTS表示仅对tomcat有效,如果是JAVA_OPTS表示对所有的JAVA进程都有效!
然后安装zabbix-java-gateway.x86_64;
之后还需要在Zabbix server端指明zabbix-java-gateway的IP、端口号、以及开启的进程:
JavaGateway=172.16.0.70
JavaGatewayPort=10052
StartJavaPollers=5
实验:实现基于JMX的监控:
node2节点上:
yum install java-1.8.0-openjdk-devel tomcat-webapps.noarch tomcat-admin-webapps.noarch tomcat-docs-webapp.noarch
vim /etc/sysconfig/tomcat
CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.109.6 -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
systemctl start tomcat.service
ss -ntlu #查看tcp的12345端口是否打开,确定配置是否正常!
zabbix server节点上:
yum install zabbix-java-gateway.x86_64
cd /etc/zabbix/
vim zabbix_java_gateway.conf#默认配置即可,此处只是为了确认一下;
systemctl restart zabbix-java-gateway.service
vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.109.7
JavaGatewayPort=10052
StartJavaPollers=5
systemctl restart zabbix-server.service
systemctl status zabbix-server.service#查看5个poller进程是否正常运行;
注意:实验中所使用的监控项的含义:
jmx[object_name,attribute_name]
object name - 它代表MBean的对象名称
attribute name - 一个MBean属性名称,可选的复合数据字段名称以点分隔
示例:jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
jmx的详细文档:
https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
注意:如果使用系统提供的模板,可能会应为没有启用该项功能而导致不支持,例如8443端口,一般是不开启的;