概述
Zabbix诞生于年。核心组件用C语言开发,Web端用PHP开发。它是旧监控系统的优秀代表,具有全面的监控功能和广泛的使用。它具有多种监控网络参数,可以监控网络、物理服务器、虚拟机、应用程序、服务、数据库、网站、云等。
监控作用
实时采集监控数据:包括硬件、操作系统、中间件、应用程序等维度的数据。
监控状态实时反馈:通过对采集数据的多维统计和可视化显示,实时反映监控对象的状态是正常还是异常。
预测故障和报警:提前预测故障风险,及时发送报警信息。
辅助故障定位:故障发生时提供各种指标数据,协助故障分析和定位。
辅助性能调优:为性能调优提供数据支持,如慢SQL、接口响应时间等。
辅助容量规划:为服务器、中间件和应用集群的容量规划提供数据支持。
辅助自动运维:根据配置的SLA,为智能运维(如自动扩容或服务降级)提供数据支持。
使用理解
了解监控对象的工作原理:您应该对监控对象有基本的了解,并了解其工作原理。例如,如果要监视JVM,必须了解JVM的堆内存结构和垃圾收集机制。
确定监测对象的指标:哪些指标明确用于描述监测对象的状态?例如,如果要监视接口,可以使用诸如请求数、时间消耗、超时和异常等指标。
定义合理的报警阈值和级别:需要报警的阈值是多少?相应的故障级别是多少?不需要处理的警报不是好警报。由此可见,确定一个合理的阈值是多么重要。否则,只会降低运行和维护效率,或使监控系统失去作用。
建立完善的故障处理流程:接到故障报警后,必须有相应的处理流程和一次呼叫机制,使故障得到及时跟进。
监控对象和指标
运维侧重于硬件和基础监控,研发侧重于各种中间件和应用层的监控,产品侧重于核心业务指标的监控。
硬件监控:电源状态、CPU状态、机器温度、风扇状态、物理磁盘、raid状态、内存状态和网卡状态。
服务器基本监控
CPU:单CPU和总体使用率
内存:已用内存、可用内存
磁盘:磁盘利用率、磁盘读/写吞吐量
网络:出口流量、入口流量、TCP连接状态
数据库监控:数据库连接、QPS、TPS、并行处理的会话、缓存命中率、主从延迟、锁定状态和慢速查询。
中间件监控
Nginx:活动连接数、等待连接数、断开连接数、请求数、时间消耗、5XX错误率
Tomcat:最大线程、当前线程、请求、时间消耗、错误、堆内存使用、GC时间和时间消耗
缓存(Redis):成功连接数、阻塞连接数、已用内存、内存碎片率、请求数、时间消耗、缓存命中率
消息队列(Kafka):连接数、队列数、生产速率、消耗速率和消息累积
应用程序监控
HTTP接口:URL生存、请求量、时间消耗和异常量
RPC接口:请求数量、时间消耗、超时数量、拒绝数量
JVM:GC时间、GC消耗、每个内存区域的大小、当前线程数、死锁线程数
线程池:活动线程数、任务队列大小、任务执行时间、被拒绝任务数
连接池:总连接数,活动连接数
日志监视:访问日志、错误日志
业务指标:取决于业务,如PV、订单数量等
架构组成
Zabbix服务器:核心组件,Zabbis软件的中心进程,执行监控,与Zabbi代理和代理交互,从代理和代理接收监控数据,还支持JMX、SNMP等协议直接收集数据;负责数据和报警触发的汇总和存储。
数据库:Zabbix收集的所有配置信息和数据都存储在数据库中,支持MySQL、Oracle等关系数据库,并逐步支持时态数据库。
前端:Zabbix的Web界面,提供基于Web的可视监控配置、演示和报警。
Zabbix代理:它可以取代Zabbis服务器来收集性能监视项数据。它是可选的。如果有许多受监控的机器,您可以使用代理进行分布式监控,以减轻服务器上的压力。
Zabbix代理:部署在被监视的目标上,以主动监视本地资源和应用程序进程(硬盘、内存、处理器统计信息等),收集本地数据并将其发送到代理或服务器。数据收集模式支持主动推送和被动拉取模式。自Zabbix4.4以来,有两种类型的代理可用:Zabbix代理(轻量级,在许多平台上受支持,用C编写)和Zabbix-agent2(非常灵活,易于使用的插件扩展,用Go编写)。
被动模式:代理响应数据请求。Zabbix服务器(或代理)请求数据,如CPU负载,然后Zabbixagent返回结果。
主动模式:处理过程将相对复杂。代理必须首先从Zabbix服务器获取监控项目列表以进行独立处理,然后定期将收集到的新值发送到Zabbis服务器。
ZabbixAPI:使用JSONRPC协议创建、更新和获取Zabbis对象(如主机、监视项、图表等)或执行任何其他自定义任务。
ZabbixJava网关:获取主机的JMX计数器的值。Zabbix服务器向ZabbixJava网关发送请求,并使用JMX管理API远程查询相关应用程序。
Zabbix发送器:一个命令行应用程序,用于将性能数据推送到ZabbixServer进行处理;它通常用于在耗时的用户脚本中定期推送可用性和性能数据。
Zabbixget:命令行应用程序,可用于与Zabbix-agent通信并从Zabbixagent获取所需信息;它通常用于排除Zabbix代理的故障。
常用监控软件分析
我们以前学过普罗米修斯。在这里,我们将结合Zabbix和Openfalcon简单分析利弊
Zabbix公司
性能瓶颈:当机器量或业务量很大时,关系数据库的写入一定是瓶颈。
有限的应用层监控支持:如果您想进行侵入式的应用程序掩埋和收集(例如监控路径池或接口性能),Zabbix没有提供相应的sdk,编写插件脚本很麻烦。
数据模型并不强大:它不支持标签,并且根据多个维度聚合统计数据和配置警报也不灵活。
方便的二次开发很困难:Zabbix使用C语言,二次开发成本很高。
成熟的产品:它有丰富的文档(包括中文文档)和各种开源数据收集插件,可以覆盖大多数监控场景。
丰富的采集方式:支持Agent、SNMP、JMX、SSH等多种采集方式,支持主动和被动数据传输方式。
扩展性强:支持代理分布式监控,具有代理自动发现功能,插件架构支持用户定义的数据采集脚本。
方便的配置管理:可以通过Web界面进行监控和报警配置,操作简单,使用方便。
有利条件
低等
Openfalcon:是小米于年推出的企业级监控工具,由Go和Python开发。它是一个灵活、高性能和可扩展的新一代监控解决方案。目前,包括小米、美团和滴滴在内的多家公司正在使用它。核心优势在于数据分片功能,可以支持更多的机器和监控项目。
总体开发平均:社区活动不高,版本更新缓慢,支持粒度弱。
安装很复杂:有许多组件。如果您不熟悉整个体系结构,很难一蹴而就。
自动采集能力:无需任何Falcon代理配置,即可自动采集服务器的多个基本指标(如CPU、内存等)。
强大的存储容量:底层使用RRDTool,通过一致性哈希对数据进行分区,构建具有强大可扩展性的分布式时间序列数据存储系统。
灵活的数据模型:参考OpenTSDB,在数据模型中引入标签,可以支持多维聚合统计和报警规则设置,大大提高了使用效率。
插件的统一管理:OpenFalcon的插件机制实现了用户自定义脚本的统一管理,可以通过HeartBeatServer分发给代理,降低了用户独立维护脚本的成本。
个性化监控支持:基于代理网关,很容易通过独立的埋设点实现应用层监控(如监控接口的访问和时间消耗)和其他个性化监控要求,易于集成。
普罗米修斯:由谷歌和k8s支持,是集装箱监控的标准配置和主流解决方案。
不完善的功能:普罗米修斯的架构设计从一开始就是简单的,而不是提供集群解决方案、长期持久存储和用户管理。这些都是企业成长是必须具备的特征。目前,它们只能在普罗米修斯身上展开。
网络规划变得复杂:由于普罗米修斯使用Pull模型来拉取数据,这意味着所有受监控的端点都必须是可访问的,并且需要合理规划网络安全配置。
轻量级管理:简单的架构,独立于外部存储,单个服务器节点可以直接工作,并且可以启动二进制文件。它是一个轻量级服务器,易于迁移和维护。
强大的处理能力:监控数据直接存储在PrometheusServer的本地定时数据库中,单个实例可以处理数百万个度量。
灵活的数据模型:与OpenFalcon一样,引入了标签,它属于多维数据模型,更便于聚合统计。
强大的查询语句:PromQL允许您在同一个查询语句中添加、连接和获取多个度量的分位数值。
云环境得到了很好的支持:可以自动找到容器。同时,k8s和etcd等项目为普罗米修斯提供了本地支持,普罗米修s是目前最流行的容器监控解决方案。