企业级开源监控解决方案——Zabbix 介绍

前言

随着互联网、云计算的飞速发展,企业线上业务系统越来越复杂,越来越多的的服务器、网络设备等硬件资源以及数据库、中间件等软件资源被增加到系统架构中,庞大的业务系统架构,给运行维护增加一定的难度,企业对运维人员的需求随之增加,且业务系统运行状态周报、月报难以统计、导出,企业管理者难以掌握系统整体运行状态,不仅提高了企业的人力成本,同时也给企业管理带来了管控难题,一个行之有效的集中监控体系迫在眉睫。
对于运维人员来说,借助于集中监控解决方案,能够正确和及时地了解系统的运行状态,发现影响整体系统运行的瓶颈,进行必要的系统优化和配置变更,甚至为系统的升级和扩容提供依据。强有力的监控、诊断和告警工具还可以帮助运行维护人员快速地分析出应用故障原因,把他们从繁杂重复的劳动中解放出来。
如果能够建立起一套坚实的监控系统来管理业务系统,能够实时地了解系统的运行状态,并针对可能发生的灾难加以警示,运维技术人员就有机会迅速启动灾难响应方案或者着手排除复杂的性能故障,提高工作效率,这对于任何规模的企业而言都极具巨大的实际价值。
一个成熟的监控系统,能够在日常IT管理中给运维人员提供运维对象的实时信息,在被监控对象状态异常时通过一些灵活的告警机制及时的告知到运维人员,让运维人员在第一时间发现问题并快速响应,能够在日常运维中可视化的展示被监控对象的信息,生成可视化的报表给运维人员及管理人员查看、分析及决策。因此,一个监控工具就应该具备采集信息、存储信息、展示信息、报警通知等功能,而本文介绍的Zabbix就可以做到这些,当然监控系统作为一个成熟的运维产品,除了Zabbix之外,市面上有很多其他选择,包括NagiosCactiGangliaOpen-falcon(小米开源产品)等等

Zabbix简介

Zabbix4_Banner

  • Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标。
  • Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
  • Zabbix完全开源免费,是目前国内互联网用户中使用最广的监控软件。
  • Zabbix 官方最新软件版本: Zabbix 4.4 (2019-11)
  • Zabbix中文官网: https://www.zabbix.com/cn/
  • Zabbix中文手册(4.0版本): https://www.zabbix.com/documentation/4.0/zh/manual/concepts

功能特性

  • 指标收集 —— 从任何设备、系统、应用程序上进行指标采集
  • 问题检测 —— 定义智能阈值
  • 可视化 —— 单一界面管理平台
  • 告警和修复 —— 确保及时、有效的告警
  • 安全和认证 —— 保护所有层级的数据
  • 轻松搭建部署 —— 大批模板,开箱即用,节省宝贵的时间
  • 自动发现 —— 自动监控大型动态环境
  • 分布式监控 —— 无限制扩展
  • Zabbix API —— 将Zabbix集成到IT环境的其他任何部分

监控对象

上面我们通过官方的介绍对Zabbix有了一个简单的了解,那我们能够通过Zabbix监控哪些设备或服务呢?
全面监控
在实际应用中,我们肯定希望只要与我们业务有关的硬件、软件资源都被监控,如服务器、交换机、路由器、UPS、VMware虚拟机、Java应用等等,我们需要监控它们就需要与他们进行通讯,而由于硬件的不同软件的差异导致我们无法用统一的方法去监控它们,比方说:我们可以使用ssh远程与linux系统的服务器建立通讯,我们想连接安装了Windows服务器建立通讯就得用rdp工具,可是如果被监控对象是一台安装了其他操作系统的服务器呢,如果被监控对象是一台打印机或交换机呢,因此,监控程序需要能够与多种软硬件通讯才能满足我们的监控需求。Zabbix想要全面的监控这些对象,亦需要能够通过各种方法与它们进行通讯。
那么Zabbix能够支持哪些通讯方式呢?(监控项类型)
Zabbix目前主要支持Agents 、SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控;

  • Agent: 通过专用的代理程序进行监控,与常见的master/agent模型类似,被监控对象需要安装Agent端,推荐首选监控方式。
  • SNMP: 通过SNMP协议与进行监控,SNMP是"Simple Network Management Protocol"的缩写,中文含义是"简单网络管理协议"。通常来说,我们无法在交换机、路由器、打印机这种硬件设备上安装agent,但是这些硬件往往都支持SNMP协议, Zabbix就可以通过该协议与交换机、路由器等硬件进行通讯。
  • IPMI: 通过IPMI接口进行监控,Zabbix可以通过标准的IPMI硬件接口,监控对象的物理特征,如电压、温度、风扇状态、电源状态等。
  • JMX: 通过JMX进行监控,JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。监控JVM虚拟机时,使用这种方法进行通讯。
  • VMware(Zabbix2.2.0开始支持): Zabbix 可以使用 low-level discovery 自动发现 VMware hypervisors 和 虚拟机,并根据事先定义的主机原型,为这些虚拟机建立 Host,添加监控。虚拟机监控分两个步骤完成:首先,Zabbix 是通过 vmware collector 进程来监控虚拟机。这些进程通过 SOAP 协议从 VMware Web 服务获取必要的信息,对其进行预处理并存储到 Zabbix server 共享内存中。然后,zabbix pollers 通过 zabbix 简单检查 VMware keys 来检索这些数据。
    官方监控项概述
    通常Zabbix使用以上几种方法与被监控对象建立通讯并获取监控数据,除此之外,Zabbix还支持ODBC监控及SSH、Telnet、ICMP Ping检测等,ODBC主要Zabbix是针对数据库的监控,SSH、Telnet检测不需要Zabbix代理。

功能组件

Zabbix由几个主要的软件组件构成,这些组件的功能如下。

  1. Zabbix Server: Zabbix server 是Agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。

  2. Zabbix Database: 所有配置信息和Zabbix收集到的数据都被存储在数据库中。

  3. Zabbix Web: 为了从任何地方和任何平台都可以轻松的访问Zabbix, Zabbix提供基于Web的管理界面。该界面是Zabbix Server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。
    *如果使用SQLite,Zabbix Web界面必须要跟Zabbix Server运行在同一台物理机器上。

  4. Zabbix Proxy: Zabbix proxy 可以替Zabbix Server收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分;当然,Proxy代理服务器可以帮助单台Zabbix Server分担负载压力。

  5. Zabbix Agent: Zabbix agents监控代理 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server,Zabbix agents可以执行被动和主动两种检查方式。在被动模式中agent应答数据请求,Zabbix server(或者proxy)询问agent数据,如CPU 的负载情况,然后Zabbix agent回送结果。主动模式处理过程将相对复杂。 Agent必须首先从Zabbix sever索取监控项列表以进行独立处理,然后周期性地发送新的值给Server,两种模式不冲突。

  6. 数据流: 除了上述基础组件之外,了解Zabbix内部的数据流同样很重要。监控方面,为了创建一个监控项(item)用于采集数据,必须先创建一个主机(host)。告警方面,在监控项里创建触发器(trigger),通过触发器(trigger)来触发告警动作(action)。 因此,如果你想收到Server X CPU负载过高的告警,你必须: 1.为Server X创建一个host并关联一个用于对CPU进行监控的监控项(Item)。 2. 创建一个Trigger,设置成当CPU负载过高时会触发 3. Trigger被触发,发送告警邮件 虽然看起来有很多步骤,但是使用模板的话操作起来其实很简单,Zabbix这样的设计使得配置机制非常灵活易用。

监控流程

一般情况下,我们将Zabbix agent 部署到被监控的主机上,由Agent采集数据并报告给Zabbix Server,Zabbix Server将从Agent端接收到的信息存储于Zabbix的数据库中,我们称之为Zabbix Database,如果管理员需要查看各种监控的信息,则需要Zabbix的Web GUI,我们称之为Zabbix Web,Zabbix Web是用PHP写的,因此,如果想要使用Zabbix展示监控信息,则需要依赖LAMP/LNMP环境,结构图示如下:
Server-Client架构

当监控规模变得庞大时,我们可能有成千上万台设备需要监控,这时我们可能会想部署多套Zabbix系统进行监控,如果部署多套Zabbix监控系统,那么监控压力将会被分担,但是,这些监控的对象将会被尽量平均的分配到不同的监控系统中,这个时候,我们就无法通过统一的监控入口去监控这些对象了,虽然分担了压力,但是也增加了监控工作的复杂度。Zabbix的分布式监控功能则有效的解决了这个问题,Zabbix通过Zabbix Proxy为IT基础设施提供有效和可用的分布式监控,代理(Proxy)可用于代替Zabbix server本地收集数据,然后将数据报告给服务器,在一定程度上分担了Zabbix Server 的压力, 在某些情境下,也用Proxy来监控远程区域设备,架构图示如下。

Server-Proxy-Client架构

常见进程

默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选,这个需要另外安装。下面分别介绍下他们各自的作用:

  • zabbix_agentd:
    客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
  • zabbix_get:
    Zabbix get 是一种命令行应用,它可以用于与Zabbix Agent进行通信,并从Agent那里获取所需的信息,该应用通常被用于Zabbix Agent故障排除。例如在Server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。
  • zabbix_sender:
    Zabbix sender 是一种命令行应用,它可以将性能数据发送到Zabbix Server进行处理。 该应用通常用在长时间运行的用户脚本,用于定期发送可用性和性能数据。
  • zabbix_server:
    Zabbix server是整个Zabbix软件的核心程序。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server
    *当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。
  • zabbix_proxy:
    zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。
  • zabbix_java_gateway:
    zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似Agent,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。

总结

本文主要对Zabbix的组件及工作原理进行了详细介绍,主要是方便了解Zabbix一些基本概念,文中没有对Zabbix功能进行过多详细的介绍,因为没有实际应用时很难理解,能在后续实际的使用场景中再做说明。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值