可观测性技术研究

2023-03-06 02:56
科技创新与应用 2023年5期
关键词:内核运维观测

高 巍

(麒麟软件有限公司,北京 100080)

Apple公司工程师Cindy Sridharan博文“监控与可观察性”(Monitoring and Observability)首次将Observability带入开发者的视野。对软件而言,监控(Monitoring)与可观测性(Observability)是2个不同的概念,监控旨在识别系统是否正常运行,可观测性探究运行不畅的原因。

1 相关知识

1.1 监控(Monitoring)

监视和跟踪全栈产品,包括:网络设备、服务器、存储、操作系统、中间件、数据库、容器和应用的状态,设置规则库,制定性能指标、报警阈值,在出现问题后根据规则报警启动处理流程。通过包括操作系统命令、SNMP、SSH、Telnet、IPM、HTTP、JMX和SMI-S等技术实现从底层基础设施到上层应用的全栈监控,如图1所示。

图1 全栈监控

1.2 可观测性(Observability)

如图2所示,描述了对IT系统理解程度和可收集数据之间的关系,右侧(Known Knowns和Known Unknowns)代表传统监控,称为确定性的已知和未知,例如,基础设施监控数据(主机CPU利用率、CPU空闲率、内存负载、进程PID、TPS等指标),传统监控围绕这些确定的数据进行分析。

但是,复杂状况下基础信息是很难描述和衡量的,如图2所示的左上角(Unknown Knowns),我们称之为“假设”,有经验的开发人员在设计应用时,应该对有可能出现的风险做针对性性能和功能设计。“假设”未必一定发生,但到出事的时候,设计失误就会变成Unknown Unknowns(意外)。所以有经验的开发人员能通过蛛丝马迹证实自己的推测,通过不断分析将Unknown Unknowns的范围变小,更合理的做法是通过技术手段描绘系统更全面的状态。近几年发展趋势是将系统的可观测性放在一个更高的位置,监控只是可观测性的一个子集。

图2 可观测演进

1.3 应用性能管理APM

APM(Application Performance Management)致 力于监控管理应用程序性能和功能,主要通过探针形式采集和测量应用程序端性能指标。显然,APM这种方式会占用大量资源(网络带宽、算力)。在实际工作中也可使用拨测技术,拨测技术源自呼叫中心通信系统的闭环测试,暨模拟用户的业务操作过程,获得完成业务操作过程的性能、功能和结果数据,现在发展到可以对应用接口、业务流程等进行监测。

1.4 人工智能运维AIOps

AIOps(Artificial Intelligence for IT Operations)是指通过人工智能机器学习技术提升运维效率,通过运维知识库、智能算法库等建设有效地解决运维工作中的人力成本和效率问题。但在复杂场景下的故障定位、故障诊断、趋势预测和场景编排中,智能运维技术在定位预测方面有待进一步提高。

1.5 操作系统eBPF

eBPF起源于Linux内核,可以运行沙箱程序,安全有效地扩展内核功能,无需更改内核源代码或加载内核模块。eBPF全称“扩展的伯克利数据包过滤器(Extended Berkeley Packet Filter)”,是一种数据包过滤技术,从BPF(Berkeley Packet Filter)技术扩展而来。BPF提供了一种在内核事件和用户程序事件发生时安全注入代码的机制,这就让非内核开发人员也可以对内核进行控制。随着Linux内核的发展,BPF逐步从最初的数据包过滤扩展到网络、内核、安全和跟踪等,而且其功能特性还在快速发展。

2 可观测性技术发展

可观测性技术在传统监控基础上采集更深入和全面的数据(排错、剖析和依赖分析等),构建对系统更为深入的认知以降低故障平均修复时间(MTTR),延长系统无故障运行时间(MTBF),提升系统可用性和运维效率。为了实现更深入和全面的数据采集,离不开相关技术和标准规范的发展。

2.1 基于eBPF可观测性技术发展

自Linux 4.19内核以来,Linux社区为eBPF带来160多个新特性和优化改进,提升了eBPF在跟踪分析、可观测性、安全和网络加速等场景的应用能力。

1)跟踪和分析:通过附加eBPF程序来跟踪点位以及内核与用户应用探针的能力,允许实现应用程序和系统程序本身运行时行为的不可预见条件下的可视性。通过向应用程序端和系统端都提供内省性,2种视图能够被有效地结合,从而向故障排解系统性能问题提供强大且独特的洞察力。高级统计数据结构允许以有效方式提取有意义的可视性数据,而无需像系统普遍采用导出大量采样数据的方式。

2)可观测性:eBPF不依赖于操作系统公开的静态计数器和计量器,支持自定义指标的收集和内核聚合,并基于各种可能的来源生成可见性事件。这在一定程度上扩展可以实现的可见性深度,并通过仅收集所需的可见性数据且在事件源处生成直方图和类似的数据结构而非依赖于样本的导出来显著降低整体系统开销。

3)安全:建立在识别和理解所有系统调用的基础上,并将其与所有网络操作的数据包和套接字级别视图相结合,使得安全系统具备革新性的创新方法。eBPF能够有效地整合可视性、资源可控性,从而在更广泛的上下文语境中以更佳的控制水准来创建安全系统操作。

4)网络加速:可编程性和效率的结合使eBPF适合网络解决方案的数据包处理要求。eBPF的可编程性可添加额外的协议解析器,JIT编译器提供接近于本地编译的内核代码的执行性能。

eBPF程序由事件触发后执行。这些事件包括系统调用、内核跟踪点、内核函数和用户态函数的调用退出、网络事件等,借助内核态插桩(kprobe)和用户态插桩(uprobe)提供可观测性技术。本文以eBPF为抓手进行可观测性技术研究和探索,探索可观测性体系化演进和落地能力(全栈、云原生),助力运维技术融合迭代发展。

2.2 云原生可观测性技术发展

随着云原生技术普及,系统迎来新的运维问题:微服务请求导致问题定位难以解决,随着业务不断扩张,仅凭日志或APM性能监控很难做到全景观测和下钻跟踪,于是衍生出可观测性的3大要素,即Logging、Metrics和Tracing。

Logging:日志展现的是应用软件运行而产生的事件或者程序在执行过程中所产生的一些记录,可以详细解释系统的运行状态。

Metrics:指标是一种聚合数值,其存储空间很小,可以观察系统的状态和趋势。

Tracing:追踪面向的是请求,通过请求的上下文信息关联实现分布式请求完整调用链路。

云原生计算基金会(Cloud Native Computing Foundation,以下简称CNCF)制定发布OpenTracing标准来统一链路跟踪中涉及的相关标准和规范,Google发布OpenCensus项目包含Metrics标准及采集Agent、Collector规范,由于OpenTracing与OpenCensus存在交集,2019年CNCF合并OpenTracing与OpenCensus推出OpenTelemetry项目,旨在建立标准规范统一Metrics、Logs和Traces3种数据,核心技术是产生、收集和处理可观测性数据,并支持传输到分析软件中。OpenTelemetry的问世加速了云原生可观测性技术和生态的发展;2020年9月CNCF发布可观测性推荐产品,主要工具 有Prometheus、Grafana、Elastic、Jaeger、OpenTelemetry;可观测性成为云原生的一项必备要素。

3 可观测性研究与实践

3.1 基于操作系统eBPF的全栈可观测性技术研究与实践

利用eBPF附加到跟踪点及在内核和用户侧部署探针的能力,提供可视化观测数据。基于操作系统eBPF的可观测性与数据库、中间件、应用系统的可观测性数据关联,实现全栈基础软硬件的可观测、可跟踪,如图3所示。

图3 基于操作系统eBPF的全栈可观测性

在操作系统层:通过eBPF程序在存储资源、网络资源和主机资源等内部进行数据采集,包括文件访问、网络负载、性能事件、CPU负载、内存访问和系统函数调用等;在数据库层:使用PG_STAT_*、DBE_PERF、TOP_SQL、ASP、WDR等工具收集数据库负载、SQL执行效率、会话等信息,并将进程、SQL、表、日志文件等与操作系统eBPF信息建立关联;最后,通过Prometheus工具进行监控数据采集、处理和导出以实现状态可视化。实现从应用层发现问题到数据库、操作系统逐级下钻分析的全栈可观测、可跟踪。

3.2 基于操作系统eBPF的云原生可观测性技术研究与实践

基于eBPF在操作系统内核可观测性优势,与OpenTelemetry结合建立云原生观测数据收集处理的标准规范,增强云原生环境可观测性能力(图4)。

OpenTelemetry提供一组标准规范和工具集,管理可观测性数据,主要包括trace、metrics、logs等,规范可观测性数据的数据模型、数据采集、数据处理、数据治理和数据导出。主要包括以下3个部分。

1)API:应用开发者会使用OpenTelemetry API对其代码进行插桩,API包含4个部分,即Tracer API、Metrics API、Context API、语义规范。

2)SDK:是OpenTelemetry API的具体实现。

3)Collector:遵循OpenTelemetry协议实现数据收集、处理和导出到外部系统,由Receiver、Processor、Exporter构成。

如图4所示,将eBPF采集数据导入OpenTelemetry Collector,步骤如下。

图4 基于操作系统eBPF的云原生可观测性

数据接收:在kubernetes上eBPF的tracepoint和kprobe/kretprobe,将内核采集到的应用请求、系统调用、网络传输性能等数据放到内存中,在用户态eBPF程序读取数据,进行预处理;基于OpenTelemetry规范实现Receiver,以事件订阅方式接收采集数据。

数据处理:基于OpenTelemetry规范实现Processor,对采集数据进行协议解析和指标处理评估,实现eBPF采集的内核数据与kubernetes调度请求、上下文信息关联。

数据导出:基于OpenTelemetry规范实现Exporter数据导出到可观测平台进行分析。

代码示意基于eBPF捕获性能事件,加载到内核的eBPF程序代码段:

整个过程中应用系统无需变更或重新编译Linux内核,从而做到无侵入。当集群规模越来越大时,无侵入方式会极大地提升系统性能效率。

4 未来展望

可观测性技术聚集故障定位、故障诊断、故障预测和系统运行不畅的原因,是从监控、应用性能管理APM、人工智能运维AIOps等技术中不断“演化”而来,随着操作系统eBPF、人工智能机器学习、知识推理等技术的不断发展,可观测性技术一定会在信创和云原生等应用场景中发挥更大作用,推动下一代监控技术的发展。

猜你喜欢
内核运维观测
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
运维技术研发决策中ITSS运维成熟度模型应用初探
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
天文动手做——观测活动(21) 软件模拟观测星空
风电运维困局
杂乱无章的光伏运维 百亿市场如何成长
2018年18个值得观测的营销趋势
可观测宇宙