可观测性:使用指标、日志和追踪
作者:Jessica Wachtel / 开发者
2023年6月5日
导航至
本文最初发表于 The New Stack,并经许可在此处转载。
可观测性的概念围绕着从系统的各个部分收集数据,以提供对整个软件的统一视图。
容错、无单点故障和冗余是现代软件系统中突出的设计原则。但这并不意味着错误、降级、漏洞甚至偶尔的灾难不会发生。分布式系统架构的复杂性使得事件的浮出水面更像是一个侦探小说般的谜题,而不仅仅是寻找屏幕上的一个红点。
监控软件系统的概念早已存在。可观测性的概念最早出现在 1960 年,但最近才开始流行,因为软件系统需要超越传统监控提供的更深入的洞察力。传统监控侧重于软件系统的各个领域。这种类型的监控可以识别系统中一部分(如网络、数据库或服务器)的问题,但无法跟踪请求生命周期或发现系统中另一部分的问题。相比之下,可观测性的概念围绕着从系统的各个部分收集数据,以提供对整个软件的统一视图。
可观测性的三大支柱
指标
指标描绘了软件系统的整体图景。它们监控基线性能,在异常发生时精确定位异常,并识别趋势。指标不是一刀切的。谁收集指标决定收集哪些指标。许多企业或开发者收集的热门指标包括 CPU 利用率、网络流量、延迟或用户注册数。
指标侧重于系统的某个领域,使得跨分布式系统跟踪问题变得困难。最佳实践建议以有规律的间隔收集数据,并使用数值来存储指标。
日志
日志是记录。它们与指标的不同之处在于它们记录事件,但与指标类似,这些事件是企业或软件认为重要的任何事情。这包括从一般信息,到超过特定阈值的任何事件,到警告和错误。日志创建的历史记录提供了对软件环境中问题的洞察。当错误发生时,日志会显示错误发生的时间以及与之相关的事件。
日志在有帮助和有害之间存在微妙的平衡。日志数据是一个敏感的话题。提供数据是日志存在的原因,但它不能是任何数据。过多的数据可能会压垮系统并导致更高的延迟。日志无权泄露敏感或私人数据。然后是存储。日志的有用寿命很短。它们的有用性随着时间的推移而降低。存储日志的时间要足够长,以满足其寿命,并相应地驱逐或存档,以减少开销存储,以免它们压垮数据库。
追踪
追踪跟踪请求在分布式或微服务系统中移动时的端到端行为。在分布式追踪中收集的数据为使用多个内部微服务的请求带来了更高的可见性。追踪提供了对请求在应用程序特定点(例如代理、中间件和缓存)的行为方式的洞察,以识别执行流程中的任何分支或跨系统边界的网络跃点。
OpenTelemetry
[OpenTelemetry](https://influxdb.org.cn/blog/getting-started-with-opentelemetry-observability/ (OTEL) 是一个标准化的开源框架,由工具、API 和 SDK 组成,旨在简化遥测数据的收集。指标、日志和追踪都属于遥测数据的范畴。通过消除供应商锁定并为所有人创建可用的工具,OTEL 旨在推动可观测性领域的创新。其结果是,开发人员在分析其日志、指标和追踪时可以使用更广泛的选择。这使得在实施可观测性最佳实践时更加容易。它是云原生计算基金会 (CNCF) 的一个孵化项目,是 OpenCensus 和 OpenTracing 项目合并的成果。开发者社区支持 OTEL,并且围绕它涌现出了一个丰富的社区。
摆脱供应商锁定的束缚,软件系统可以有更多的数据库选项来存储遥测数据。在这些选项中,存储遥测数据的一个强大场所是专门构建的时间序列数据库。首先,可观测性是衡量软件系统随时间变化的情况,而时间序列数据库存储在时间范围内写入和查询的大量数据。分析时间序列数据(如指标)需要跨时间范围查询数据。这些查询在时间序列数据库中很容易执行,而对于其他数据库类型来说,高效执行则很困难。
InfluxDB 3.0 和可观测性
InfluxDB 3.0 于 4 月发布,使 OTEL 的使用比以往任何时候都更加便捷。新的数据库引擎构建于 Apache Arrow 之上,并带来了相对于以前版本的 InfluxDB 的许多性能改进。该数据库现在支持无限基数数据而不会影响性能,这意味着针对高基数数据的查询速度提高了 100 倍。InfluxDB 3.0 实时摄取和查询数据,使其成为需要实时分析(如可观测性)的应用程序的理想选择。实时分析也使得识别异常的速度更快。
InfluxDB 3.0 在单个数据库中存储指标、日志和追踪。每种数据类别都有独特的工作负载,这留下了一些未解答的问题,例如
- 我们遵循什么模式?
- 我们如何将追踪转换为行协议?
- InfluxDB 如何与更大的可观测性生态系统连接?
InfluxDB 团队有一个新教程,其中包括一个完整的代码仓库和代码演练,重点介绍如何收集追踪、日志和指标。技术栈是 InfluxDB 3.0、Jaeger 和 Grafana。
结论
软件系统正变得越来越复杂,但识别和解决瓶颈、漏洞和错误并不一定如此。指标(用于传统监控)是系统不同部分的数值记录。日志记录历史事件。追踪提供了对请求在整个系统中移动时的行为方式的可见性。就像其他一切一样,遥测数据只是数据。它的真正价值在于你如何使用它。
InfluxDB 是专门为处理时间序列数据而构建的,而遥测数据就是时间序列数据。OpenTelemetry 的创建为开发者处理可观测性实践打开了许多扇门。使用 OTEL 和 InfluxDB 为您的遥测数据带来了实时分析、无限基数和快速查询的强大功能。
要开始使用,请立即开设一个免费的 InfluxDB Cloud 账户,或查看我们的 OpenTelemetry 教程 此处。