微服务监控系统选型:Zabbix、Open-Falcon、Prometheus

news2024/11/27 12:42:18

监控系统的 7 大作用

  • 实时采集监控数据:包括硬件、操作系统、中间件、应用程序等各个维度的数据。
  • 实时反馈监控状态:通过对采集的数据进行多维度统计和可视化展示,能实时体现监控对象的状态是正常还是异常。
  • 预知故障和告警:能够提前预知故障风险,并及时发出告警信息。
  • 辅助定位故障:提供故障发生时的各项指标数据,辅助故障分析和定位。
  • 辅助性能调优:为性能调优提供数据支持,比如慢 SQL,接口响应时间等。
  • 辅助容量规划:为服务器、中间件以及应用集群的容量规划提供数据支撑。
  • 辅助自动化运维:为自动扩容或者根据配置的 SLA 进行服务降级等智能运维提供数据支撑。

 监控的对象和指标

①硬件监控

包括:电源状态、CPU 状态、机器温度、风扇状态、物理磁盘、raid 状态、内存状态、网卡状态。

②服务器基础监控

包括:

  • CPU:单个 CPU 以及整体的使用情况。
  • 内存:已用内存、可用内存。
  • 磁盘:磁盘使用率、磁盘读写的吞吐量。
  • 网络:出口流量、入口流量、TCP 连接状态。

③数据库监控

包括:数据库连接数、QPS、TPS、并行处理的会话数、缓存命中率、主从延时、锁状态、慢查询。

④中间件监控

包括:

  • Nginx:活跃连接数、等待连接数、丢弃连接数、请求量、耗时、5XX 错误率。
  • Tomcat:最大线程数、当前线程数、请求量、耗时、错误量、堆内存使用情况、GC 次数和耗时。
  • 缓存:成功连接数、阻塞连接数、已使用内存、内存碎片率、请求量、耗时、缓存命中率。
  • 消息队列:连接数、队列数、生产速率、消费速率、消息堆积量。

⑤应用监控

包括:

  • HTTP 接口:URL 存活、请求量、耗时、异常量。
  • RPC 接口:请求量、耗时、超时量、拒绝量。
  • JVM:GC 次数、GC 耗时、各个内存区域的大小、当前线程数、死锁线程数。
  • 线程池:活跃线程数、任务队列大小、任务执行耗时、拒绝任务数。
  • 连接池:总连接数、活跃连接数。
  • 日志监控:访问日志、错误日志。
  • 业务指标:视业务来定,比如 PV、订单量等。

监控系统的基本流程

监控一般都包括以下模块:

  • 数据采集:采集的方式有很多种,包括日志埋点进行采集(通过 Logstash、Filebeat 等进行上报和解析),JMX 标准接口输出监控指标,被监控对象提供 REST API 进行数据采集(如 Hadoop、ES),系统命令行,统一的 SDK 进行侵入式的埋点和上报等。
  • 数据传输:将采集的数据以 TCP、UDP 或者 HTTP 协议的形式上报给监控系统,有主动 Push 模式,也有被动 Pull 模式。
  • 数据存储:有使用 MySQL、Oracle 等 RDBMS 存储的,也有使用时序数据库 RRDTool、OpentTSDB、InfluxDB 存储的,还有使用 HBase 存储的。
  • 数据展示:数据指标的图形化展示。
  • 监控告警:灵活的告警设置,以及支持邮件、短信、IM 等多种通知通道。

开源监控系统选型

Zabbix

Zabbix 于 1998 年诞生,核心组件采用 C 语言开发,Web 端采用 PHP 开发。

它属于老牌监控系统中的优秀代表,监控功能很全面,使用也很广泛,差不多有 70% 左右的互联网公司都曾使用过 Zabbix 作为监控解决方案。

先来了解下 Zabbix 的架构设计:

Zabbix 架构图如上:

  • Zabbix Server:核心组件,C 语言编写,负责接收 Agent、Proxy 发送的监控数据,也支持 JMX、SNMP 等多种协议直接采集数据。同时,它还负责数据的汇总存储以及告警触发等。
  • Zabbix Proxy:可选组件,对于被监控机器较多的情况下,可使用 Proxy 进行分布式监控,它能代理 Server 收集部分监控数据,以减轻 Server 的压力。
  • Zabbix Agentd:部署在被监控主机上,用于采集本机的数据并发送给 Proxy 或者 Server,它的插件机制支持用户自定义数据采集脚本。

    Agent 可在 Server 端手动配置,也可以通过自动发现机制被识别。数据收集方式同时支持主动 Push 和被动 Pull 两种模式。

  • Database:用于存储配置信息以及采集到的数据,支持 MySQL、Oracle 等关系型数据库。同时,最新版本的 Zabbix 已经开始支持时序数据库,不过成熟度还不高。
  • Web Server:Zabbix 的 GUI 组件,PHP 编写,提供监控数据的展现和告警配置。

下面是 Zabbix 的优势

  • 产品成熟:由于诞生时间长且使用广泛,拥有丰富的文档资料以及各种开源的数据采集插件,能覆盖绝大部分监控场景。
  • 采集方式丰富:支持 Agent、SNMP、JMX、SSH 等多种采集方式,以及主动和被动的数据传输方式。
  • 较强的扩展性:支持 Proxy 分布式监控,有 Agent 自动发现功能,插件式架构支持用户自定义数据采集脚本。
  • 配置管理方便:能通过 Web 界面进行监控和告警配置,操作方便,上手简单。

下面是 Zabbix 的劣势

  • 性能瓶颈:机器量或者业务量大了后,关系型数据库的写入一定是瓶颈,官方给出的单机上限是 5000 台,个人感觉达不到,尤其现在应用层的指标越来越多。虽然最新版已经开始支持时序数据库,不过成熟度还不高。
  • 应用层监控支持有限:如果想对应用程序做侵入式的埋点和采集(比如监控线程池或者接口性能),Zabbix 没有提供对应的 SDK,通过插件式的脚本也能曲线实现此功能,个人感觉 Zabbix 就不是做这个事的。
  • 数据模型不强大:不支持 Tag,因此没法按多维度进行聚合统计和告警配置,使用起来不灵活。
  • 方便二次开发难度大:Zabbix 采用的是 C 语言,二次开发往往需要熟悉它的数据表结构,基于它提供的 API 更多只能做展示层的定制。

Open-Falcon(小米出品,国内流行)

Open-falcon 是小米 2015 年开源的企业级监控工具,采用 Go 和 Python 语言开发,这是一款灵活、高性能且易扩展的新一代监控方案,目前小米、美团、滴滴等超过 200 家公司在使用它。

小米初期也使用的 Zabbix 进行监控,但是机器量和业务量上来后,Zabbix 就有些力不从心了。

因此,后来自主研发了 Open-Falcon,在架构设计上吸取了 Zabbix 的经验,同时很好地解决了 Zabbix 的诸多痛点。

先来了解下 Open-Falcon 的架构设计:

Open-Falcon 架构图如上:

  • Falcon-agent:数据采集器和收集器,Go 开发,部署在被监控的机器上,支持3种数据采集方式。

    首先它能自动采集单机 200 多个基础监控指标,无需做任何配置;同时支持用户自定义的 Plugin 获取监控数据;此外,用户可通过 HTTP 接口,自主 Push 数据到本机的 proxy-gateway,由 Gateway 转发到 Server。

  • Transfer:数据分发组件,接收客户端发送的数据,分别发送给数据存储组件 Graph 和告警判定组件 Judge,Graph 和 Judge 均采用一致性 Hash 做数据分片,以提高横向扩展能力。同时 Transfer 还支持将数据分发到 OpenTSDB,用于历史归档。
  • Graph:数据存储组件,底层使用 RRDTool(时序数据库)做单个指标的存储,并通过缓存、分批写入磁盘等方式进行了优化。据说一个 Graph 实例能够处理 8W+ 每秒的写入速率。
  • Judge 和 Alarm:告警组件,Judge 对 Transfer 组件上报的数据进行实时计算,判断是否要产生告警事件,Alarm 组件对告警事件进行收敛处理后,将告警消息推送给各个消息通道。
  • API:面向终端用户,收到查询请求后会去 Graph 中查询指标数据,汇总结果后统一返回给用户,屏蔽了存储集群的分片细节。

下面是 Open-Falcon 的优势

  • 自动采集能力:Falcon-agent 能自动采集服务器的 200 多个基础指标(比如 CPU、内存等),无需在 Server 上做任何配置,这一点可以秒杀 Zabbix。
  • 强大的存储能力:底层采用 RRDTool,并且通过一致性 Hash 进行数据分片,构建了一个分布式的时序数据存储系统,可扩展性强。
  • 灵活的数据模型:借鉴 OpenTSDB,数据模型中引入了 Tag,这样能支持多维度的聚合统计以及告警规则设置,大大提高了使用效率。
  • 插件统一管理:Open-Falcon 的插件机制实现了对用户自定义脚本的统一化管理,可通过 HeartBeat Server 分发给 Agent,减轻了使用者自主维护脚本的成本。
  • 个性化监控支持:基于 Proxy-gateway,很容易通过自主埋点实现应用层的监控(比如监控接口的访问量和耗时)和其他个性化监控需求,集成方便。

下面是 Open-Falcon 的劣势

  • 整体发展一般:社区活跃度不算高,同时版本更新慢,有些大厂是基于它的稳定版本直接做二次开发的,关于以后的前景其实有点担忧。
  • UI 不够友好:对于业务线的研发来说,可能只想便捷地完成告警配置和业务监控,但是它把机器分组、策略模板、模板继承等概念全部暴露在 UI 上,感觉在围绕这几个概念设计 UI,理解有点费劲。
  • 安装比较复杂:个人的亲身感受,由于它是从小米内部衍生出来的,虽然去掉了对小米内部系统的依赖,但是组件还是比较多,如果对整个架构不熟悉,安装很难一蹴而就。

Prometheus(号称下一代监控系统)

Prometheus(普罗米修斯)是由前 Google 员工 2015 年正式发布的开源监控系统,采用 Go 语言开发。

它不仅有一个很酷的名字,同时它有 Google 与 K8s 的强力支持,开源社区异常火爆。

Prometheus 于 2016 年加入云原生基金会,是继 K8s 后托管的第二个项目,未来前景被相当看好。

它和 Open-Falcon 最大不同在于:数据采集是基于 Pull 模式的,而不是 Push 模式,并且架构非常简单。

先来了解下 Prometheus 的架构设计:

Prometheus 架构图如上:

  • Prometheus Server:核心组件,用于收集、存储监控数据。它同时支持静态配置和通过 Service Discovery 动态发现来管理监控目标,并从监控目标中获取数据。

    此外,Prometheus Server 也是一个时序数据库,它将监控数据保存在本地磁盘中,并对外提供自定义的 PromQL 语言实现对数据的查询和分析。

  • Exporter:用来采集数据,作用类似于 Agent,区别在于 Prometheus 是基于 Pull 方式拉取采集数据的。

    因此,Exporter 通过 HTTP 服务的形式将监控数据按照标准格式暴露给 Prometheus Server,社区中已经有大量现成的 Exporter 可以直接使用,用户也可以使用各种语言的 client library 自定义实现。

  • Push gateway:主要用于瞬时任务的场景,防止 Prometheus Server 来 Pull 数据之前此类 Short-lived jobs 就已经执行完毕了,因此 Job 可以采用 Push 的方式将监控数据主动汇报给 Push gateway 缓存起来进行中转。
  • Alert Manager:当告警产生时,Prometheus Server 将告警信息推送给 Alert Manager,由它发送告警信息给接收方。
  • Web UI:Prometheus 内置了一个简单的 Web 控制台,可以查询配置信息和指标等,而实际应用中我们通常会将 Prometheus 作为 Grafana 的数据源,创建仪表盘以及查看指标。

下面是 Prometheus 的优势

  • 轻量管理:架构简单,不依赖外部存储,单个服务器节点可直接工作,二进制文件启动即可,属于轻量级的 Server,便于迁移和维护。
  • 较强的处理能力:监控数据直接存储在 Prometheus Server 本地的时序数据库中,单个实例可以处理数百万的 Metrics。
  • 灵活的数据模型:同 Open-Falcon,引入了 Tag,属于多维数据模型,聚合统计更方便。
  • 强大的查询语句:PromQL 允许在同一个查询语句中,对多个 Metrics 进行加法、连接和取分位值等操作。
  • 很好地支持云环境:能自动发现容器,同时 K8s 和 Etcd 等项目都提供了对 Prometheus 的原生支持,是目前容器监控最流行的方案。

下面是 Prometheus 的劣势

  • 功能不够完善:Prometheus 从一开始的架构设计就是要做到简单,不提供集群化方案,长期的持久化存储和用户管理,而这些是企业变大后所必须的特性,目前要做到这些只能在 Prometheus 之上进行扩展。
  • 网络规划变复杂:由于 Prometheus 采用的是 Pull 模型拉取数据,意味着所有被监控的 Endpoint 必须是可达的,需要合理规划网络的安全配置。

选型建议:

  • 先明确清楚你的监控需求:要监控的对象有哪些?机器数量和监控指标有多少?需要具备什么样的告警功能?
  • 监控是一项长期建设的事情,一开始就想做一个 All In One 的监控解决方案,我觉得没有必要。从成本角度考虑,在初期直接使用开源的监控方案即可,先解决有无问题。
  • 从系统成熟度上看,Zabbix 属于老牌的监控系统,资料多,功能全面且稳定,如果机器数量在几百台以内,不用太担心性能问题,另外,采用数据库分区、SSD 硬盘、Proxy 架构、Push 采集模式都可以提高监控性能。
  • Zabbix 在服务器监控方面占绝对优势,可以满足 90% 以上的监控场景,但是应用层的监控似乎并不擅长,比如要监控线程池的状态、某个内部接口的执行时间等,这种通常都要做侵入式埋点。相反,新一代的监控系统 Open-Falcon 和 Prometheus 在这一点做得很好。
  • 从整体表现上来看,新一代监控系统也有明显的优势,比如:灵活的数据模型、更成熟的时序数据库、强大的告警功能,如果之前对 Zabbix 这种传统监控没有技术积累,建议使用 Open-Falcon 或者 Prometheus。
  • Open-Falcon 的核心优势在于数据分片功能,能支撑更多的机器和监控项;Prometheus 则是容器监控方面的标配,有 Google 和 K8s 加持。
  • Zabbix、Open-Falcon 和 Prometheus 都支持和 Grafana 做快速集成,想要美观且强大的可视化体验,可以和 Grafana 进行组合。
  • 用合适的监控系统解决相应的问题即可,可以多套监控同时使用,这种在企业初期很常见。
  • 到中后期,随着机器数据增加和个性化需求增多(比如希望统一监控平台、打通公司的 CMDB 和组织架构关系),往往需要二次开发或者通过监控系统提供的 API 做集成,从这点来看,Open-Falcon 或者 Prometheus 更合适。
  • 如果非要自研,可以多研究下主流监控系统的架构方案,借鉴它们的优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/471236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

08 【Sass语法介绍-混合指令】

1.前言 混合指令在 Sass 中也是一个比较常用的指令,在前面我们讲解的内容中有编写过混合指令 mixin ,本节我们将详细讲解混合指令 mixin 的语法包括定义混合指令和引用混合指令等等,混合指令同样非常好用,我们一起来学习它吧。 …

python 离线安装pyinstaller

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirrorhttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载各类anaconda Archived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu)https://www.lfd.uci.edu/~g…

OpenGL(二)—— Hello World

目录 一、前言 二、渲染 三、GLSL 3.1 数据类型 3.2 编程步骤 四、渲染窗口 五、渲染三角形 5.1 顶点输入 5.2 顶点着色器 5.3 片段着色器 5.4 着色器链接 5.5 顶点属性 5.6 VAO管理顶点属性 5.7 画图 六、渲染四边形 6.1 元素缓冲对象EBO 6.2 运行 一、前言 G…

hbuilder打包IOS上线APP流程

iOS 系统打包流程 1. 创建唯一标识符 (1) 首先,申请苹果开发者账号。没有苹果开发者账号是无法进行 ios 打包上线的。 (2) 进入链接: https://developer.apple.com 这个网址,点击“account”并输入苹果开…

计算机含金量最高的赛事大全,考研和工作都能加持,这才是该参加的比赛

现在计算机相关的赛事数不胜数,但含金量较高的比赛却只有那么几项,做好了你现场就能找到工作,就算是考研也是益处很大,今天给大家总结出来。 就别再折腾一些费时费力但又不讨好的比赛了。 文章目录 一、ACM国际大学生程序设计竞赛…

【0基础学爬虫】爬虫基础之自动化工具 Playwright 的使用

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…

autosar软件分层架构组成--汽车电子

介绍 autosar是汽车软件协会制定的一套软件标准 本文章所有图片来源于网络 一、分层架构 分层:3层 1.上层应用层(Application Layer) 2.中间件RTE(Runtime Environment) 3.下层的基础软件(Basic Software) 中间件R…

电脑截图快捷键有哪些?5大截图方法总结!(2023版)

案例:电脑截图快捷键 【朋友们,最近我总是需要用到电脑截图,有什么比较好用的电脑截图快捷键可以帮助我提高效率的吗?感谢感谢!】 电脑截图是我们日常工作、学习中不可或缺的一项功能。在Windows系统中,快…

python图像处理之形态学梯度、礼帽、黑帽

文章目录 简介实战 简介 腐蚀和膨胀是图像形态学处理的基本运算,这两种运算的复合运算构成了开和闭,而腐蚀、膨胀与原图之间的加减操作,则构成了形态学梯度、礼帽和黑帽计算。 由于这几种函数均基于腐蚀和膨胀,所以其参数均与开…

zynq基于XDMA实现PCIE X8通信方案测速 提供工程源码和QT上位机程序和技术支持

目录 1、前言2、我已有的PCIE方案3、基于zynq架构的PCIE4、总体设计思路和方案5、vivado工程详解6、SDK 工程详解7、驱动安装8、QT上位机软件9、上板调试验证9、福利:工程代码的获取 1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串…

Linux进程通信:信号相关函数

1. kill函数 #include<sys/types.h> #include<signal.h>int kill(pid_t pid, int sig); /* 功能&#xff1a;给进程pid发送信号sig 参数&#xff1a;pid&#xff1a;取值有4种情况&#xff1a;> 0&#xff1a;将sig信号发送给进程号为pid的进程&#xff1b; 0&…

加密解密学习笔记

加密种类 对称加密&#xff0c;分组对称加密算法 加密算法 AES&#xff08;Advanced Encryption Standard&#xff09;高级加密标准 DES&#xff08;Data Encryption Standard&#xff09;数据加密标准 3DES/Triple DEA (Triple Data Encryption Algorithm) 三重数据加密算…

如何分别在macOSWindowsLinux上对OpenSSL源码进行编译

问题描述 如何分别在macOS、Windows、Linux系统上对OpenSSL源码进行编译&#xff1f; 问题解答 编译版本&#xff1a;openssl-1.1.1t 官方源码地址&#xff1a;https://www.openssl.org/source/ 下面流程在三种系统上均进行实际验证&#xff0c;可放心食用。 Windows(MSVC…

在Vue3项目中js-cookie库的使用

文章目录 前言1.安装js-cookie库2.引入、使用js-cookie库 前言 今天分享一下在Vue3项目中引入使用js-cookie。 1.安装js-cookie库 js-cookie官网 安装js-cookie&#xff0c;输入 npm i js-cookie安装完成可以在package.json中看到&#xff1a; 安装以后&#xff0c;就可…

【C++代码之美】你不得不知道的经典代码

1.斐波那契数列 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个…

vite4+vue3:从0到1搭建vben后台管理系统

从0到1带你学习如何搭建vben后台管理系统系列文章目录 一.准备工作:技术选型基础环境的搭建 文章目录 从0到1带你学习如何搭建vben后台管理系统系列文章目录一.准备工作:技术选型基础环境的搭建 前言一、技术选型二、生成基础项目三、安装步骤跑起项目 总结 前言 前端日趋复杂…

鸿蒙Hi3861学习二-程序烧录与日志输出

一、准备事项 开发板&#xff1a;BearPi-Hm Nano windows工具&#xff1a;HiBurn.exe https://pan.baidu.com/s/18OQD1_BvjNKD_J2e2iX3qg?pwdadrs 提取码&#xff1a;adrs windows工具&#xff1a;MobaXterm和RaiDrive 把ubuntu文件夹映射到windows本地。可以参考如下链接&am…

边缘计算在哪些场景的应用?实现了哪些功能

边缘计算是一种分布式计算模型&#xff0c;将数据处理和存储功能从云中心移动到接近数据源的边缘设备上&#xff0c;从而在处理延迟、网络带宽、隐私保护和数据安全等方面带来了许多优势。 智慧油站应用&#xff1a;在加油区部署的吸烟检测、打电话检测、烟火检测、区域入侵检测…

Mybatis-Flex快速入门教程

目录 一、Mybatis-Flex是什么&#xff1f; 二、Mybatis-Flex的有什么特点&#xff1f; 三、Mybatis-Flex和同类框架对比 四、Mybatis-Flex支持的数据库类型 五、快速入门 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;创建数据库 &#xff08;3&#…

攀高识别预警系统 yolov7

攀高识别预警系统通过yolov7网络模型技术&#xff0c;攀高识别预警系统对人员违规抽烟、打架斗殴、异常倒地、翻越围墙、异常聚集、打电话、区域侵入等行为分析等立即抓拍及时触发告警。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队希望它能够同时支持…