实战企业Zabbix监控系统

对于系统和应用运维人员的任务真的很艰巨,监控和保持系统启动并正常运行是件多么不容易的事。随着用户量的增多、数据量的增大,业务系统的压力也越来越大,很有必要对其运行状态、系统资源等全方位的监控,第一时间发现问题,防范于未然。

开源监控系统的出现,改变了传统的使用Shell脚本监控的不足,大大降低了监控主机的复杂难度,提升了工作效率。本系列文章主要介绍目前主流开源监控软件Zabbix的部署和监控Web、MySQL、主机资源等。

Part.1 什么是Zabbix?

zabbix是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源运维平台,也是目前国内互联网用户中使用最广泛的监控软件。

入门容易、上手简单、功能强大并且开源免费是所有使用者对zabbix的最直观评价。Zabbix易于管理和配置,能生成比较漂亮的数据图,其自动发现功能大大减轻日常管理的工作量,丰富的数据采集方式和API接口可以让用户灵活进行数据采集,而分布式系统架构可以支持监控更多的设备。理论上,通过Zabbix 提供的插件式架构,可以满足企业的任何需求。

Part.2 Zabbix的组成

Zabbix主要由ZabbixServer、Zabbix Agent、Datebase Storage、Web interface和Proxy组成,各组件功能介绍如下:

1

Zabbix Server:可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器的网络状态的监视,数据收集等功能;负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行

2

Zabbix Agent:需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集并发往Server端或Proxy端。

3

Datebase Storage:专用于存储所有配置信息,以及由zabbix收集的数据。可以使用MySQL、PostgreSQL、Oracle、DB2、SQLite。

4

Web interface:zabbix的GUI接口,通常与Server运行在同一个主机上。

5

Proxy:可选组件,常用于分布式监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端。

Zabbix Server、Zabbix Agent和Zabbix Proxy可以运行环境如下图所示:

Zabbix的体系结构图:

如上图所示用户使用Web GUI的管理方式,定义监控项目,ZabbixServer负责从agent端收集监控数据,并存储在数据库中,同时对数据进行分析展示,并触发相关报警,使用Zabbix Agent监控安装了Agent的服务器,使用SNMP对交换机等网络设备的监控,还可以配置Web监控方式可以监控Web页面的下载速率和响应时间等重要参数。

Zabbix proxy是在大规模分布式监控场景中,采用的一种用以分担Server端压力的分层结构,Proxy只负责一定区域内的数据采集工作,然后定期将数据一次性发送给Server,极大的减轻了Server的负载压力,使得可以支持更大规模的监控需求。

Part.3 Zabbix的部署架构

企业在部署Zabbix监控系统过程中,可以依据企业本身网路环境和主机数量的规模,选择一种适合自己的Zabbix监控架构。Zabbix提供了三种架构供您选择:

Zabbix Server和Client架构

在Zabbix Server和Zabbix Client架构中,主要由Zabbix监控主机和被监控主机组成。

Zabbix监控主机和被监控机之间不经过任何代理 ,直接由Zabbix Server和Zabbix agentd之间进行数据交互。这种架构是Zabbix架构中最简单的架构,适用于网络环境比较单一,设备较少的监控环境。在这种环境下,可以将Zabbix Server和数据存储、Web GUI等都放到同一台主机上作为监控主机。

Zabbix Server、Zabbix Proxy和Client架构

在Zabbix Server、Zabbix Proxy和Client架构中,主要由Zabbix监控主机、Zabbix Proxy Server和被监控主机组成。

Zabbix Proxy Server本身没有前端,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给Zabbix Server。使用Zabbix Proxy能够降低中心Zabbix Server的压力,提高性能。这种架构可以将Zabbix GUI、Zabbix Server和数据存储分离,数据存储使用主从模式,该架构适用于跨机房、跨网络的中型网络架构的监控。

Zabbix Master、Zabbix Node和Client架构

在Zabbix Master、Zabbix node和Client架构中,主要由Zabbix监控主机、Zabbix node和被监控主机组成。

使用Zabbix Node节点模式可以建立一个层次结构的分布式监控。每一个节点是一个完整的Zabbix服务器和负责监视它自己的位置,当然在Node下面可以接Proxy,也可以直接接client 。Node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向Master同步,如果主节点和子节点之间的通信发生故障时,节点可以保持正常运行状态,采集的数据信息和事件将存储在本地。当主节点和子节点的连接恢复时,子节点将有选择地将数据发送到主节点。该架构是Zabbix最复杂的监控架构,适用于跨网络、跨机房、数千节点的分布式大型环境。

Part.4 Zabbix Agent的监控模式

Zabbix Agent :使用c开发,运行在各种平台,收集设备的CPU、内存、磁盘和网络接口使用信息。占用空间小、资源低。监控配置集中在Zabbix Server,容易管理Zabbix agent,所有服务器能使用同样的一个配置文件。支持被动(polling)和主动检查(trapping)。

被动方式(polling)

Zabbix Server或Zabbix Proxy从Zabbix agent请求一个值,agent处理请求,返回值到Zabbix Server或proxy。例如CPU load,然后Zabbix agent回送结果给server.

主动方式

Zabbix agent从Zabbix server或proxy请求主动检查列表,定期的发送检查结果。

选择是被动还是主动检查,需要在 监控项类型 中选择’Zabbix agent’或者’Zabbix agent (active)’。

Zabbix agent运行在被监控主机上,可以通过守护进行的方式运行。

Zabbix agent一般要求运行在非root账户下。

如果你在’root’账户下启动Zabbix agent,它将自动选择在操作系统中建立的’zabbix’用户,除非你修改agent配置文件中’AllowRoot’参数。

Part.5 代理Proxy

Zabbix代理(proxy)通常用于替代server收集监控信息并将数据发送给Zabbix server。所收集数据会先存储在代理主机的缓存中然后传送给Zabbix server。

代理是可选的,不过使用它可以有效的降低分布式环境中单一的Zabbix server负载。通过代理去收集监控数据,server可以有效降低CPU和磁盘I/O消耗。

Zabbix代理可以出色的完成远程区域、分支机构、无本地管理员的网络的集中监控。

Zabbix代理使用独立的数据库。

注意:Zabbix proxy数据库可以使用SQLite, MySQL, PostgreSQL. 如果Oracle或IBM DB2在低等级自动发现规则时存在限制和风险。

Zabbix proxy作为守护进程运行。

Zabbix proxy一般要求运行在非root账户下。

如果在’root’账户运行,它将自动选择之前已经在操作系统建立的’zabbix’用户,但是无法在编译时或在配置文件中进行配置。

Part.6 Zabbix相关术语

为了更加便捷的维护Zabbix系统,很多的时候我们需要查阅Zabbix的相关资料。在看资料的过程中或者是维护Zabbix监控系统的时候,经常会遇到很多专业术语。如下是Zabbix经常遇到的术语。

·主机(host):要监控的网络设备,可由IP或DNS名称指定;

·主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;

·监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识;

·触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";

·事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;

·动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作;

·报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;

·媒介(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;

·通知(notification):通过选定的媒介向用户发送的有关某事件的信息;

·远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;

·模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;

·应用(application):一组item的集合;

·web场景(web scennario):用于检测web站点可用性的一个活多个HTTP请求;

·前端(frontend):Zabbix的web接口。

Part.7 Zabbix监控流程

通过zabbix监控数据流,并采取相应的措施。如下图:

首先要创建一个host,再创建一个item来搜集数据

通过item来创建触发器(trigger)

通过触发器(trigger)来创建一个动作(action)

例如:如果你想监控一个服务器的CPU负载状况,你首先为该服务器创建一个主机条目,其次是创建一个item来监控服务器的CPU状况,并创建相应的触发机制,当cpu负载达到某个阀值,触发操作,该操作包括执行设定的动作和发送邮件报警。

可以将这些操作设置成一个模板,要监控某台主机的时候,直接套用模板即可。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180819G002W700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券