作者:竞霄
监控才能作为基础运维才能和中心稳定性措施,开发运维人员能够经过监控体系有效进行故障定位,预防潜在风险,剖析长期趋势进行容量规划和功能调优,是软件开发生命周期中必不可少的一环。与此一起,Serverless 作为云核算的最佳实践和未来演进趋势,其全保管免运维的运用体会和按量付费的本钱优势,使得其在云原生年代备受推崇,鄙人一个十年将成为云厂商供给的中心才能。随着 Serverless 的心智普及度越来越高,场景掩盖度越来越广,更多运用 PHP, Python,C/C++, Node.Js, Golang 等言语的用户开始进行 Serverless 架构升级。
关于这部分用户来说,传统的运用监控计划存在以下痛点:
-
建造本钱高 ****需布置一整套监控体系,包含数据收集,目标传输,耐久化存储,可视化展示,告警等模块,增加了额外的资源本钱和人力本钱。
-
埋点强侵略 ****需评估各言语,各结构,各接口的监控目标诉求,引进三方依靠进行繁琐地手动埋点。虽然关于 PHP, Python 等言语,现已有凭借对象(模块)替换增强的技能完成无需修正的目标收集,但其才能成熟度,结构兼容性,运转稳定性等方面都还有进一步提升的空间。
-
运维杂乱 ****用户需求保证整个监控链路的低延时,高可用和目标准确性,需求比照剖析引进监控埋点后对原有运用功能上的影响并继续优化。
Serverless 产品需求供给一种一致的,开箱即用的,无侵略零改造的方式来完成恣意言语的运用监控才能,使得多言语用户能够充分享受 Serverless 带来的普惠技能盈利。 下面我们首先对其背后运用的 eBPF(Extended Berkeley Packet Filter) 技能进行介绍。
何为 eBPF?
eBPF 全称为 Extended Berkeley Packet Filter,始于 Linux 3.18,是一项革命性的 Linux 内核技能。eBPF 供给了根据体系或程序事情的高效,安全,无侵略履行特定代码的通用才能。在 eBPF 诞生之前,因为用户态与体系态彼此阻隔,运用程序无法直接处理内核数据,而如果直接修正内核又具备适当的杂乱性,每次开发或调试都需求重新编译,效率十分低下,安全性也无法保证。
eBPF 作为一个运转在内核中的虚拟机,允许开发人员直接提交 eBPF 程序,在不修正内核代码的情况下运转特定的功用。eBPF 程序根据事情驱动模型,当内核运转到特定 hook 点时会触发履行,预界说的 hook 点包含体系调用、函数进入/退出、内核 tracepoints、网络事情等。关于不存在的 hook 点也能够经过 KProbe,UProbe 进行动态埋点,供给内核态和用户态函数的追踪才能。凭借丰富的 hook 点,eBPF 技能可被广泛运用于包含网络监控、安全过滤和功能剖析等许多场景。
eBPF 的工作流程如下图所示,首先经过在用户空间内运用 LLVM 或许 GCC 将编写好的 eBPF 程序编译成为字节码,然后凭借体系调用 bpf 将其加载至内核中。eBPF 虚拟机将运用验证器对字节码进行安全性校验,如只能运用受限的 helper 辅佐函数,有限的循环次数和履行时刻,DAG 判别是否存在不可达代码等,避免其形成内核溃散。
安全校验后 eBPF 字节码将经过即时编译器(JIT,Just-In-Time Compiler)编译成为原生机器码,供给近乎内核本地代码的履行效率,并挂载到详细的 hook 点上。用户态程序与 eBPF 程序间经过常驻内存的 eBPF Map 结构进行双向通信,每当特定的事情发生时,eBPF 程序能够将收集的核算信息经过 Map 结构传递给上层用户态的运用程序,进行进一步数据处理与剖析。
SAE运用监控
SAE(Serverless 运用引擎)作为业界首款面向运用的 Serverless PaaS 平台,全保管免运维,完成了单体 Web 运用,微服务运用以及定时使命的 Serverless 化。其中心优势之一在于用户能够低心智担负,零改本钱钱的将其运用/使命直接布置至 SAE 中。目前在 JAVA 生态中,无论是代码包布置,监控调用链的集成,还是分布式调度结构的迁移,都能够让用户无需改动任何事务逻辑和版别依靠的情况下运用。
根据 eBPF 技能,SAE 运用监控支撑了针对恣意言语,恣意结构的无侵略目标收集与监控告警才能,供给包含运用/实例维度的黄金三目标 RED(请求数,过错数,呼应时刻)和 HTTP 状况码核算,以及供给服务与依靠服务的接口等级调用信息。凭借内置可视化大盘,开发运维人员能够及时评估当时运用对外服务状况,有效辨认用户体会、服务中断、事务反常等问题。
SAE 运用监控才能具备以下中心优势:
-
免运维 ****开箱即用,布置即生效,用户无需额外运转维护监控告警组件。
-
代码无侵入 ****无需任何代码埋点,无需任何依靠修正即可获取到丰富的监控数据。
-
言语无关 ****经过内核层进行网络协议解析,支撑恣意言语,恣意结构。
-
多协议掩盖 ****支撑对 HTTP,MySQL,Redis,Kafka,DNS 等网络协议,进行目标和链路的监控。
-
高功能
****经过减少数据在内核态和用户态之间的拷贝,以极低的功能耗费获取目标数据。
技能完成上,SAE 经过将 eBPF 探针以 sidecar 的形式与用户事务程序布置在同一安全容器中,完成了多租阻隔。
eBPF 程序将会监听 accept/close/read/write/sendto/recvfrom 等体系调用,获取本地及远端地址,线程上下文,文件描述符 fd 等信息,一起相关当时容器实例信息产出原始事情。
然后将原始事情的内容发送至用户态程序。用户态程序进行运用层协议辨认,解析出协议的关键字段,匹配单条链路的请求和呼应,一起经过事情过滤,维度收敛,元信息相关,预聚合等过程进行数据加工,生成最终目标。最终周期性将收集目标上报至 Arms Promethues 中进行耐久化存储。
总结
面向未来,云核算将会全面 Serverless 化,多言语,全生态的支撑将会是 Serverless 产品发力的要点,SAE 运用监控才能同样会继续不断的演进和增强,目前现已全面上线了无侵略,多维度,高功能的运用中心目标监控和告警才能,欢迎我们运用。一起在后续的 RoadMap 中,SAE 将会推出大局调用拓扑,服务上下游依靠,调用链路详情等进阶功用,打造愈加完善的 Serverless 多言语可观测体系。