当前位置: 首页 > news >正文

主流开源监控系统一览

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

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

业务程序也有多种暴露方式,比较知名的埋点工具是 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学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。

相关文章:

主流开源监控系统一览

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

爬虫原理详解及requests抓包工具用法介绍

文章目录 一、什么是爬虫?二、爬虫的分类三、网址的构成四、爬虫的基本步骤五、动态页面和静态页面六、伪装请求头七、requests库介绍1. 概念:2. 安装方式(使用镜像源):3. 基本使用:4. response对象对应的方…...

tinkerCAD案例:31. 3D 基元形状简介

tinkerCAD案例:31. 3D 基元形状简介 1 将一个想法从头脑带到现实世界是一次令人兴奋的冒险。在 Tinkercad 中,这将从一个新的设计开始。 在新设计中,简单的原始形状可以通过不同的方式组合成更复杂的形状。 在这个项目中,你将探索…...

Vue2基础一、快速入门

零、文章目录 Vue2基础一、快速入门 1、Vue 概念 (1)为什么学 前端必备技能 岗位多,绝大互联网公司都在使用Vue 提高开发效率 高薪必备技能(Vue2Vue3) (2)Vue是什么 **概念:…...

【POJ-3279】Fliptile(递推+搜索)

POJ-3279. Fliptile(递推搜索) Vjudge链接 题目描述 农场主约翰知道,一头智力得到满足的奶牛是一头快乐的奶牛,它会产更多的奶。他为奶牛安排了一项脑力活动,让它们摆弄一个 M N M N MN 的方格 ( 1 ≤ M ≤ 15 …...

522个matplotlib绘图案例,包含:折线图、散点图、条形图、饼图、直方图、3D图等,源码可直接运行!

文章目录 matplotlib介绍图表介绍折线图(Line Plot)散点图(Scatter Plot)条形图(Bar Plot)饼图(Pie Chart)直方图(Histogram)箱线图(Box Plot&…...

windows安装Elasticsearch8.9.0

官网解压安装好路径(非中文,无空格) 可参考 言之有李LAX csdn http://t.csdn.cn/S2oju本人使用jdk17 修改配置elasticsearch.yml xpack.security.enabled: false xpack.security.http.ssl:enabled: false直接点击bin\elasticsearch.bat…...

用Delphi编写一个通用视频转换工具,让视频格式转换变得更简单

用Delphi编写的简单视频格式转换程序,它使用TComboBox、TOpenDialog和TSaveDialog组件来选择转换格式、选择源视频文件和选择目标视频文件。程序还使用TEdit组件允许用户输入参数,然后将这些组件中的信息拼接成转换命令并在DOS窗口中运行它。 procedure…...

Kafka系列之:安装Know Streaming详细步骤

Kafka系列之:安装Know Streaming详细步骤 一、相关技术博客二、安装elasticsearch1.下载elasticsearch2.创建数据目录3.创建es用户4.修改最大文件数5.解压elasticsearch6.赋予es用户目录权限7.修改es配置8.切换es用户启动elasticsearch三、安装KnowStreaming1.下载KnowStreami…...

绝杀 GETPOST 嵌套的 JSON 参数

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序中的数据传输。在HTTP数据包信息传递时,JSON扮演着非常正常的角色,因为它是一种通用的数据格式,可以被多种编程语言和应用程…...

Spring 项目过程及如何使用 Spring

文章目录 1.创建 Spring 项目步骤1.1 创建 Maven 项目1.2添加 Spring 框架支持1.3 添加启动项2.如何使用 Spring2.1 存储 Bean 对象2.1.1 创建 Bean对象2.1.2 将 Bean对象注册到容器中 2.2 获取并使用 Bean对象2.2.1 使用 ApplicationContext 获取对象2.2.2 使用 BeanFactory 获…...

信息学奥赛一本通——1258:【例9.2】数字金字塔

文章目录 题目【题目描述】【输入】【输出】【输入样例】【输出样例】 AC代码 题目 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。 在上面…...

selenium官网文档阅读总结(day 2)

1.selenium元素定位方法 1.1selenium命令 当我们使用chormdriver打开网页后,接下来就要用python操作元素,模拟用户会作出的操作,这些操作元素的方法就是命令。比如 (1) click:点击(按钮,单选框&#xff…...

VMware虚拟机安装VMware tools

一、挂载光驱 执行以下命令来创建 /mnt/cdrom 目录: mkdir -p /mnt/cdrom-p 参数会确保如果 /mnt/cdrom 的上级目录(例如 /mnt)不存在的话也会被创建。 然后,你可以再次尝试挂载光盘: mount /dev/sr0 /mnt/cdrom这次…...

【Linux命令200例】rm用来删除文件或目录(谨慎使用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…...

行云管家荣获CFS第十二届财经峰会 “2023产品科技创新奖”

7月26日至27日,CFS第十二届财经峰会暨2023可持续商业大会在京盛大召开。峰会主题为“激活高质量发展澎湃活力”,超1000位政商领袖、专家学者、企业及媒体代表出席了本次盛会,共同分享新技术新产品新趋势、研判全球新挑战与新变局下企业的机遇…...

uniapp禁止页面滚动

用 touchmove.stop.prevent“moveHandle”&#xff0c;moveHandle 可以用来处理 touchmove 的事件&#xff0c;也可以是一个空函数。 <viewclass“mask” touchmove.stop.prevent“moveHandle”>...

ModuleNotFoundError: No module named ‘_sqlite3‘

前言 遇到报错信息如下&#xff1a; ModuleNotFoundError: No module named _sqlite3解决方式 参考解决方式&#xff1a; https://blog.csdn.net/jaket5219999/article/details/53512071 find / -name _sqlite*.socp /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36…...

Rust的入门篇(下)

这篇博客是rust入门篇下 45. 生命周期注释 // 生命周期// 下面代码不能通过编译 // longer 函数取 s1 和 s2 两个字符串切片中较长的一个返回其引用值 // 返回值引用可能会返回过期的引用 // fn longer(s1: &str, s2: &str) -> &str { // if s2.len() >…...

PYTHON-logging-工具类-支持中文字符控制台输出和文件写入-不会导致乱码

import logging import sys import os import time from logging.handlers import RotatingFileHandler import iodef get_logger(tag):# 创建一个新的输出流&#xff0c;并指定编码为UTF-8sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)accPath logsif not…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...