[大厂实践] 边缘网络的可观测性

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: [大厂实践] 边缘网络的可观测性

美国快餐连锁巨头 Chick-fil-A 在其 2800 多家餐厅部署了 Kubernetes 边缘集群,本文介绍了 Chick-fil-A 管理运维其边缘集群的最佳实践。原文: Observability at the Edge

管理 2800 个 Kubernetes 边缘集群

Chick-fil-A 共有约 2800 家餐厅,每一家都部署了Kubernetes边缘集群,以实现高可用性,负责运行关键业务工作负载,并且不用依赖互联网。在这些集群之上,还运行了一组平台服务,提供跨集群的身份管理、应用部署和可观测性等服务。此外,我们还管理着数十万物联网(IOT)设备,如煎锅、烤架或平板电脑(作为用户界面),除了运营指标和日志外,这些设备每月还会发送数十亿条 MQTT 消息。


和内部团队部署的任何边缘应用一样,运维 2800 多个 Kubernetes 集群需要小心谨慎、充满挑战。这些团队都是平台的客户,任何运行应用程序的人都需要强大的可观测性,边缘网络当然也是如此。在这篇文章中,我们将分享 Chick-fil-A 边缘网络的可观测性架构。

边缘的挑战

边缘带来了许多独特的挑战和限制,这些挑战和限制对现代云原生思维模式来说有些陌生。


  • 日志: 应用日志有很多,不可能将每个 Kubernetes pod 和 IOT 设备的调试日志都实时推送到云上。
  • 带宽: 在服务的早期迭代中,因为要返回大量极其冗长的日志,曾经消耗了所有可用带宽,甚至影响到了信用卡处理业务(很不好!)。对生产环境的观测影响到了生产业务是很不好的结果。
  • 成本: 跨 2800 个地点的度量成本可能会非常昂贵,与增加的业务价值成比例上升的成本令人望而却步。
  • 异构数据源: 我们从许多类型的应用程序收集日志、指标和遥测数据,包括平台应用、其他团队的业务应用、供应商开发的应用以及餐厅物联网设备。

边缘即平台

我们的边缘环境提供了一个平台,内部团队可以在上面构建系统和服务,类似于在 AWS 或 Google 提供的云平台上构建应用程序,但不会限制用户用什么工具或如何使用。我们遵循类似的范例,允许团队拥有"框架内的自由"来选择不同的编程语言、可观测性工具等等。对于可观测性,这很重要,因为边缘平台需要为不同团队所选择的工具提供相关指标和日志(某些日志和指标组有一定程度的重叠),因此日志管道非常适合这项任务。


红色为平台团队提供的服务,蓝色为其他团队的服务

度量指标

边缘网络可观测性的目标是为应用团队创造一种从"日志优先"到"度量优先"的心态转变,我们称之为"一流指标(first-class metrics)"的概念,"日志派生指标(first-class metrics)"是其替代方案。


在深入讨论之前,我们先来了解一下什么是度量指标,应该用于什么用途?


在我们的上下文中,度量是在一段时间间隔内收集的数据点,可以提供对系统的行为、性能和健康状况的洞察。度量类型包括:


  1. 系统度量指标: 关于系统本身的度量,例如 CPU 使用情况、内存使用情况、网络带宽使用情况、磁盘 I/O 等,提供了对系统整体性能和健康状况的洞察。
  2. 应用度量指标: 特定于系统上运行的应用程序的度量。例如,活动用户数、每秒事务数、错误率、响应时间等,通常是应用程序性能和有效性的关键指标。
  3. 业务度量指标: 这些是将技术性能与业务结果联系起来的指标,例如每用户产生的收益、转换率、客户获取成本等。有时候,这些指标是判断系统是否正常运行的唯一指标。


度量对于建立标称性能的基线、根据该基线监视系统、排除异常行为以及做出决策(人工的或自动的)非常有用。


我们非常喜欢通过优秀的指标来理解应用程序行为,并通过较小的数据量提供良好的可观测性上下文。创建有用的指标(不要太多,也不要太少)来指示应用程序的性能很困难,我们也还在努力的过程中。在我们的边缘计算用例中,典型的 HTTP 状态指标用处不大,因为大多数应用不接受传入的 HTTP 请求,而是向我们的餐厅生态系统中的其他应用程序和设备发送 MQTT。这需要更批判性的思考,以确定哪些指标对确定健康状况有用。

Vector

Vector是用 Rust 构建可观测性管道的开源工具,由几个关键部分组成:


  1. 源(Sources): 数据的来源。换句话说,源定义了将要使用的数据向量的来源。Vector 支持系统日志、应用程序日志、Kubernetes 日志、docker 日志、prometheus、来自云提供商的数据或任何其他类型的可观测性数据。
  2. 转换(Transforms): Vector 也可以做实时转换,包括过滤、解析、采样、添加字段、类型转换、匿名化数据等操作。
  3. 接收器(Sinks): 接收器是数据后处理的目的地,可以是像 AWS S3 这样的存储系统,也可以是 Datadog metrics 这样的监控服务,或者 Kafka 这样的事件总线,等等。
边缘指标收集

在我们的 Kubernetes 集群中,使用 Prometheus 从每个 pod 中暴露的/metrics 端点进行收集。我们收集所有指标,然后使用 Vector 云实例作为边缘 Vector 接收器。


餐厅的边缘架构,绿线和黑线表示出站日志和指标。


在许多情况下,当我们试图将指标和日志分离到单独的流时,转换非常困难。许多工具无法处理。在这两者结合的情况下,我们利用 sidecar 从日志中抓取与指标相关的标签,并将这些指标转发给 Vector,这样就可以拥有一个完整的指标驱动的环境运维视图。

日志

尽管我们更喜欢默认的良好指标,但日志对许多团队来说仍然至关重要。我们相信,当故障排除困难的问题时,特定上下文中的日志总是有用的,解决这些问题需要依赖超出度量或跟踪的额外上下文。

日志收集

默认情况下,所有边缘应用(应该)以DEBUG级别记录日志。Vector 通过抓取 Kubernetes 日志接口收集这些日志,并存储在本地。对于每个应用,都有独立参数为日志配置存储空间大小。


对于其他设备(炸锅、烤架、物联网设备),我们还创建了本地运行的 HTTP 服务,允许集群外设备发布其日志以进行收集和转发。这通常是供应商提供的解决方案,使我们能够为他们提供日志(或指标),而不需要他们直接写到云上,因为我们希望能够控制环境中的所有出站流量。

日志传送

何时/如何将日志发送到云上?总体策略是什么?


Vector 转换过滤日志,默认情况下只转发ERROR级别的日志到统一的 Vector 云实例上。只要集群有可用的互联网连接,日志就会近乎实时的传输。


为防止潜在网络饱和的级联效应,我们为 POS 和信用系统设置了和边缘网络不同的带宽,并分配了单独的 VLAN。在脱机场景中,滚蛋存储的日志会保存在存储中,并将在网络再次在线的时候收集。


但是等等!如果需要从应用日志中获取更多信息,而ERROR不够,怎么办?


如果团队为了支持生产环境需要某个特定时间段的更详细日志,可以调用自定义的云端部署的 API 端点,该端点将在任意时间段(通常为 30 分钟)将某个或某组餐厅的特地应用(pod)的日志收集过滤器更改为DEBUG


时间一到,日志收集过滤器将恢复默认值。恢复默认值很容易被人忘记,但如果不加以解决,可能会产生潜在的长期影响,因此需要自动化控制。最终,这一解决方案确保了生产支持的可能性,但对餐厅集群的长期影响最小。自动化和自助服务对于成功大规模运维边缘平台至关重要。

Fan Out

日志和指标被交付到企业餐厅计算团队拥有的 AWS 云环境中。我们有一个云部署的 Kubernetes 集群(EKS),运行大部分控制平面服务。在这个环境中,我们有一个集中的 Cloud Vector 实例,为每个部署配置接收器,将日志转发到对它们感兴趣的目标受众。



这样团队就可以使用任何想用的工具,并赋予他们自主权来构建报告和指示板来支持其应用。大多数团队都将他们的日志和指标发送给 Grafana、Datadog 或 CloudWatch。


此外,所有的警报事件都被发送到 OpsGenie, 并根据值班轮换安排为团队创建告警。

不,不要这样

对于边缘应用或集群外设备,有些事情是不允许的。


其中之一是直接将日志和指标发送到云上。从客户端应用程序或物联网执行此操作将绕过我们管理带宽限制的所有控制,特别是在带宽高度受限的备份网络连接模式中。在这些情况下,我们将面临网络被低优先级数据占据出口带宽的潜在风险。

结论

边缘网络的可观测性很有挑战,需要仔细选择平台和应用运行状况的关键指标。从使用日志作为支柱到创建一流指标的思维转变是一种变革,需要工程师采用全新的思维范式。然而,使用一流指标是获得关于边缘平台或应用程序高质量观察数据的好方法,并且不会生成太多出站数据。Vector 是一个强大工具,可以帮助我们实时转换可观测性流量,将出站操作数据减少到所需的最低限度,从而使业务遥测的带宽最大化。我们真的很高兴这个架构能够支持我们在边缘网络的当前需求以及新兴需求。




你好,我是俞凡,在 Motorola 做过研发,现在在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。为了方便大家以后能第一时间看到文章,请朋友们关注公众号"DeepNoMind",并设个星标吧,如果能一键三连(转发、点赞、在看),则能给我带来更多的支持和动力,激励我持续写下去,和大家共同成长进步!

目录
相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
103 30
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络(CNN): 从理论到实践
本文将深入浅出地介绍卷积神经网络(CNN)的工作原理,并带领读者通过一个简单的图像分类项目,实现从理论到代码的转变。我们将探索CNN如何识别和处理图像数据,并通过实例展示如何训练一个有效的CNN模型。无论你是深度学习领域的新手还是希望扩展你的技术栈,这篇文章都将为你提供宝贵的知识和技能。
79 7
|
24天前
|
数据采集 XML 存储
构建高效的Python网络爬虫:从入门到实践
本文旨在通过深入浅出的方式,引导读者从零开始构建一个高效的Python网络爬虫。我们将探索爬虫的基本原理、核心组件以及如何利用Python的强大库进行数据抓取和处理。文章不仅提供理论指导,还结合实战案例,让读者能够快速掌握爬虫技术,并应用于实际项目中。无论你是编程新手还是有一定基础的开发者,都能在这篇文章中找到有价值的内容。
|
26天前
|
云安全 监控 安全
云计算环境下的网络安全策略与实践
在数字化时代,云计算已成为企业和个人存储、处理数据的重要方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨如何在云计算环境中实施有效的网络安全措施,包括加密技术、访问控制、安全监控和应急响应计划等方面。我们将通过具体案例分析,展示如何在实际场景中应用这些策略,以保护云中的数据不受威胁。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的卷积神经网络:从理论到实践
【10月更文挑战第35天】在人工智能的浪潮中,深度学习技术以其强大的数据处理能力成为科技界的宠儿。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,在图像识别和视频分析等领域展现出了惊人的潜力。本文将深入浅出地介绍CNN的工作原理,并结合实际代码示例,带领读者从零开始构建一个简单的CNN模型,探索其在图像分类任务中的应用。通过本文,读者不仅能够理解CNN背后的数学原理,还能学会如何利用现代深度学习框架实现自己的CNN模型。
|
1月前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
60 1
|
1月前
|
数据采集 存储 XML
Python实现网络爬虫自动化:从基础到实践
本文将介绍如何使用Python编写网络爬虫,从最基础的请求与解析,到自动化爬取并处理复杂数据。我们将通过实例展示如何抓取网页内容、解析数据、处理图片文件等常用爬虫任务。
241 1
|
2月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
156 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
1月前
|
监控 安全 网络安全
网络安全新前线:零信任架构的实践与挑战
网络安全新前线:零信任架构的实践与挑战
31 0
|
2月前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
227 1
下一篇
DataWorks