主流开源监控系统一览

减少故障有两个层面的意思,一个是做好常态预防,不让故障发生;另一个是如果故障发生,要能尽快止损,减少故障时长。而监控的典型作用,就是帮助我们发现及定位故障,这两个环节对于减少故障时长至关重要。

运维人员和研发人员是典型的关注稳定性的人,不过侧重点不同。一般来说,运维人员负责全公司所有业务的运维工作,研发人员只负责自己业务线的研发工作,所以发生故障的时候,运维人员更希望快速找到问题根因,及时止损。而研发人员,更希望能“自证清白”。不管出于何种目的,监控都是不可或缺的工具。

业务程序也有多种暴露方式,比较知名的埋点工具是 StatsD、Prometheus。当然,有些语言会有适合自己的更易用的埋点工具,比如 Java 生态的 Micrometer。业务程序除了指标埋点监控,通常还有更丰富的观测手段,比如引入链路追踪的框架:Zipkin、Jaeger、Skywalking 等。当然了,所有软件都可以使用日志的方式来暴露健康状况,不过这种方式最昂贵,数据非结构化,适合排查问题,但不适合作为指标数据的来源。

指标监控只能处理数字,但它的历史数据存储成本较低,实时性好,生态庞大,是可观测性领域里最重要的一根支柱。

另一个重要的可观测性支柱是日志。从日志中可以得到很多信息,对于了解软件的运行情况、业务的运营情况都很关键。比如操作系统的日志、接入层的日志、服务运行日志,都是重要的数据源。

可观测性最后一大支柱是链路追踪。随着微服务的普及,原本的单体应用被拆分成很多个小的服务,服务之间有错综复杂的调用关系,一个问题具体是哪个模块导致的,排查起来其实非常困难。

链路追踪的思路是以请求串联上下游模块,为每个请求生成一个随机字符串作为请求 ID。服务之间互相调用的时候,把这个 ID 逐层往下传递,每层分别耗费了多长时间,是否正常处理,都可以收集起来附到这个请求 ID 上。后面追查问题时,拿着请求 ID 就可以把串联的所有信息提取出来。

Zabbix 是一个企业级的开源解决方案,擅长设备、网络、中间件的监控。因为前几年使用的监控系统主要就是用来监控设备和中间件的,所以 Zabbix 在国内应用非常广泛。

 Zabbix 的优点

  • 对各种设备的兼容性较好,Agentd 不但可以在 Windows、Linux 上运行,也可以在 Aix 上运行。
  • 架构简单,使用数据库做时序数据存储,易于维护,备份和转储都比较容易。
  • 社区庞大,资料多。Zabbix 大概是 2012 年开源的,因为发展的时间比较久,在网上可以找到海量的资源。

Zabbix 的缺点

  • 使用数据库做存储,无法水平扩展,容量有限。如果采集频率较高,比如 10 秒采集一次,上限大约可以监控 600 台设备,还需要把数据库部署在一个很高配的机器上,比如 SSD 或者 NVMe 的盘才可以。
  • Zabbix 面向资产的管理逻辑,监控指标的数据结构较为固化,没有灵活的标签设计,面对云原生架构下动态多变的环境,显得力不从心。

Open-Falcon 基于 RRDtool 做了一个分布式时序存储组件 Graph。这种做法可以把多台机器组成一个集群,大幅提升海量数据的处理能力。前面负责转发的组件是 Transfer,Transfer 对监控数据求取一个唯一 ID,再对 ID 做哈希,就可以生成监控数据和 Graph 实例的对应关系,这就是 Open-Falcon 架构中最核心的分片逻辑。

 Open-Falcon 的优点

  • 可以处理大规模监控场景,比 Zabbix 的容量要大得多,不仅可以处理设备、中间件层面的监控,也可以处理应用层面的监控,最终替换掉了小米内部的 perfcounter 和三套 Zabbix。
  • 组件拆分得比较散,大都是用 Go 语言开发的,Web 部分是用 Python,易于做二次开发。

Open-Falcon 的缺点

  • 生态不够庞大,是小米公司在主导,很多公司做了二次开发,但是都没有回馈社区,有一些贡献者,但数量相对较少。
  • 开源软件的治理架构不够优秀,小米公司的核心开发人员离职,项目就停滞不前了,小米公司后续也没有大的治理投入,相比托管在基金会的项目,缺少了生命力。

 Prometheus 就是为 Kubernetes 而生的。它针对 Kubernetes 做了直接的支持,提供了多种服务发现机制,大幅简化了 Kubernetes 的监控。

在 Kubernetes 环境下,Pod 创建和销毁非常频繁,监控指标生命周期大幅缩短,这导致类似 Zabbix 这种面向资产的监控系统力不从心,而且云原生环境下大都是微服务设计,服务数量变多,指标量也呈爆炸态势,这就对时序数据存储提出了非常高的要求。

 Prometheus 的优点

  • 对 Kubernetes 支持得很好,目前来看,Prometheus 就是 Kubernetes 监控的标配。
  • 生态庞大,有各种各样的 Exporter,支持各种各样的时序库作为后端的 Backend 存储,也有很好的支持多种不同语言的 SDK,供业务代码嵌入埋点。

 Prometheus 的缺点

  • 易用性差一些,比如告警策略需要修改配置文件,协同起来比较麻烦。当然了,对于 IaC 落地较好的公司,反而认为这样更好,不过在国内当下的环境来看,还无法走得这么靠前,大家还是更喜欢用 Web 界面来查看监控数据、管理告警规则。
  • Exporter 参差不齐,通常是一个监控目标一个 Exporter,管理起来成本比较高。
  • 容量问题,Prometheus 默认只提供单机时序库,集群方案需要依赖其他的时序库。

Nightingale  可以看做是 Open-Falcon  的一个延续,因为开发人员是一拨人,不过两个软件的定位截然不同,Kubernetes  环境下,Prometheus  已经大行其道,再重复造轮子意义不大,所以 Nightingale  的做法是和 Prometheus  做良好的整合,打造一个更完备的方案。当下的架构,主要是把 Prometheus  当成一个时序库,作为 Nightingale  的一个数据源。如果不使用 Prometheus 也没问题,比如使用 VictoriaMetrics  作为时序库,也是很多公司的选择。

 Nightingale 的优点

  • 有比较完备的 UI,有权限控制,产品功能比较完备,可以作为公司级统一的监控产品让所有团队共同使用。Prometheus 一般是每个团队自己用自己的,比较方便。如果一个公司用同一套 Prometheus 系统来解决监控需求会比较麻烦,容易出现我们上面说的协同问题,而 Nightingale 在协同方面做得相对好一些。
  • 兼容并包,设计上比较开放,支持对接 Categraf、Telegraf、Grafana-Agent、Datadog-Agent 等采集器,还有 Prometheus 生态的各种 Exporter,时序库支持对接 Prometheus、VictoriaMetrics、M3DB、Thanos 等。

Nightingale 的缺点

  • 考虑到机房网络割裂问题,告警引擎单独拆出一个模块下沉部署到各个机房,但是很多中小公司无需这么复杂的架构,部署维护起来比较麻烦。
  • 告警事件发送缺少聚合降噪收敛逻辑,官方的解释是未来会单独做一个事件中心的产品,支持 Nightingale、Zabbix、Prometheus 等多种数据源的告警事件,但目前还没有放出。

每种方案各有优缺点,如果你的主要需求是监控设备,推荐你使用 Zabbix;如果你的主要需求是监控 Kubernetes,可以选择 Prometheus+Grafana;如果你既要兼顾传统设备、中间件监控场景,又要兼顾 Kubernetes,做成公司级方案,推荐你使用 Nightingale。

此文章为7月Day27学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用vscode进行远程开发服务器配置

1.下载vscode 2.给vscode 安装python 和 remote ssh插件 remote—SSH扩展允许您使用任何具有SSH服务器的远程机器作为您的开发环境。 3.安装remote-SSH插件之后,vscode左侧出现电脑图标,即为远程服务,按图依次点击,进行服务器配置…

Redis-基于内存的key-value结构数据库

读写性高,适合存储热点性高的数据 也称为结构化的NoSql数据库 redis依赖环境:gcc NoSql 非关系型数据库,是关系型数据库的补充 关系型(RDBMS)非关系型(NoSql)MySqlRedisOracleMongo dbDB2MemCachedSQLServer 常用命令 Redis 教程_redi…

机器学习深入浅出

机器学习是一种人工智能的分支,它使用算法和数学模型来让计算机自主学习数据并做出预测和决策。这种技术正在被广泛应用于各种领域,包括自然语言处理、计算机视觉、语音识别、医学诊断和金融预测等。在本篇博客中,我们将介绍机器学习的基本概…

踩坑(5)整合kafka 报错 java.net.UnknownHostException: 不知道这样的主机

java.net.UnknownHostException: 不知道这样的主机。 (5c0c3c629db9)at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:933) ~[na:na]at java.ba…

【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)

请求参数传json对象,后端采用(pojo)接受的前提条件: 1.Spring Boot 的启动类加注解:EnableWebMvc 2.Spring Boot 的控制层接受参数采用:RequestBody Spring Boot 启动类:加注解:En…

论文阅读 - Few-shot Network Anomaly Detection via Cross-network Meta-learning

论文链接:https://arxiv.org/pdf/2102.11165.pdf 目录 摘要: 引言 问题定义 方法 Graph Deviation Networks Cross-network Meta-learning 摘要: 网络异常检测旨在找到与绝大多数行为显着不同的网络元素(例如节点、边、子图…

数字化失败最关键原因是是老板问题,技术问题还是产品问题?

大家都知道失败率高达80%,这太夸张了,ERP导入都没有这个失败率,那到底为什么呢?​ 数字化失败的最关键原因可能因具体环境和情况而异。题主提到的每个因素(老板问题、技术问题和产品问题)都可能以不同的方…

Java三大特征之继承【超详细】

文章目录 一、继承概念二、继承的语法三、父类成员访问3.1子类中访问父类的成员变量3.2子类和父类成员变量同名3.3子类中访问父类的成员方法 四、super关键字五、子类构造方法六、super和this七、再谈初始化八、protected 关键字九、继承方式十、final 关键字十一、继承与组合 …

IntelliJ IDEA快捷键大全 + 动图演示!

一、构建/编译 Ctrl F9:构建项目该快捷键,等同于菜单【Build】—>【Build Project】 执行该命令后,IntelliJ IDEA 会编译项目中所有类,并将编译结果输出到out目录中。IntelliJ IDEA 支持增量构建,会在上次构建的基…

GC 深入(小白,对gc有一个进一步的了解)

垃圾回收器的搭配 一般固定 一般这年轻代垃圾回收器,老年代垃圾回收器,如上图搭配着使用 1.8呢默认就是最后边那哥俩 jvm调优 一个就是增加吞吐量 一个就是减少STW的时间。 三色标记算法(理解根可达算法) 并发的可达性分析 有…

Nacos配置中心设置Mongodb

目录 1.common模块导入nacos config依赖 2.common模块新建bootstrap.yaml 3.在自己的模块导入common模块依赖 4.打开nacos新建配置,发布 5.运行服务并测试 效果:在部署完成后,其他人可以自动连接到你本地mongoDB数据库,无需再…

小程序原生实现左右锚点联动

效果 wxml <view classbox><scroll-view scroll-y scroll-with-animation style"width:25%"><view classnav><view wx:for"{{navList}}" wx:keyindex class"title {{index active ?select:}}"data-index{{index}} bin…

Day02-作业(JavaScriptVue)

作业1&#xff1a;实现5秒之后&#xff0c;当前页面直接跳转到官网首页&#xff08;首页地址&#xff1a;https://www.itcast.cn&#xff09; 提示&#xff1a; 5秒之后&#xff0c;才触发某一个动作 素材&#xff1a; <!DOCTYPE html> <html lang"en"&g…

基于Amoeba读写分离(三十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、实验&#xff1a; 总结 前言 今天要学的是基于Amoeba读写分离。Amoeba是一个开源的关系型数据库管理系统&#xff0c;它支持读写分离的架构。在Amoe…

使用DeferredResult来设计异步接口

文章目录 DeferredResult 介绍思路Demo搭建1.定义一个抽象的请求体2.定义一个接口返回体3.定义一个接口请求体继承抽象类AsynTaskBaseRequest<T<T>>4.定义seveice类&#xff0c;并声明一个异步方法&#xff08;Async注解&#xff09;5.定义一个返回DeferredResult的…

一篇文章带你搞懂Java多态的概念、优点、实现多态的方式、以及不同方式的区别

一篇文章带你搞懂Java多态的概念、优点、使用场景 基本概念 ​ **多态&#xff08;Polymorphism&#xff09;是面向对象编程的一个重要特性&#xff0c;它指的是同一个行为具有多个不同表现形式或形态的能力。**它允许我们使用父类的引用变量来引用子类的对象&#xff0c;并根…

SpringBoot第29讲:SpringBoot集成MySQL - MyBatis-Plus代码自动生成

SpringBoot第29讲&#xff1a;SpringBoot集成MySQL - MyBatis-Plus代码自动生成 本文是SpringBoot第29讲&#xff0c;主要介绍 MyBatis-Plus代码自动生成&#xff0c;以及产生此类代码生成工具的背景和此类工具的基本实现原理。 文章目录 SpringBoot第29讲&#xff1a;SpringBo…

STM32(HAL)串口中断接收

目录 1、简介 2 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 1、简介 本文对HAL串口中断函数进行介绍。 2 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 串口外设配置 2.3 项目生成 3、KEIL端程序整合 首先在main.c文件中进行…

一套AI+医疗模式的医院智慧导诊系统源码:springboot+redis+mybatis plus+mysql

一套AI医疗模式的医院智慧导诊系统源码 相关技术&#xff1a; 技术架构&#xff1a;springbootredismybatis plusmysqlRocketMQ 开发语言&#xff1a;java 开发工具&#xff1a;IDEA 前端框架&#xff1a;Uniapp 后端框架&#xff1a;springboot 数 据 库&#xff1a;mys…

华为OD机试真题 JavaScript 实现【名字的漂亮度】【牛客练习题】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试&#xff0c;发现新题目&#x…