容器寿命如何影响可观测性

开源云中文社区
容器从根本上改变了我们运行应用程序的方式。组织不再将应用程序作为长期运行的服务运行,而是作为临时进程运行。容器的配置速度使组织能够比以往更快地扩展、优化资源消耗和更新应用程序。一个典型的Kubernetes容器只持续一天,而一个典型的AWS Lambda容器只持续大约一小时。

容器从根本上改变了我们运行应用程序的方式。组织不再将应用程序作为长期运行的服务运行,而是作为临时进程运行。容器的配置速度使组织能够比以往更快地扩展、优化资源消耗和更新应用程序。一个典型的Kubernetes容器只持续一天,而一个典型的AWS Lambda容器只持续大约一小时。

容器的动态性和短暂性也影响了其可观测性。可观测性是DevOps过程的关键部分,但与更传统的单体应用程序相比,容器增加了独特的挑战。

在本文中,笔者将解释这些挑战是什么,以及DevOps团队可以做些什么来简化向基于容器的体系结构的过渡。

容器可观测性的复杂性

在我们深入研究容器的寿命之前,笔者将首先解释从容器中收集可观测数据的挑战。有几种方法,包括一些内置到容器运行时和编排工具(如Docker和Kubernetes)中的方法。其中包括:

——将专用监控代理部署为主机应用程序或容器。

——部署日志路由器以自动收集容器生成的日志。

——使用Docker日志驱动程序将容器日志存储到主机。

——通过docker stats、Kubernetes metrics管道或类似的API收集指标。

然而,这些方法也存在风险。企业微服务部署可能涉及跨越许多云平台的数百、数千、甚至数万台主机。不仅应用程序不再连续运行,而且在部署应用程序之前,团队不再确定哪个主机将运行该应用程序。一个应用程序也可能同时运行多个实例,因此当出现问题时,很难知道在哪里查找。由于容器是短暂的,因此写入容器文件系统的任何数据都将随容器一起删除,除非可以将其传输到主机。这也意味着不再保证工程师能够交互地对正在运行的容器进行故障排除,因为它可能在工程师打开会话之前已被删除。

此外,主机本身也可能是短暂的。Kubernetes Cluster Autoscaler、Google Kubernetes Engine和Amazon Elastic Kubernetes Service等工具可以自动添加或删除主机以满足需求的更改,这可能导致写入主机文件系统的任何文件的数据丢失。与更传统的单体应用程序相比,部署环境在应用程序的整个生命周期中保持相对一致。在传统的环境中,DevOps团队可以在主机上安装一个监控代理,直接将数据从应用程序记录到主机的文件系统,甚至可以登录到主机环境来收集信息或解决问题。对于容器,这几乎是不可能的任务。这就是为什么用单体的思维方式来考虑容器的可观测性不仅是自欺欺人的,而且是危险的。

在基于容器的架构中实现可观测性时,团队需要关注两个关键目标:

——从容器和主机收集和集中可观测性数据。

——在整个应用程序而不是单个容器的上下文中测量可观测性数据。

接下来,笔者将解释这些目标的含义以及如何实现它们。

可观测性数据的采集与集中

如前所述,容器和主机是短暂的:它们可以随时启动、停止和迁移。因此,容器和主机生成的任何可观测数据都应发送到持久性收集和存储服务。

在这种情况下,像LogDNA这样的第三方服务是一个理想的解决方案,因为它们提供了一个专用、快速和可靠的平台,用于接收大量数据。例如,LogDNA聚合并解析传入的日志数据,以便工程师可以立即对其进行搜索、筛选和分析。这消除了工程师远程登录应用程序环境的需要,并确保即使原始容器或主机被破坏,可观测性数据始终可用。

通过元数据实现上下文化

与单体不同,容器只是大型应用程序的一小部分。虽然从单个容器收集可观测性数据很重要,但是在整个应用程序的上下文中查看时,这些数据会变得非常有用。

例如,假设你有一个三层web应用程序,每层都作为单独的容器运行。现在想象一下,你的后端层突然开始生成错误,容器因此崩溃。从单个容器中提取日志和指标有助于进行根本原因分析,但这无助于在整个应用程序的上下文中看到错误。该问题可能是特定于容器的,也可能表示更广泛的、应用程序范围内的问题。

这与短暂性有什么关系?在收集可观测性数据时,你收集的数据应标识容器提供的服务,而不是容器本身。例如,LogDNA代理自动用容器名和镜像名标记每个容器日志。Kubernetes代理通过包含Pod名称、节点和Kubernetes名称空间,以及其他有用的元数据来扩展它。这允许你在容器、Kubernetes服务或部署的所有实例中搜索和筛选日志。拥有这种级别的上下文对于分布式跟踪特别重要,但它适用于所有形式的可观测数据。

如何有效处理短暂性?

像LogDNA这样的托管监视服务是收集、上下文化和访问可观测性数据的最简单和最有效的解决方案之一。使用LogDNA,你可以部署一个代理,只需两个命令就可以从整个Kubernetes集群收集日志。LogDNA代理除了收集容器日志之外还收集主机日志,为你提供应用程序和基础设施的整体视图。而且,因为代理是作为守护程序部署的,它会随着你的基础设施自动扩展。

原文链接:

https://thenewstack.io/how-container-lifespan-affects-observability/

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论