zabbix之分布式监控(六)
zabbix的强大之处也在于它是分布式监控系统,对于多机房大集群情况下,肯定不是一台zabbix-server服务器来进行信息的收集等工作,就要用到代理了。在记录zabbix-proxy之前,要系统的记录一下zabbix的监控方式。
一、zabbix的监控方式
zabbix自带多种类型的监控方式,大致分两类:公共的协议和zabbix专业的协议。支持多种协议的监控方式,相应地也支持多种设备的监控,从而可以对复杂的网络环境进行监控。
1.1 zabbix支持的监控方式
官方链接:https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes
项类型覆盖各种方法获取数据从您的系统。 每个项目类型都有其自己的一组支持项键和必需的参数。目前由zabbix提供下列事项类型的支持:
Zabbix agent checks #这些客户端来进行数据采集,又分为Zabbix agent(被动模式:客户端等着服务器端来要数据),Zabbix agent (active)(主动模式:客户端主动发送数据到服务器端) SNMP agent checks #SNMP方式,如果要监控打印机网络设备等支持SNMP设备的话,但是又不能安装agent的设备。 SNMP traps IPMI checks #IPMI即智能平台管理接口,现在是业界通过的标准。用户可以利用IPMI监视服务器的物理特性,如温度、电压、电扇工作状态、电源供应以及机箱入侵等。 Simple checks #简单检查,选择此方式后icmping主机判断主机是否存活 VMware monitoring #VMware监控 Log file monitoring #监控日志文件 Calculated items #监控项的计算 Zabbix internal checks #内部检查允许监控Zabbix的内部流程。 换句话说,您可以监视与Zabbix服务器或Zabbix代理到底发生了什么。 SSH checks #SSH检查。Zabbix服务器必须执行SSH检查最初的配置SSH2的支持。 Telnet checks #Telnet检查。Telnet检查表现为缺少代理的监控。 Zabbix代理不需要远程登录检查。 External checks #Zabbix服务器执行的外部检查是检查通过运行shell脚本或二进制。外部检查不需要任何代理被监控主机上运行。 Aggregate checks #总体检查Zabbix服务器通过直接从项目收集汇总信息数据库查询。 Trapper items #陷阱项目接受传入的数据,而不是查询它。对于您可能要“推”到Zabbix的任何数据都是有用的。 JMX monitoring #java管理扩展,是java平台上为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系架构和网络传输协议,灵活地开发无缝集成的系统、网络和服务管理应用。 ODBC checks #ODBC监控对应数据库监控Zabbix前端项目类型。ODBC是一个C编程语言中间件API用于访问数据库管理系统(DBMS)。 ODBC的概念是由微软,后来移植到其他平台。 #Zabbix可以查询任何数据库,支持ODBC。 为此,Zabbix不直接连接到数据库,但是使用ODBC接口和ODBC驱动程序设置。 这个函数可以更有效地监控不同数据库的多种用途——例如,检查特定数据库队列,使用统计等等。 Zabbix支持unixODBC,这是一种最常用的开源ODBCAPI
1.2 Agent监控方式
Agent分为主动和被动两种方式.
Trapper监控方式
Trapper是发送任意的数据给Zabbix-server,采用主动推送的方式,Trapper不需要安装客户端,Key的名称是可以灵活定义,在此工作模式下,Zabbix数据发送的程序是zabbix-sender,可以发送任何zabbix-server想要获取的数据。
前面http://blog.51niux.com/?id=147关于zabbix-sender命令介绍那里已经演示了trapper方式的使用。
#主要是主机添加Host name那里一定要是一个唯一的名称,客户端配置文件里面Host name那里定义的一定要和zabbix server端定义的Host name相一致。不然无法获取trapper方式发送的数据。Type of information(信息类型)这里也一定要跟key所上传数据类型一致,不然也是会失败的。
在这种形式下,zabbix-server不会主动连接客户端的IP,而是Trapper主动连接zabbix-server。
被动模式
Passive(被动模式),zabbix-server和zabbix-agent之间的通信是zabbix的专用协议,数据格式为JSON。默认情况下,zabbix-agent工作在被动模式下,工作的模式是由Key和zabbix_agentd.conf参数配置决定的。
被动模式的流程如下:
Server打开一个TCP连接。
Server发送一个key为agent.ping\n。
Agent接收到这个请求,然后响应数据<HEADER><DATALEN>1.
Server对接收到的数据进行处理。
TCP连接关闭。
主动模式
Active(主动模式),主动模式由于是Agent将采集到的数据主动发送给Server,而不需要Server每次连接Agent等待采集,所以采用主动模式会使Zabbix-Server具有最好的性能。在大型环境下,一定要将工作模式设置为主动模式,并尽可能采用更多的proxy以降低Server的负担,一般多机房,每个机房肯定都要设置proxy的。
主动模式的设置:
客户端的配置:/etc/zabbix/zabbix_agentd.conf配置文件中设置ServerActive=192.168.1.103(这个IP可以是server也可以是proxy的IP地址),然后重启zabbix_agentd服务。
服务端的配置:服务器端items的检测方式(Type)修改为Zabbix agent(active)
主动模式的运行流程:
Agent向Server建立一个TCP的连接。
Agent请求需要检测的数据列表。
Server响应Agent,发送一个Items列表(item key、delay)。
Agent响应请求。
TCP连接完成本次会话后关闭。
Agent开始周期性的收集数据。
#下面是Agent要向Server发送数据了:
Agent向Server建立一个TCP连接。
Agent发送在采集周期内,需要采集数据给Server.
Server处理Agent发送的数据。
TCP连接关闭。
二、zabbix-proxy
2.1 zabbix-proxy的概述
官网链接:https://www.zabbix.com/documentation/3.2/manual/distributed_monitoring/proxies
zabbix proxy可以代替zabbix server检索客户端的数据,然后把数据汇报给zabbix server,并且在一定程度上分担了zabbix server的压力.zabbix proxy可以非常简便的实现了集中式、分布式监控.
zabbix proxy使用场景:
监控远程区域设备 监控本地网络不稳定区域 当zabbix监控上千设备时,使用它来减轻server的压力 简化zabbix的维护
#代理需要Zabbix服务器只有一个TCP连接。 这种方式更容易绕过防火墙,你只需要配置一个防火墙规则。Zabbix代理必须使用一个单独的数据库。 代理服务器收集的所有数据都会在本地存储,然后再发送到服务器。 这样就不会因为服务器的任何临时通信问题而丢失数据。 代理配置文件中的ProxyLocalBuffer和ProxyOfflineBuffer参数控制数据在本地保存多长时间。
proxy的配置文件参数:https://www.zabbix.com/documentation/3.2/manual/appendix/config/zabbix_proxy
Zabbix代理是一个数据收集器。 它不计算触发,处理事件或发送警报。
2.2 zabbix-proxy的安装配置
zabbix-proxy的安装
#yum install mysql-connector-odbc mysql-devel libdbi-dbd-mysql net-snmp-devel curl-devel unixODBC-devel OpenIPMI-devel java-devel libssh2-devel -y
#groupadd zabbix -g 201
#useradd -g zabbix -u 201 -m zabbix
# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.2.6/zabbix-3.2.6.tar.gz
#tar zxf zabbix-3.2.6.tar.gz
#cd zabbix-3.2.6
#./configure --prefix=/usr/local/zabbix-3.2.6 --sysconfdir=/etc/zabbix --enable-proxy --enable-agent --enable-ipv6 --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi --with-unixodbc --with-ldap --with-ssh2 --enable-java
#make install
#ln -s /usr/local/zabbix-3.2.6 /usr/local/zabbix_proxy
#service mysqld start
# mysqladmin -uroot password '123456'
#mysql -uroot -p123456 -e 'create database zabbix_proxy character set utf8;'
# mysql -uroot -p123456 -e "grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';"
#mysql -uroot -p123456 -e "flush privileges;"
#mysql -uzabbix -pzabbix zabbix_proxy </root/zabbix-3.2.6/database/mysql/schema.sql
zabbix-proxy的配置
#cat /etc/zabbix/zabbix_proxy.conf#做下面的更改
Server=192.168.1.103 Hostname=zabbix_proxy_192.168.1.109 LogFile=/tmp/zabbix_proxy.log DBHost=localhost DBName=zabbix_proxy DBUser=zabbix DBPassword=zabbix ConfigFrequency=120 #主动去server端去拉去配置更新的频率120秒一次 DataSenderFrequency=60 #发送采集的监控数据到服务器端,默认是1秒,我们一分钟发送一次
# /usr/local/zabbix_proxy/sbin/zabbix_proxy #启动zabbix_proxy服务
# netstat -lntup|grep zabbix_proxy #查看zabbix_proxy服务
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 63477/zabbix_proxy tcp 0 0 :::10051 :::* LISTEN 63477/zabbix_proxy
2.3 在zabbix-server上面配置代理服务器
下面是上图中参数的介绍:
Proxy name : 输入代理名称。 它必须与代理配置文件中的Hostname参数中的名称相同。 Proxy mode : 选择代理模式。Active(主动模式) - 代理将连接到Zabbix服务器并请求配置数据.Passive(被动模式) - Zabbix服务器连接到代理。请注意,在使用活动代理时,没有加密通信(敏感)代理配置数据可能可用于访问Zabbix服务器陷阱端口的各方。 这是可能的,因为任何人都可以伪装成活动代理,并且如果不发生身份验证,则请求配置数据。 Hosts : 添加要由代理监视的主机。已经由另一个代理监视的主机在其他主机选项中显示为灰色。 Description: 输入代理描述。
下面是上图中参数的介绍:
Connections to proxy:服务器如何连接到被动代理:无加密(默认),使用PSK(预共享密钥)或证书。 Connections from proxy:从活动代理中选择允许的连接类型。 可以同时选择几种连接类型(用于测试和切换到其他连接类型)。 默认为“无加密”。 #点击Certificate之后又两个参数: Issuer:允许颁发证书。 证书首先通过CA(认证机构)验证。 如果CA有效,则由CA签名,则可以使用Issuer字段来进一步限制允许的CA。 该字段是可选的,如果您的Zabbix安装使用多个CA的证书,则使用该字段。 Subject:允许的证书。 证书首先通过CA验证。 如果它有效,由CA签名,则主题字段可用于仅允许Subject字符串的一个值。 如果此字段为空,则接受由配置的CA签名的任何有效证书。 #点击PSK之后又两个参数: PSK identity:预共享密钥身份字符串。 PSK : 预共享密钥(hex-string)。 如果Zabbix使用mbed TLS(PolarSSL)库,Zabbix将使用GnuTLS或OpenSSL库,64位十六进制(32字节PSK),最大长度为512位十六进制数(256字节PSK)。 示例:1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
2.4 客户端的配置
# vim /etc/zabbix/zabbix_agentd.conf #下面是要修改的地方
Server=192.168.1.109 #agentd被动模式下的server或者proxy的IP地址 ServerActive=192.168.1.109 #如果agentd端是被动模式的话,此条和下面那条并不非用配置,但是如果agentd端是主动模式的话,此条一定要配置上。 Hostname=test_192.168.1.101
# /etc/init.d/zabbix_agentd restart #重启zabbix_agentd服务
proxy端测试一下:
# /usr/local/zabbix_proxy/bin/zabbix_get -s 192.168.1.101 -k agent.ping #下图为测试成功状态,不然会有错误提示,如:zabbix_get [63722]: Check access restrictions in Zabbix agent configuration
2.5 zabbix服务端上面的配置
2.6 zabbix服务端全克隆模板以及items全部变为agent主动模式
上面已经提到过,用proxy模式并且zabbix的客户端也是主动模式提交数据,这样能大大提高采集效率,降低zabbix服务器端和proxy端的压力。
上面我们已经创建了一个linux基本模板,里面的items里面是zabbix agent模式,现在我们又新搞了个zabbix_proxy,我们希望旧的添加的那些还是使用zabbix_agent的方式,新加到zabbix_proxy里面的主机使用zabbix_agent(active)的方式。
模板的克隆:
找到模板==》点开linux客户端基本监控模板==》全客隆(在图的最下方选择)
#然后灰色的部分是不能修改的,模板名称啊等都是可以修改的,这时候你就可以创建一个新的模板,但是里面的items里面就不用再重新定义一遍了。既然是新的模板,等克隆完毕之后你就可以修改这个模板里面的内容了。
items(监控项)的批量更新:
如果你items比较多,有几十个,你还一个个的点进去,去将类型从zabbix客户端修改成zabbix客户端(主动式)吗?显然不能这么玩。
#上图改完之后点击最下方的更新,就所有批量更新了。
下面是效果图:
2.7 检测一下
#查看下最新数据也是有数据,192.168.1.101也是有数据的。
#注(proxy配置文件ConfigFrequency(zabbix proxy从zabbix server取得配置数据的频率 )的重要性):
因为我们线上环境基本都是用的zabbix_proxy方式,然后zabbix_proxy是active方式,然后客户端也是active方式,既然都是active方式,那么zabbix_agent的Hostname就很重要,打个比方如果再zabbix_server端把一个主机的Hostname改了,然后客户端那边也改了,服务端和客户端的Hostname是统一的,但是proxy那里还记录的是旧Hostname,然后就会在proxy日志里面看到下面一条:
cannot send list of active checks to "192.168.1.12": host [virt_192.168.1.12] not found
proxy主动模式下,ConfigFrequency默认的是3600秒一小时,显然有点大了,可以适当的调低一下,如10分钟或者几分钟什么的。然后出现问题多看看zabbix服务端和proxy的日志看看有什么问题。
#注(关于自动发现):
自动发现上面讲述的就是没有加proxy,添加完proxy之后,让proxy去自动发现,只要在自动发现规则:由agent代理程序自动发现那里从无选择我们哪个proxy节点取执行自动发现规则,然后再IP范围上面定义好IP范围就好,那么指定的proxy就会自动的去发现,并且发现后会触发action动作,zabbix_agent那里会自动的引入此proxy,也就是会将数据发送到此proxy,我们就不用再用web端的代理那里设置一下了。