第五章:自动生成数据观察结果-灵析社区

攻城狮无远

在前一章介绍了低级别日志记录所面临的挑战之后,我们的重点转向探索替代方法,以增强数据可观测性并简化其采用,通过自动化。在本章中,我将介绍捕获和分析数据观察结果的新可能性和策略,为更全面的可观测性框架铺平道路。

抽象策略

上一章节解释了如何使用低级别的API将数据可观测性添加到处理数据的应用程序中。即使对于简单的流程,这种方法也可能变得繁琐,将任务留给最终用户——数据工程师或从业者。

大部分工作,如第4章中介绍的代码指令,可以抽象为一个更高级别的框架,减少涉及的工作量,只要你足够时间来定义它。与其他最佳实践一样,缩短上市时间的压力可能会导致跳过生成数据观察的工程师知道他们将部署一些他们几乎没有信心的东西时的步骤。

为了避免陷入这个陷阱,我们可以自动化各种最佳实践策略或技术——这是其他领域的经典优化实践,比如应用程序可观测性,其中大多数常见的观察通常会自动生成,例如Web服务的请求次数,计算引擎的内存使用情况,应用程序的版本(参见META-INF)。自动化始终具有较少的灵活性,因为它解决了常见任务。但是,您可以使用低级别API将这些任务扩展到您的特定需求。

这些技术在应用程序可观测性中广泛使用,例如,在应用程序可观测性中自然适用。像Datadog、Splunk和OpenTracing等这样的参与者在开发的各种代理中使用它们。 第一个策略——使用事件监听器——利用您用于数据工作的工具可能触发的事件。

事件监听器

根据您用于转换或操作数据的框架和工具,您可能会遇到一些已实现了允许对其内部行为做出反应的概念,例如Apache Spark等。当发生某些事件时,这些技术使您能够注册侦听器以拦截事件传达的信息并根据事件采取行动。了解哪些行为可以被拦截,允许您以更自动化、系统化和标准化的方式创建关于它们的可见性。

在数据可观察性中,与表示在第2章中解释的内部系统的模型相关的事件特别有趣。此类事件通常可用于读取或写入数据源以及运行转换。

用于利用这些事件的组件通常被命名为监听器或处理程序。您可以创建并在事件总线上注册它们,事件总线是传播触发事件的系统。

一些技术可以触发事件,这些事件一次包含所有可用信息,或者包含足够的信息,以便您几乎可以在一行日志或操作中生成几乎完整的模型,例如Apache Spark(在第6章中介绍)。

在可能的情况下,基于事件的代理非常强大,因为您可以自动集成它们到框架级别或工具服务器中,发布大部分信息而无需花费太多时间。

当然,此概念仅适用于创建标准化信息。任何自定义内容,如度量、算法或描述,必须由应用程序或用法引入。与期望相关的规则需要参与,它们留下了很少的标准化空间,同时保持了其效率和性能。通用规则适用于所有情况,太模糊以捕获自定义或边缘情况。应用程序各不相同。

日志作为事件是一种特殊情况,如果您使用的框架、应用程序或系统没有提供创建数据可观察性目标所需的灵活性时,值得考虑作为后备方案。这些系统被称为黑盒子,包括一些遗留系统。

但是,如果这些系统是封闭的,它们可能会生成一些日志,例如已执行的SQL或已应用的模块。日志在应用程序可观察性的一部分中为系统创建了一些可见性。但是,它们最终可能包含足够的信息,可以在上下文之外通过外部方式修补系统来重新创建部分数据可观察性,就像可以将符合Prometheus的客户端附加到Java应用程序以生成关于其执行上下文的日志一样(版本、运行时等)。

面向切面的编程 (AOP)

面向方面的编程策略与事件监听器策略有些相似,简单来说,它的思想是对某些行为做出反应以扩展它。它通常用于配置目的,因为它使组件能够以更声明性的方式集成。方面就像在函数将要执行或已经执行时触发事件一样。图5-1突出了事件监听器和方面之间的相似性和不同之处,这些主要与注入的代码运行的位置(例如,不同的线程)以及方式(例如,通过事件总线或注入)有关。

阅读量:2015

点赞量:0

收藏量:0