【送书】实现可观测性平台的技术要点是什么?
文章目录
- 实现可观测性平台的技术要点是什么?
- 兼容全域信号量
- 所谓全域信号量有哪些?
- 统一采集和上传工具
- 统一的存储后台
- 自由探索和综合使用数据
- 总结

实现可观测性平台的技术要点是什么?
随着可观测性理念的深入人心,可观测性平台已经开始进入了落地阶段,它的先进性已经毋庸置疑;而另外一只靴子:它如何以一个统一融合的平台在企业中生根发芽?
可观测性并不是空穴来风,也非关键词炒作。大家不妨回顾一下我们所熟知的运维管理的演化历程,抛开运维管理中关于流程和人的那些繁文缛节。让我们只关注于:基础设施和应用架构的变迁,关注于这些层出不穷的技术工具侧面。

兼容全域信号量
从遥测方式的角度看:任何类型的信号都有各自的用途和道理,武断地选取其一作为可观测性的代名词是一种比较偏激的想法,在Debug生产环境的道路上,我们难以依靠单一方法。我们要根据不同应用系统的特点和服务类型,选择合理的SLI组合,用恰当的信号量来覆盖目标应用系统,目标是打造应用系统本身的「可观测性属性」。这样,你就必须要明智地选择、添加或变化信号类型,要能做到按需求,对症下药。这里不是监控数据源越多越好,盲目的全面覆盖亦是事倍功半的做法;在应对高维度、高基数的运维大数据的场景中,我们很容易走向存储成本飙升的局面,无效杂音数据还能严重稀释有价值的信息点。

所谓全域信号量有哪些?
日志Log:文本记录系统和应用的活动、事件和错误,提供详细上下文。
指标Metric:定量的性能度量,如CPU使用率、请求速率,帮助监控系统状态。
分布式追踪Trace:跟踪请求在分布式系统中的路径和性能瓶颈。
流数据Stream:实时产生的数据,如用户行为,用于即时监测和分析。
用户体验数据RUM:记录用户在应用中的交互、操作和反应,评估体验质量。
eBPF:扩展Berkeley Packet Filter,收集内核级别的数据,用于分析和监控。
网络性能管理NPM:监测网络带宽、延迟和连接状况,优化网络性能。
Profiling:分析代码运行时的性能特征,帮助优化应用程序。
云服务Cloud:从云提供商获取的监测数据,跟踪资源使用和性能。
拨测数据Uptime/synthetics:定期对系统进行外部测试,监测系统在不同地点和条件下的可用性和性能。
「可观测性管理平台」应当以兼容并蓄全方位的信号量为初始设计目标。这意味着:在观测数据的采集、上传、存储、展示以及关联分析的整个过程中,各类数据都需要被正确处理,能更合理、有效地进行跨类型的数据关联;在数据下钻的过程中,可以自由地在各种时间线之间跳转和探索。
当然,监控已知的「未知」是一项基本的管理需求,你应当能使用某一种信号量即可实现。而可观测性更多的是要讨论:在「未知」状态间进行变化的管理;这就需要「可观测性平台」能处理多层级、高依赖、多云环境、分布式系统下的高「复杂度」,信号量的全面准备和按需取用往往也只是一个必要条件。
目前市场上已经有许多运维管理平台都自称为「可观测性」管理平台。但他们中的大多数是从某个特定监控类型开始,并逐渐扩展覆盖其他更多信号类型。通常,只有能够涵盖3种以上信号类型的平台,才可能具有出色的实用效果;对于那些已经是有3至5年历史的「可观测性」产品而言,他们不太可能在短期内实现华丽的转身,也不可能会从头重构一遍自己的产品。
统一采集和上传工具
在物理机大行其道的时代中,对于一台主机(虚拟机或者物理机)而言,由于它很可能承担着多重角色。而且根据不同团队的管理需求,在其操作系统中会安装多种管理监控代理程序Agent,例如:操作系统指标、日志、数据库、中间件、安全巡检等等;这种叠罗汉的形式不仅给操作系统的资源带来了严重的消耗,甚至还给服务器的管理带来了大量的琐事,例如:数据库监控Agent还需要创建专用的用户账号等。为了解决这个问题,很多公司希望使用尽可能少的单一采集代理的模式,例如:BMC公司的Patrol监控产品,拥有多种采集模块KM(数据库、中间、web服务器等等),用户可以按需要进行配置,而不需要部署多个采集代理程序。然而,BMC公司会逐渐收购很多新产品,后来的产品有动态性能基线管理、自动化配置管理等等。从工具厂商的角度看,他们无法进行快速的产品整合,很难维持单一采集代理的局面。
在甲方企业的环境中,不同部门会根据自己的需求采购不同的管理工具,部门间的差异导致了工具的重复建设,数据的重复采集,而且数据并不会很轻易的在部门间共享。这样不仅带来了采集工具在同一个主机上的叠加部署,还会导致:独立运行着大量具有重复数据的孤岛运维数据数据库。这种局面进一步导致了其他问题,例如:同一个主机的同一个故障会在各种工具中都触发多条告警事件;事件风暴来临了。这种混沌的局面,给AIOps的工具带来了生存的空间,即使可以产生一些事件收敛和压缩的收益,但这里存在着一个很明显的“治标不治本”的错误。
时光穿梭到了虚拟化&云原生时代,以上局面并没有发生根本性的改变。反而带来了套娃式深层依赖关系的困境。我们不会把web、中间件、数据库、消息队列等功能跑在一个POD中,但是将其各自独立部署在可横向扩容的子服务(容器服务)中后,这就带来了管理对象的数量呈现指数级飙升的现状。容器时代带来了新鲜的监控工具,包括:Prometheus、Grafana、FluntD、Graphite、cAdvisor、Loki、EFK等等。我们可以观察到,新生的工具并不会完全改变:多种采集功能代理并存&叠加的局面。Elastic看到了部署多种相似代理程序的问题后,最近几年很快的将之前的多种Beats程序(多次收购的项目)整合成到了一个统一代理Elastic Agent中,而这个程序目前还只是多个Beats程序的马甲(包装壳)程序。
多种采集工具集不仅在端点上会造成大量部署和配置的琐事,而且,它们的后台都对应着各自的独立的数据库部署。同一个管理对象在不同的数据库中的字段描述基本上都不同,这导致:工具集的使用者很难在各类数据库中实现关联分析,用人脑携带着排错的上下文,在一堆控制台之间跳转是相当消耗体力的工作,对齐时间线和监控对象会很快耗尽人的认知上限。
CMDB可能是一个解决方法,而CMDB的设计和建设的难度并不亚于构建任何一个监控系统项目本身,用CMDB解决这个问题的实现难度大,成本高。数据治理也会是一个常见做法,而在这些运维数据库集合之间做ELT,做数据治理工作,最终实现异类运维信息的归一化的解决方式,也只是一个顺坡下驴的无奈之举,相关实施人员在项目中必将饱尝:将计就计的辛酸。
貌似最早由Elastic推出的统一数据模型(ECS)是一个让数据走向标准化定义的可行之道。我们也看到了:OpenTelemetry项目很快就采纳了Elastic ECS。CNCF在随后也推出了相似的观测数据定义模型。我相信CNCF一定是看到了,在它的技术蓝图中,可观测性和分析分类中相似&同类工具的快速繁荣。而这些标准也只能让我们望梅止渴,由于目前还没有看到多数厂商、大量开源项目都快速跟随实现和兼容落地的局面。
观测云的 DataKit 是一款多功能的采集代理程序,它具备解决上述问题的设计,它已经在兼容和对接更广泛的技术生态系统。任何采集代理程序在采集或者对接到了目标数据之后,它其实还需要处理一系列的细节,否则仍然无法实现「源头治理」,无法避免「garbage in gargage out」的窘境。首先,DataKit 在组织封装数据时,所有字段的定义都遵从着一个观测云定义的数据字典(等同于Elastic ECS);其次,上报数据包在封包前,还能做数据的Pipline处理,实现了数据字段的丢弃、质量控制、治理和脱敏等问题。最后,DataKit的采集还可实现对接开源&闭源生态系统,例如接收DataDog的APM探针数据,对接OpenTelemetry的数据等等。它还能实现观测数据在网际、网络间的转发等。
统一的存储后台
在构建可观测性平台的过程中,每种类型的信号量都理应得到它最佳的容身之处:
Elasticsearch:在Elastic的ECS的加持之下,貌似它是一个很恰当的一库存所有的方案,但前提是你需要能hold住性价比。
时序数据库:不一一列举,适合指标类时序数据。
列数据库:以ClickHouse为代表的实时数据分析的列数据库,可兼容多种信号。
关系型数据库:WHY NOT。
从数据入库的角度看,给每种信号量配置其最佳的数据库类型,貌似是一个皆大欢喜的局面。这也不辜负,目前各种开源数据库百花齐放的形势。
略过上面已经提到的数据孤岛和治理问题不谈。从查询的角度看,用户将不得不学会多种查询语言,前方有n种SQL语法需要你学习,否则你不得不开发维护一个一对多的查询界面。这里我们暂且不论述:你会如何实现可观测性数据的跨库数据关联分析。
问题:是否存在一种多模态的统一数据库,将多种类型的信号量数据融入一个统一的数据仓库中?
实际上,目前的可观测性SaaS提供商们,已经给他们的用户提供了这样一种统一融合的数据后端,起码从查询探索可观测性数据的使用体感的角度上,确实是已经做到了。而观测云也正在推出这样一款解决以上统一融合多态并存管理需求的数据库。观测云用户很快将在SaaS服务中,在私有部署的产品上使用到这种技术。
自由探索和综合使用数据
可观测性数据的价值体现在使用上,能自由的探索和综合的使用各种数据,才能放大数据的价值。在考虑到可观测性数据使用场景的时候,小编强烈建议大家运用「第一性原理」来进行思考,这样才能避免对经验的依赖,排除对新可观测性技术能平替所有旧技术的单纯幻想,才能回到可观测性技术的概念本源。

总结
本文从四个层面上对实现可观测性平台的技术要点,做出了一定深度和时间跨度上的探讨。希望:在您的工作环境中,统一融合的可观测性平台可以很快的落地。穿上两只靴子的你,可以脱离以前赤足上阵,光脚救火的困境。希望可观测性平台能够帮助到软件交付流水线中的所有人,运用可观测性来补Ops的锅,助SRE的威,壮Dev胆。
推荐阅读《可观测性工程》

推荐理由:谷歌SRE核心专家、可观测性社区领袖撰写,国内可观测性领域独角兽企业观测云团队倾情翻译。可观测性技木落地买践指南,有效解决云原生时代软件系统运维难度大的痛点。推动IT系统实现高效交付、统一运维和持久优化。
购买链接
直播预告
直播主题
现代化软件工程新趋势论坛暨《可观测性工程》新书发布会
直播时间
9 月 20 日(星期三)
19:00 - 20:30
《Observability Engineering》出版于 2021 年,在海外已广受好评,是每一位想要了解可观测性技术的工程师都必须拜读的书。2023年 9 月 20 日 晚 19:00 ,机械工业出版社华章分社将联合本书的中译者「观测云团队」,在线上举办新书发布会,与圈内嘉宾们共同探索可观测性技术的新趋势与新未来。
预约直播 视频号:CSDN 预约直播提醒:《开讲》-现代化软件工程新趋势 ; CSDN官网直播间也将同步转播!


相关文章:
【送书】实现可观测性平台的技术要点是什么?
文章目录 实现可观测性平台的技术要点是什么?兼容全域信号量所谓全域信号量有哪些?统一采集和上传工具统一的存储后台自由探索和综合使用数据总结 实现可观测性平台的技术要点是什么? 随着可观测性理念的深入人心,可观测性平台已经开始进入了落地阶段…...
AUTOSAR汽车电子嵌入式编程精讲300篇-车载网络 CAN 总线报文异常检测
目录 前言 国内外研究现状 车载网络 CAN 总线威胁分析和报文异常检测研究...
基于MUSIC算法的二维超声波成像matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、基本原理 4.2、数学公式 4.3、实现过程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................................…...
Linux0.11——第三回 做好访问内存的最基础准备工作
前面两回是把启动区的代码复制来复制去的,这里我们要讨论的就是操作系统怎么为程序访问内存的方式做初步规划的? 操作系统的代码最开头的 512 字节的数据,先从硬盘的启动区移动到了内存 0x7c00 处,然后又立刻被移动到 0x90000 处…...
unity自己对象池的使用
unity出了自己的对象池 这里记录一下用法 命名空间就是这个 一般有两种用法,第一种是在using里面获取,脱离这个域就释放。第二种是在Get和Release配合使用 // This version will only be returned to the pool if we call Release on it.//只有使用Re…...
el-image 和 el-table冲突层级冲突问题
其中原理,很多博客已经所过了,table组件中使用图片,会出现层级过低问题, 网上大部分解决方式是 使用穿透 // 单元格样式 ::v-deep(.el-table__cell) {position: static !important; }我在此不推荐这种解决方式,原因&a…...
6年Android开发前10月的总结,写给正在求职的安卓开发
进入大厂工作对许多人来说已经是一种挑战,但只要充分准备,很多问题都可以逐步解决。当然,运气也起到了一定的作用,但最终还是与自身的努力密不可分。运气是实力的一部分,因为自助者天助。 每到10月进行总结时ÿ…...
ConcurrentHashMap 的并发度是什么?
ConcurrentHashMap采用了一种基于分离链接的哈希表设计: 分离链接哈希表:在Java 8中,ConcurrentHashMap 内部使用了一个称为分离链接哈希表的数据结构。它的核心思想是,每个哈希桶(bucket)不再是一个单一的槽位,而是一个链表或红黑树(取决于链表的长度),用于存储具有…...
Redis 面霸篇:从高频问题透视核心原理
Redis 为什么这么快? 很多人只知道是 K/V NoSQl 内存数据库,单线程……这都是没有全面理解 Redis 导致无法继续深问下去。 这个问题是基础摸底,我们可以从 Redis 不同数据类型底层的数据结构实现、完全基于内存、IO 多路复用网络模型、线程…...
【100天精通Python】Day69:Python可视化_实战:导航定位中预测轨迹和实际轨迹的3D动画,示例+代码
目录 1. 预测的3D轨迹和实际轨迹的动画图,同时动态更新 2 真值轨迹设置为静态的,预测轨迹不断更新 3 网格的三维坐标系有旋转运动,以此全方位展示预测轨迹和真值轨迹之间的空间关系 1. 预测的3D轨迹和实际轨迹的动画图,同时动态更…...
MySQL中对varchar类型的列进行统计分析
需求1:如何在MYSQL中查找my_data列中所有<5%的数量,my_data为varchar类型 如果my_data列是varchar类型并存储为上面显示的格式(如"28.62%“),那么在查找所有小于或等于5%的值时,我们首先需要去掉末…...
mysql索引最左前缀法则、使用场景
提示:mysql索引最左前缀使用的规则,以及索引失效和部分字段索引失效 文章目录 索引使用法则最左前缀法则 索引执行explain分析遵守联合索引最左前缀法则(索引有效)未遵守联合索引最左前缀法则(索引失效或部分索引失效&…...
LeetCode75-06:移动零
移动零 初版(bug) func moveZeroes(nums []int) {if len(nums) 1{return}// 设置两个指针fp1,fp2分别指向第一个元素和第二个元素,// 两种情况// 假如指针fp1指向元素为零// 1) *fp2!0,则交换。// 2) *fp20,则fp2后移,直至*fp2!0,与fp1交换…...
C/C++统计满足条件的4位数个数 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
目录 C/C统计满足条件的4位数个数 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C统计满足条件的4位数个数 2019年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定若干…...
python+nodejs+php+springboot+vue 校园安全车辆人员出入安全管理系统
本校园安全管理系统共包含15个表:分别是表现评分信息表,车辆登记信息表,配置文件信息表,家校互动信息表,监控系统信息表,教师信息表,留言板信息表,校园资讯信息表,人员登记信息表&am…...
针对discuz3.2的渗透测试
漏洞原理描述 https://zhuanlan.zhihu.com/p/51907363 想要利用这个漏洞得知道key的前缀,首先在注册的地方抓包 GET /member.php?modregister HTTP/1.1 Host: 103.108.67.223:8822 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/2010010…...
python的中秋之美
标题:Python的中秋之美:用代码感受传统佳节的魅力 引言: 中秋节,是中国传统的佳节之一,也是家人团聚、共度美好时光的时刻。作为一名Python程序员,我想通过编写代码来感受中秋节的美丽与独特。在这篇博客中…...
ClickHouse与Elasticsearch比较总结
目录 背景 分布式架构 存储架构 写入链路设计 Elasticsearch 再谈Schemaless 查询架构 计算引擎 数据扫描 再谈高并发 性能测试 日志分析场景 access_log(数据量197921836) trace_log(数据量569816761) 官方Ontime测…...
辅助驾驶功能开发-功能对标篇(12)-NOA领航辅助系统-合众
1.横向对标参数 厂商和众车型哪吒S上市时间2022方案11V5R3L+1DMS摄像头前视摄像头2*(8M)侧视摄像头4后视摄像头1环视摄像头4DMS摄像头1雷达毫米波雷达54D毫米波雷达/超声波雷达12激光雷达2*(华为96线,905nm)域控供应商1*(华为MDC610)辅助驾驶软件供应商自研TA PILOT高精度地图…...
Vue项目中使用element-plus的el-table组件-组件使用-样式修改
项目配置 <div class"table-wrap"><el-tableclass"table-card-container":data"tableData"style"width: 100%"><template v-for"column in tableColumn"><el-table-columnv-if"column.isShow&qu…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
