描述 Kyma 中的可观测性

学习目标

  • 解释可观测性的核心概念

  • 说明 Kyma 中遥测的基本概念

  • 解释如何将 Kyma 与 SAP Cloud Logging 集成

可观测性简介

你现在使用 SAP BTP, Kyma runtime 运行着一些工作负载,并希望更深入地了解正在运行的应用。为此,你希望开始收集和分析应用的遥测信号,例如日志、追踪和指标。在本课中,你将学习 Kyma 的遥测功能,以收集相关数据并使用 SAP Cloud Logging 分析这些数据。

什么是可观测性?

可观测性是指系统提供其内部状态信息的能力。这些信息可用于监控系统行为并诊断问题。可观测性是基于微服务的应用中的一个关键概念,这类应用的组件数量庞大且组件之间的交互十分复杂。应用可以通过日志、指标和追踪来暴露其内部状态的信息。这些信息统称为“遥测”。

Kyma Telemetry 模块

概览

SAP BTP, Kyma runtime 附带 Telemetry 模块,它提供一个 Kubernetes API,用于收集已插桩工作负载的典型遥测数据,并将其发送到可观测性后端,例如 SAP Cloud Logging。

应用日志收集

应用日志对于应用的运行和故障排查至关重要。理想情况下,日志会被存储在外部系统中数天,并且可以轻松筛选。

Telemetry 模块附带一个基于 OpenTelemetry Collector 的日志收集解决方案。通过使用名为 LogPipeline 的 API,你可以无缝地收集应用日志。当你指定 SAP Cloud Logging 端点作为目标时,你即可在可配置的时间范围内即时访问日志数据。此外,如果应用的日志为 JSON 格式,日志将被解析并以一种可跨所有日志属性进行搜索和筛选的方式推送到目标端。

Telemetry 模块使用 Fluent Bit 来收集和处理日志。它支持一种 Fluent Bit 特有的基于 HTTP 的协议,从而能够与所有支持该协议的后端集成。

追踪收集

分布式追踪可帮助你理解应用行为以及前端操作与后端实现之间的关系。它们可以记录跨多个工作负载的请求链以及应用内部的执行链。追踪由各个参与追踪的组件发出的 span 组成。如果你收集所有 span 并将它们发送到可观测性后端,就可以分析在你的 SAP BTP, Kyma runtime 中发生的分布式追踪。

Telemetry 模块附带一个基于 OpenTelemetry Collector 的分布式追踪收集解决方案。通过使用名为 TracePipeline 的 API,你可以建立一个集群中心的网关,已插桩的应用可以向该网关推送 span 数据。Istio 和许多其他 Kyma 模块已预配置为向该网关推送 span。如果你指定 SAP Cloud Logging 端点作为目标,你即可即时访问追踪数据并获得一些可视化。要查看日志与追踪之间的关联,请使用 trace ID 属性丰富你的应用日志。

要对应用内部的 span 数据进行插桩,请使用可用的 OpenTelemetry SDK。此外,大多数语言和工具都提供大量自动插桩。请确保你的应用使用 OpenTelemetry 协议(OTLP)发送其 span 数据,因为这是网关使用的格式。

指标收集

指标是反映组件在一段时间内内部状态的聚合统计数据,这与面向请求的日志和追踪不同。它们反映组件的内部状态。诸如已处理请求数或注册用户数之类的典型统计数据,对于监控组件的当前状态和运行状况非常有用。此外,如果指标即将达到阈值或已经超过阈值,你还可以定义主动式和被动式告警。

Telemetry 模块提供一个 API MetricPipeline,它将基于 OpenTelemetry Collector 建立一个集群中心的网关,已插桩的工作负载可以向该网关发送指标数据。如果你指定 SAP Cloud Logging 端点作为目标,你即可即时访问指标数据并获得一个基础指标浏览器。

此外,MetricPipeline 支持多种输入场景,以便轻松收集指标:

  • 从 Kubernetes 运行时获取有关你的应用的信息

  • 从 Istio sidecar 获取

  • 从任何以 Prometheus 格式暴露指标的应用获取

要对应用内部的指标数据进行插桩,请使用可用的 OpenTelemetry SDK。此外,大多数语言和工具都提供大量自动插桩。请确保你的应用使用 OpenTelemetry 协议(OTLP)发送其 span 数据,因为这是网关使用的格式。

与 SAP Cloud Logging 集成

SAP Cloud Logging 的集成按以下步骤进行:

  1. 创建一个带有账户的 SAP Cloud Logging 实例,并准备好一个包含该账户凭据的 Kubernetes Secret。SAP Cloud Logging 是一项 SAP BTP 服务,该实例通过常规的服务管理功能创建。

  • 借助 SAP BTP Operator 模块,你可以定义一个 ServiceInstance 资源,引用要使用的服务计划并提供用于服务配置的附加参数。

  • 你还必须创建一个 ServiceBinding 资源,它会在服务中请求一个账户。在此,你可以配置凭据的定期轮换。

  • ServiceBinding 会触发生成一个保存凭据的 Kubernetes Secret。

  1. 使用 Telemetry API 定义一个 LogPipeline,引用保存凭据的 Secret。

  • 借助 Telemetry 模块,你可以定义一个 LogPipeline,它会在集群中创建相关的代理或网关以收集遥测数据。

  • LogPipeline 引用包含服务凭据的 Secret,日志代理使用该 Secret 来发送数据。

  • 当 ServiceBinding 的自动凭据轮换更新 Secret 时,日志代理会使用新凭据重新配置。

下图以 LogPipeline 为例说明该集成。TracePipeline 和 MetricPipeline 功能也支持同样的方式。

小结

在本课中,你了解了 Kyma 中 Telemetry 模块的不同方面,以及如何将它们与 SAP Cloud Logging 集成,以便即时访问遥测数据以进行分析和告警。

在下一个练习中,你将使用 Kyma Telemetry API 练习与 SAP Cloud Logging 的集成,并开始探索可用的数据。

延伸阅读

  • Kyma 中的 Telemetry 模块

  • OpenTelemetry

  • SAP Cloud Logging

  • 与 SAP Cloud Logging 集成

  • 使用 Istio 实现可观测性