导读
Prometheus是监控和告警的事实标准,可以从应用程序和基础设施中获取指标。其高效存储大量维度时间序列的能力也使Prometheus非常适合其他运营分析用例,如观察物联网设备群。Apache Flink可以用作时间序列的预处理器,在写入Prometheus之前减少基数和频率。本次会议涵盖了一些潜在的用例,以及如何利用新的Apache Flink连接器(这是亚马逊云科技对Apache Flink项目的贡献)大规模向Prometheus发送数据。
演讲精华
以下是小编为您整理的本次演讲的精华。
在现代系统不断演进的环境中,可观测性已成为一个关键问题,为洞察这些复杂架构的内在运作提供了宝贵的视角。Lorenzo Nicora是一位驻伦敦的亚马逊云科技流解决方案架构师,Francisco Morio则是来自西班牙马德里的高级流解决方案架构师,他们登台阐述了可观测性对业务运营的深远影响。
正如Nicora娓娓道来,可观测性就像一扇窗户,让我们能够实时排查系统问题。这种提高的意识将带来更佳的客户体验,因为系统运行更加高效,从而推动应用和整个业务的收入增长。尽管可观测性通常被视为运营层面的问题,但其影响实际上遍及整个业务。
传统上,可观测性与监控IT基础设施、应用程序、计算资源、数据和中间件等紧密相连。然而,Nicora和Morio质疑了这一观点,坚持认为真正的可观测性应该超越这些范畴,涵盖整个业务。为了实现这种全面的视角,观察系统中构成复杂网络的所有技术资源就变得至关重要,端到端地跨越计算和基础设施的界限。
可观测性的三大支柱是日志、跟踪和指标,其中以指标为重点。Nicora解释说,指标是一系列随时间变化的样本,用于测量特定的值或特征。这些测量值可以是CPU利用率、温度等,以离散的时间间隔进行捕获,通常表现为时间序列数据。
时间序列是按时间顺序排列的离散数据点序列,通常以折线图的形式可视化,显示特定测量值随时间的演变。这些时间序列存储在专门的时间序列数据库中,不仅在可观测性领域,还有更广泛的应用。
从交易和金融数据到制造和工业应用、监控机器和物联网设备,时间序列数据库展现了其多功能性。Nicora强调了几种流行的时间序列数据库,包括Amazon Timestream、InfluxDB,当然还有他们演讲的重点Prometheus。
Prometheus是一个多维时间序列数据库,凭借其专门的查询语言、实时可视化、精确告警和丰富的连接器集成而脱颖而出。Prometheus专为运营指标而设计,在实时仪表板、监控和告警方面表现出色,提供可扩展性和高速写入,成本低廉。值得注意的是,Prometheus优先考虑数据的新鲜度和可用性,而非严格的一致性,这一设计选择与其预期用例相符。
尽管Prometheus通常与IT基础设施监控联系在一起,但Nicora和Morio质疑了这一观点,认为其能力远不止于此。从物联网和设备监控到制造业、工业应用、车队管理和电信基础设施,Prometheus都可以成为一种强大的工具,用于观察那些需要实时可视化、精确告警和处理大量数据的各种系统。
向Prometheus写入数据的最常见方法是通过其拉取机制,即Prometheus抓取器按配置的时间间隔从应用程序指定的端点获取暴露的指标。然而,演讲者介绍了一种替代方法:远程写入接口,允许直接将指标写入Prometheus数据库。当源需要更好地控制发送的数据和发送间隔时(如物联网设备),这种方法就显得特别有利。
Nicora和Morio演示了一个示例架构,说明了拉取机制的工作原理。在这种机制下,应用程序或Kubernetes集群通过特定端点暴露其指标,Prometheus被配置为抓取并存储在其后端。随后,Grafana等工具可以利用Prometheus查询语言(PromQL)进行实时可视化。
相比之下,使用远程写入接口时,需要一个自定义组件来接收来自物联网设备或其他源的数据,并使用远程写入接口直接推送到Prometheus。
虽然PromQL提供了强大的过滤、聚合和自定义函数,但它也有局限性。它不允许数据丰富或连接,无法合并存储在数据库中的不同时间序列。此外,PromQL缺乏自定义聚合的灵活性,用户只能使用Prometheus提供的预定义函数集。
随着数据量和时间序列计数的增加,加上高粒度和高基数,Prometheus中的查询性能可能会受到影响。这一挑战在物联网运营指标监控中尤为突出,数百万设备产生高频数据,往往缺乏如型号ID或设备位置等上下文信息。
在这种情况下,使用自定义预处理器就变得至关重要,可以在使用远程写入接口将数据写入Prometheus之前,对原始事件进行丰富、降低基数和执行自定义聚合。这正是Apache Flink这一分布式流处理框架大显身手的时候。
Apache Flink是一个用于无界数据集上有状态计算的框架和分布式处理引擎。作为一个框架,Flink允许开发人员编写自己的应用程序,而作为分布式处理引擎,它使这些应用程序能够跨多台机器以分布式方式运行,实现水平扩展。
Flink专为有状态计算而设计,其输出取决于多个输入和历史数据,从简单的滚动平均值计算到任意复杂的操作都包括在内。这种有状态性质得到了弹性处理,确保在应用程序崩溃或重启时不会丢失状态。
Flink最大的优势之一在于能够从各种系统读写数据,包括流存储如Kafka、Kinesis和Pulsar,消息队列如RabbitMQ,数据库,甚至以流模式读写S3上的文件。这种多功能性延伸到了输出目标,包括数据库、流消息系统、文件系统和各种数据库类型,如Cassandra、符合JDBC标准的关系数据库和DynamoDB。
Flink的连接器类似于驱动程序,使其能够与特定技术无缝集成,开发人员可以构建定制连接器以满足自身需求。
Nicora和Morio演示了如何使用Flink解决运营指标预处理的挑战,实现对原始事件的丰富(添加上下文信息)、降低基数(过滤不必要的传感器数据)、减小粒度(通过聚合)以及从多个原始指标计算衍生指标。
为了释放Flink和Prometheus之间的协同效应,演讲者介绍了亚马逊云科技新近向Apache Flink项目贡献的开源Flink Prometheus远程写入连接器。该连接器完全实现了Prometheus 1.0远程写入规范,通过批处理和水平扩展优化了写入吞吐量,同时保留了Prometheus所需的样本顺序。
该连接器还提供了可配置的错误处理,并基于另一项亚马逊云科技开源贡献Apache Flink Async Sink构建,使开发人员能够构建自己的自定义异步连接器,利用任何异步客户端。
Nicora和Morio演示了一个简单的Flink可观测性数据管道,说明了如何从被观察设备接收原始事件,将其引入流存储系统如Kafka。然后,Flink应用程序使用源连接器读取这些事件,通过各种算子进行转换,最终使用Flink Prometheus远程写入连接器将处理后的数据写入Prometheus后端。
为了演示一个实际用例,演讲者提出了一个涉及10万辆连网车辆的场景,目标是构建一个实时仪表板,了解这些车辆在实地的行为。考虑了三种事件类型:内燃机转速、电动机转速(用于混合动力车辆)和点亮的警告灯数量。
目标是确定处于运动状态的车辆数量(由任一发动机的非零转速读数表示),以及按地区和车型(而非单个车辆)汇总的点亮警告灯数量。
他们展示了一个端到端架构,包括一个数据生成器模拟10万辆车辆的事件并将其发送到Amazon Managed Streaming for Apache Kafka。一个托管的Flink应用程序充当预处理器,从Kafka接收数据,执行自定义转换以计算衍生指标,并将处理后的数据写入Amazon Managed Prometheus Service。最后,Grafana用于实时仪表板。
为了说明预处理的好处,演讲者展示了第二个版本的架构,其中原始事件直接写入Prometheus,没有在Flink中进行任何预处理,从而可以对比两种方法。
深入探讨预处理Flink应用程序的逻辑结构,Nicora和Morio介绍了从Kafka源到Prometheussink之间的几个处理步骤。
该应用程序遵循Flink编程模型,开发人员通过指定算子及其互连来定义数据流逻辑,最终执行定义的数据流。
从Kafka源开始,演讲者解释了在这种特定用例中使用处理时间语义进行窗口和聚合的原因,而不是事件时间语义,后者需要使用水印。
丰富步骤涉及一个简单的映射操作,将原始车辆事件转换为丰富的车辆事件,通过查找参考数据集添加上下文信息,如车辆型号。
然后创建两个独立的分支来计算警告事件和车辆运动的衍生指标。对于警告事件,应用程序过滤掉与警告无关的事件,并根据车辆型号和地区进行处理时间的滚动窗口聚合,以计算唯一的警告灯数量。
同样,对于车辆运动,应用程序根据内燃机转速和电动机转速过滤事件,按车辆型号和地区进行分区,并执行滚动窗口聚合以确定运动车辆的数量。
然后使用联合操作合并两个流,最后一个映射将聚合事件转换为Flink Prometheus远程写入器连接器所需的格式。键控操作确保来自同一时间序列的数据由同一并行写入器写入,从而保留Prometheus所需的样本顺序。
接下来将Flink Prometheus远程写入器连接器附加到数据流上,其配置涉及Prometheus端点URL、身份验证详细信息(用于Amazon Managed Prometheus Service)以及最大重试次数等可选参数。
在现场演示中,Nicora和Morio展示了在亚马逊云科技上运行的预处理Flink应用程序,从100,000辆车辆中摄取模拟数据,执行必要的转换,并将处理后的数据写入Amazon Managed Prometheus Service。然后使用Grafana仪表板可视化衍生指标,如按地区和车辆型号划分的运动车辆数量和警告灯数量。
该演示突出了使用Flink进行大规模可观测性数据预处理的好处,能够实现数据丰富、基数减少、自定义聚合和衍生指标计算,最终在Prometheus中提供更有意义和可操作的数据视图。
总之,Nicora和Morio强调了结合Apache Flink和Prometheus通过Flink Prometheus远程写入器连接器的强大功能。这种集成为观察大规模分布式资源(如物联网设备和联网车辆)开辟了新的用例,同时利用了Prometheus的成本效益和实时能力。
无论是需要实时仪表板、警报还是大规模观察广泛分布的资源,Flink和Prometheus之间的协同作用(由Flink Prometheus远程写入器连接器实现)都提供了一种令人信服的解决方案。通过使用Flink预处理原始指标,并将处理后的数据存储在Prometheus中,组织可以获得宝贵的洞见、优化运营并推动业务成功。
总结
在这个富有洞见的演讲中,Lorenzo Nicora和Francisco Morio深入探讨了可观测性、Apache Flink和Prometheus的世界,探索了如何利用这些技术高效处理数百万个可观测事件。他们强调了可观测性在提供系统实时可见性、改善故障排除和提升客户体验方面的重要性。
演讲者强调,可观测性不仅仅局限于IT基础设施和计算资源,而是涵盖了整个业务生态系统。他们介绍了Prometheus,这是一个针对实时可视化、精确警报和无缝集成进行优化的强大时间序列数据库。然而,他们承认在观测大规模分布式资源(如物联网设备或连接车辆)时,高基数、高粒度和缺乏上下文信息会带来挑战。
为了应对这些挑战,演讲者介绍了Apache Flink,这是一个针对无界数据流上的有状态计算而设计的分布式处理引擎。他们演示了如何利用Flink对原始指标进行预处理,实现丰富、基数缩减、粒度调整、过滤和自定义指标计算。最关键的是,他们介绍了Flink Prometheus连接器,这是一个开源贡献,可以通过Prometheus的远程写入接口,直接将数据大规模写入Prometheus。
通过展示连接车辆用例的现场演示,演讲者阐释了结合Flink和Prometheus的强大功能。他们演示了一个Flink应用程序,该程序接收车辆事件,丰富它们的上下文信息,按型号和地区聚合指标,并使用连接器将处理后的数据无缝写入Prometheus。演示突出了这种方法的优势,能够实现大规模实时仪表板和警报,同时解决了观测分布式资源的挑战。
总之,演讲者强调,无论是需要实时仪表板、警报还是大规模观测广泛分布的资源,结合Apache Flink和Prometheus,并借助Flink Prometheus连接器,都能提供一种经济高效且可扩展的解决方案。他们鼓励与会者探索所提供的资源,并考虑将这种方法应用于自身的可观测性需求。
我们正处在 Agentic AI 爆发前夜。 2025 亚马逊云科技中国峰会提出,企业要从 " 成本优化 " 转向 " 创新驱动 " ,通过完善的数据战略和 AI 云服务,把握全球化机遇。亚马逊将投入 1000 亿美元在 AI 算力、云基础设施等领域,通过领先的技术实力和帮助“中国企业出海“和”服务中国客户创新“的丰富经验,助力企业在 AI 时代突破。