什么是可观测性?
现代服务架构常常谈及三个性: 弹性,韧性,可观测性。今天且按下其他两性不表,着重聊一聊可观测性。本文就几个主题对可观测性展开讨论:
- 可观测性是什么
- 可观测性是必须的吗
- 企业的可观测性落地
- 可观测性理念
可观测性是什么?
从概念上讲,可观测性的源自于控制论,即通过获取系统运行数据以推测系统运行状况,进而推断系统状态,进行系统诊断调整的过程和能力。如果要说清楚什么是可观测性,可以与其前辈,监控进行比较。
- 可观测性描述的是系统,而非这个支持可观测性的平台或机制。这是迥异于传统监控的。传统的监控是由外而内的一个过程,传统的企业组织架构,常常会有相对独立的研发部门和运维部门。研发部门负责开发,运维部门负责实施,稳定性由运维部门负责,自然监控也由运维团队设置,这导致一个问题:研发部门开发设计的时候缺少对线上状态监控的考虑,导致运维团队缺乏有效的监控机制来监控系统,只能做一些系统表征的识别判断,进程端口是否存活,cpu内存是否过载等等,但伴随着越来越复杂的软件架构,特别是微服务架构的场景,简单的表征无法有效的反馈系统状态,传统监控力所不逮。而可观测性是个由内向外的过程,其不仅仅是一种观测机制,更强调是一种开发实施观念,即数据采集是由开发部门要保证的,埋点是常态,研发过程要保证关键数据应采尽采,而运维部门只是这些数据的使用者,甚至进一步弱化部门之间的隔阂,运维只提供可观测性的平台和工具,整个可观测性的采集,分析,稳定性的保证都是由研发部门负责的,运维团队逐步进化为SRE。
- 传统监控缺乏对系统的诊断能力,其往往只能观察到问题的点,而无法将这些表象的问题关联,更遑论进行深入的问题分析。常常是一个故障导致告警风暴,关键告警信息隐藏在次生的告警中。可观测性依赖常规的可观测性三要素:Trace, Log, Metric进行信息关联,支持多维度的关联查询,甚至进行线上Profiling的采集,进行实时的系统状态分析。
- 传统监控是由故障驱动的,缺乏预见性。监控所监控的对象,往往是基于经验的,经验之外的场景,只能由故障驱动补全。今日故障添加对inode数量的监控,明日故障添加对socket个数的监控。而为了保证稳定性,很多监控是基于预警设计的,阈值设置的很保守,导致经常性的触发。研发和运维疲于日常的告警排查,最终又没有发现什么问题,常常上演狼来了的故事。而可观测性的实施角度不再是某个指标,某个特征。而是通过指定的可观测性数据的采集,汇总。对这些数据分析进而判断是否真的有问题,是否应该报警。对于预见性的告警,通过定义SLO来识别是否是真的狼来了。
- 监控是运行在系统层面,监控目标往往是服务,接口,链路等,是站在开发和运维的角度来观测分析。而可观测性强调监测业务,通过业务指标判断应用是否受损。
这里再系统的总结一下什么是可观测性:通过采集运行中的系统数据,包括:Trace,Log,Metric,乃至Event,DEM(Digital Experience Monitoring)信息,进行系统分析和诊断。其数据通过多维度的关联,以支持多种角度的展示和分析。空间上多维度数据关联,纵向上将主机,容器,进程等信息关联,横向上通过Trace进行调用关系关联。分析问题常常是通过受损的业务指标下钻系统组件,再通过各种关联,定位问题根因。
可观测性是必须的吗?
软件行业没有银弹,每钟技术都有其适用的场景,也会带来新的问题和挑战。如果一个系统结构简单,部署规模小,可能一个简单的监控就够用了。但如果期望稳定性达到三个9,四个9乃至五个9,那么可能就需要应用可观测性来进行更高的稳定性保证。尤其是当处于一个存量的市场竞争环境中,产品形态上又与对手没有拉开身位的优势,拼的就是产品的质量和稳定性。当系统复杂到一定程度的时候,其线上会出现故障不是偶然而是必然,这就必须要有一种机制来进行线上的系统监控和实时诊断,甚至能够进行运营分析,那就不得不使用可观测性,即使其会引入额外的开发复杂度,增加额外的开发周期。
稳定性保证是一个复杂的系统工程,投入很多的时候,不能像业务产品一样获取明显的收益效果,投入减少又可能会导致故障而产生巨大影响。当一个企业增长到一定程度,其不光对内有增长盈利的诉求,在资本市场上有市值管理的诉求,在社会上也有稳定可靠的民众诉求。我们已经看到过很多因为故障而导致市值暴跌,冲上热搜讨全民论的情况,其对一个企业的影响不可谓不大。而可观测性是进行系统稳定性保障工作的重要工具。如何进行可观测性评估,我觉得可以通过以下几个方面考虑:
- 系统复杂性: 如果系统是分布式的或由多个微服务组成,具备了一定的复杂性,那么可观测性是非常重要的,因为它可以帮助理解系统的整体行为和各个组件之间的交互。
- 业务需求: 如果业务对系统的可靠性和性能有高要求,即所谓的几个9,那么可观测性可以帮助快速识别和解决问题,减少停机时间。
- 故障排查: 在系统出现问题时,是否能够快速定位和解决问题?是否还需要登陆线上机器定位?可观测性可以提供详细的诊断信息,帮助工程师更快地找到问题根源。
- 性能优化: 是否需要持续监控和优化系统性能?全链路压测耗时长,效果差?可观测性可以提供实时的性能数据,帮助识别瓶颈和优化资源使用。
- 用户体验: 用户体验是否受到系统性能的影响?可观测性对数字体验的监控,可以帮助了解用户交互的各个方面,确保提供最佳的用户体验。
- 合规性和安全性: 是否需要满足特定的合规性要求或安全标准?可观测性可以帮助记录和审计系统活动,确保合规性。
- 团队能力: 团队是否具备实施和维护可观测性系统的能力?需要考虑团队的技术水平和资源。
- 成本效益: 实施可观测性是否具有成本效益?需要评估可观测性带来的价值与其实施和维护成本之间的平衡。
简而言之一句话,有条件上,没有条件,创造条件也要上。
企业的可观测性落地
一个标准的可观测性平台,主要解决几个问题:
- 数据的收集:采集和处理
- 数据的存储:持久化落盘
- 数据的分析:展示和告警等
所以进一步,可以拆分为几个组件:
- 数据采集端,常见的技术包括SDK, Agent, 探针等,开源组件包括老派的zabbix, 新派的Prometheus exporter等
- 数据处理,将采集到的数据进行清洗转换,和数据湖的数据处理过程有些类似,进行标准化和非标准化的数据转换。关键数据的聚合计算,告警生成等,常见的技术Apache Flink,Spark进行流式处理,Kafka进行数据传输等
- 数据存储,常见的有列式存储的OLAP数据库,ClickHouse 、 Doris等,也有时序数据库:Prometheu 、 VictoriaMetrics等。也可能需要图数据库存储关联关系,包括: Neo4j 、 Amazon Neptune等
- 数据可视化分析,将存储的结构化数据通过图表直观的展示分析。典型的开源组件:Grafana。一般将报警策略和通知也会相应的展示在页面中。
- AI分析:运行中的系统的状态时刻的处于动态变化当中,故障的分析定位,告警的识别跟进靠人力依然不够及时,这就需要有AI帮助定位识别根因,进一步缩短故障实现,AIOps是大模型带给运维领域的变化。
一个企业是否要自建可观测性平台呢?通过上述的几个模块,我们可以知道一个可观测性平台已经是一个复杂的项目,如果企业有能力自建可观测平台,自然是一个最好的选择,因为通过第一节中什么是可观测性的讨论,我们已经知道要获取可观测性,需要很大程度的入侵现有代码,业务方需要埋点,需要引入SDK. 需要输出特征日志。当然这也和当前的系统情况有关:
- 全量的采购三方服务,使用其提供的SDK, Agent进行数据采集。有一定的开发适配工作,但平台适配性好,接入过程比较顺滑。缺点是会与三方平台绑定。
- 不一定需要大而全的采用外部系统,如果系统已经进行了数据采集工作,可以将数据对接三方平台,因为可观测的复杂度大多是在平台的数据处理存储分析上,而非数据的采集上。这要求系统使用标准的可观测性数据格式,包括OpenMetric, Opentelemetry等协议标准,与平台解耦,降低接入成本
- 就使用现在的数据场景,要求外部平台非侵入性的进行数据采集。一定程度上也能做到,但数据的利用程度会降低。举一个简单的例子:多维度数据如何进行关联?最直观的是通过Trace ID进行关联,但非入侵的情况无法有效的插入和追踪Trace ID,,如果有过线程切换,调用链很难再被有效追踪。这就需要其他的关联信息,比如:实体关联,所有的数据都要关联到实体上,然后通过实体的关系确定数据的关联关系。时间关联,数据中的时间戳判断发生在同一时刻的数据具有关联关系等。其准确度都会有所降低。
不论是自研还是采购,可观测性平台都与其他系统有显著区别,其与开发的绑定之深,导致不论哪个选择都影响颇大。
可观测性理念
前面提到了可观测性选型,实现等方面,希望能让大家对可观测性有了一个初步的认识。最后一节再讨论下可观测性为什么是一种理念,其为研发流程,稳定性工程带来了什么变化。
1. 数据驱动决策:可观测性强调通过数据来驱动系统设计、开发、运维和优化,通过实时数据分析来做出的业务和技术决策,即所谓数据决策。
2. 全生命周期集成:可观测性应从开发阶段开始考虑,并贯穿于测试、部署和运维,在设计阶段就考虑如何采集和利用数据,以便在系统上线后能够有效监控和诊断。
3. 跨职能协作:打破开发和运维之间的壁垒,促进DevOps文化,研发团队负责数据埋点和采集,负责数据的使用和分析,运维团队提供平台。
4. 持续改进:通过可观测性数据不断评估和优化系统性能和稳定性,定期回顾和调整监控策略和告警阈值,以适应系统变化。
5. 用户体验优先:通过监控用户交互数据来确保最佳用户体验,识别和解决影响用户体验的问题。
6. 透明性和可见性: 提供系统内部状态的透明视图,帮助团队快速理解和响应问题, 确保所有相关人员都能访问和理解可观测性数据。
7. 平台将数据汇总,最终的数据为不同角色展示为不同的表达:
a. 业务负责人关心业务指标的健康状况,比如电商的推广的成单量,出行应用的撮合成单量等,系统中的某个服务是否健康,其并不关心
b. 具体服务的负责人则关心自己负责服务的健康情况,其TPS, 查询耗时等等状况
c. 运维负责人则关系资源的使用情况, 系统是否过载等
8. 通过SLO识别告警是否有效,只有影响到SLO的告警是紧迫告警,避免狼来了的情况, 业务团队为SLO负责。通过SLO定义SLA,量化团队的稳定性程度。
可观测性不仅仅是一种技术手段,更是一种稳定性保证的实施理念,其在CNCF的landspace中独占一席,可见其重要程度。落地引进的过程,对团队的组织架构,系统的落地实施,都会产生深远的影响。
相关文章:
什么是可观测性?
现代服务架构常常谈及三个性: 弹性,韧性,可观测性。今天且按下其他两性不表,着重聊一聊可观测性。本文就几个主题对可观测性展开讨论: 可观测性是什么可观测性是必须的吗企业的可观测性落地 可观测性理念 可观测性是…...
3. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--环境搭建
构建现代云原生应用程序时,开发环境的搭建至关重要。NET Aspire 作为一款专为云原生应用设计的开发框架,提供了一整套工具、模板和集成包,旨在简化分布式系统的构建和管理。开始项目初始化之前,确保开发环境的正确配置是成功的第一…...
kubeadm构建k8s源码阅读环境
目标 前面看了minikube的源码了解到其本质是调用了kubeadm来启动k8s集群,并没有达到最初看代码的目的。 所以继续看看kubeadm的代码,看看能否用来方便地构建源码调试环境。 k8s源码编译 kubeadm源码在k8s源码库中,所以要先克隆k8s源码。之…...
【Flink快速入门-1.Flink 简介与环境配置】
Flink 简介与环境配置 实验介绍 在学习一门新的技术之前,我们首先要了解它的历史渊源,也就是说它为什么会出现,它能够解决什么业务痛点。所以本节我们的学习目的是了解 Flink 的背景,并运行第一个 Flink 程序,对它有…...
硬盘修复后,文件隐身之谜
在数字时代,硬盘作为数据存储的重要载体,承载着无数珍贵的信息与回忆。然而,当硬盘遭遇故障并经过修复后,有时我们会遇到这样一个棘手问题:硬盘修复后,文件却神秘地“隐身”,无法正常显示。这一…...
如何处理网络连接错误导致的fetch失败?
处理由于网络连接错误导致的 fetch 失败通常涉及捕获网络错误并提供适当的用户反馈。以下是如何在 Vue 3 中实现这一点的步骤和示例。 一、更新 useFetch 函数 在 useFetch 函数中,需要捕获网络错误,并设置相应的错误信息。网络错误通常会抛出一个 TypeError,可以根据这个…...
Qt之设置QToolBar上的按钮样式
通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。工具栏还可以使用setToolButtonStyle函数设置按钮样式,其参数为枚举值: enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTe…...
责任链模式(Chain Responsibility)
一、定义:属于行为型设计模式,包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点; 二、UML图 三、实现 1、需要传递处理的数据类 import java.util.Date;/*** 需要处理的数据信息*/ public class RequestData {priva…...
docker安装 mongodb
1、拉取镜像 docker run -dit --name mongo \ -p 17017:27017 \ -e MONGO_INITDB_ROOT_USERNAMEadmin \ -e MONGO_INITDB_ROOT_PASSWORD2018 \ --restartalways \ mongo2、进入容器 docker exec -it mongo bash 3、进入mongo ./bin/mongosh -u admin -p 2018 --authenticat…...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(五)
#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…...
salesforce SF CLI 数据运维经验分享
SF CLI data默认使用bulk api v2, 数据操作效率有了极大的提高。 Bulk api v2的优点: 执行结果可以很直观的从Bulk Data Load Jobs中看到。相较于bulk api v1,只能看到job执行in progress,或者closed的状态,有了很大的改善。执行…...
5.2Internet及其作用
5.2.1Internet概述 Internet称为互联网,又称英特网,始于1969年的美国ARPANET(阿帕网),是全球性的网络。 互连网指的是两个或多个不同类型的网络通过路由器等网络设备连接起来,形成一个更大的网络结构。互连…...
【蓝桥杯—单片机】第十一届省赛真题代码题解题笔记 | 省赛 | 真题 | 代码题 | 刷题 | 笔记
第十一届省赛真题代码部分 前言赛题代码思路笔记竞赛板配置内部振荡器频率设定键盘工作模式跳线扩展方式跳线 建立模板明确设计要求和初始状态显示功能部分数据界面第一部分第二部分第三部分调试时发现的问题 参数设置界面第一部分第二部分和第四部分第三部分和第五部分 按键功…...
数据分析:企业数字化转型的金钥匙
引言:数字化浪潮下的数据金矿 在数字化浪潮席卷全球的背景下,有研究表明,只有不到30%的企业能够充分利用手中掌握的数据,这是否让人深思?数据已然成为企业最为宝贵的资产之一。然而,企业是否真正准备好从数…...
网络工程师 (23)OSI模型层次结构
前言 OSI(Open System Interconnect)模型,即开放式系统互联模型,是一个完整的、完善的宏观模型,它将计算机网络体系结构划分为7层。 OSI七层模型 1. 物理层(Physical Layer) 功能:负…...
DeepSeek添加知识库
1、下载dify 项目地址:https://github.com/langgenius/dify 2、通过docker安装 端口报错 修改端口 .env文件下所有80端口替换成了其它端口 执行正常了 查看 docker容器 <...
2、k8s的cni网络插件和基本操作命令
kube-prxoy属于节点组件,网络代理,实现服务的自动发现和负载均衡。 k8s的内部网络模式 1、pod内的容器于容器之间的通信。 2、一个节点上的pod之间的通信,docker0网桥直接通信。 3、不同节点上的pod之间的通信: 通过物理网卡的…...
Next.js简介:现代 Web 开发的强大框架(ChatGPT-4o回答)
prompt: 你是一位专业的技术博客撰稿人,你将写一篇关于介绍next.js这个开发框架的技术博文,语言是中文,风格专业严谨,用词自然、引人入胜且饶有趣味 在现代 Web 开发的世界中,选择合适的框架可以显著提升开发效率和应用…...
【DeepSeek:国产大模型的崛起与ChatGPT的全面对比】
DeepSeek:国产大模型的崛起与ChatGPT的全面对比 目录 引言DeepSeek的技术架构 2.1 混合专家(MoE)架构2.2 动态路由机制2.3 训练数据与成本 ChatGPT的技术架构 3.1 Transformer架构3.2 训练数据与成本 性能对比 4.1 推理能力4.2 语言处理4.3…...
input 超出maxlength限制后,输入框变红
一、前言 最近收到产品的一个需求:输入框限制了maxlength“11”,需要在输入第12位时,输入框变红;当然,第12位是不能真正输入到输入框中的。 二、实现难点 其实,单纯的要监听 字母和数字以及字符 还是比较容…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
