问题排查服务级别目标 (SLO)

编辑

要创建和管理 SLO,您需要一个适当的许可证、一个具有 transformingest 节点角色的 Elasticsearch 集群,并且必须配置SLO 访问权限

请勿编辑、删除或篡改本文档中提到的任何“内部”资产,例如 SLO 应用程序创建的转换或摄取管道。

请勿尝试通过覆盖索引模板或编辑设置/映射来编辑本文档中提到的 .slo-observability.* 索引。

此处描述的实现细节可能会发生更改。

本文档概述了使用服务级别目标 (SLO) 时遇到的常见问题。它探讨了 SLO 与堆栈中其他核心功能(例如转换摄取管道)之间的关系,强调这些集成如何影响 SLO 的功能。

了解 SLO 内部原理
编辑

如果您已经熟悉 SLO 的工作原理及其与其他系统组件(例如转换和摄取管道)的关系,则可以直接跳到常见问题

SLO 由多个系统资源表示

  • SLO 定义:存储为 Kibana 保存的对象。
  • 转换:对于每个 SLO,Kibana 创建两个转换

    • 汇总转换slo-{slo.id}-{slo.revision},将数据汇总到较小的文档集中。此转换的源索引由 SLO 定义。目标索引将为 .slo-observability.sli-v{slo.internal-version}-{monthly date}
    • 汇总摄取管道slo-observability.sli.pipeline-{slo.id}-{slo.revision},由汇总转换使用。
    • 摘要转换slo-summary-{slo.id}-{slo.revision},更新最新值,例如观察到的 SLI 或剩余的错误预算,以便高效搜索和筛选 SLO。此转换的源是 .slo-observability.sli-v{slo.internal-version}*。目标索引为 .slo-observability.summary-v{slo.internal-version}
    • 摘要摄取管道slo-observability.summary.pipeline-{slo.id}-{slo.revision},由摘要转换使用。
  • 其他资源:Kibana 还安装和管理 SLO 的共享资源,包括索引模板、索引和摄取管道等。

SLO 更新更改任何 SLI 参数SLO 目标时间窗口时,会发生修订版本升级 ({slo.revision}),并且会完全重新安装关联的资产(转换和摄取管道)。此外,修订版本升级会删除该 SLO 之前的所有聚合数据。对 namedescriptiontags 等字段的更新不会触发修订版本升级或资产重新安装。

确保转换正常运行且集群运行状况良好对于维护准确可靠的 SLO 至关重要。

常见问题
编辑

当集群中存在基础问题(例如分片不可用或转换失败)时,通常会出现 SLO 问题。由于 SLO 依赖于转换来聚合和处理数据,因此这些组件中的任何故障或错误配置都可能导致 SLO 计算不准确或不完整。此外,不可用的分片会影响数据检索过程,从而进一步使 SLO 指标的可靠性复杂化。

没有转换或摄取节点
编辑

由于 SLO 依赖于 摄取管道转换来处理数据,因此必须确保集群具有具有适当角色的节点。

确保集群包含一个或多个具有 ingesttransform 角色的节点,以支持 SLO 正常运行所需的数据处理和转换。这些角色可以存在于同一节点上,也可以分布在不同的节点上。

运行状况不佳或缺失的转换
编辑

使用 SLO 时,务必确保关联的转换正常运行。转换负责生成 SLO 所需的数据,并且为每个 SLO 创建两个转换。如果您注意到 SLO 没有显示预期的数据,则需要检查这些关联转换的运行状况。

当任何关联的转换处于意外状态时,Kibana 会显示以下消息

  • “以下转换处于运行状况不佳的状态”,后跟转换列表。

有关诊断和解决与转换相关的问题的详细指南,请参阅转换问题排查文档。

还建议您执行以下转换检查

  • 确保 SLO 所需的转换尚未被删除或停止。

    如果已删除转换,则重新创建转换的最简单方法是使用重置 SLO操作,强制重新创建转换。如果转换已停止,请尝试启动它,然后检查转换的 运行状况选项卡

  • 检查 SLO 资产以分析 SLO 定义和所有关联的资源。

    使用 检查 UI 提供的直接链接,并检查所有引用的资源是否存在,因为检查功能不会验证这一点。

    使用 query composite 内容来验证转换执行的查询是否有效并返回预期的数据。

  • 检查 SLO 的源数据和查询。

    合法转换失败的最常见原因是源数据问题,例如时间戳解析错误或错误的查询结构。以下是由于无法解析的时间戳而导致转换失败的示例

    "reason": """Failed to index documents into destination index due to permanent error:
      [org.elasticsearch.xpack.transform.transforms.BulkIndexingException: Bulk index experienced [500] failures and at least 1 irrecoverable
        [unable to parse date [1702842480000]]. Other failures:
      [IngestProcessorException] message [org.elasticsearch.ingest.IngestProcessorException:
        java.lang.IllegalArgumentException: unable to parse date [1702842480000]]; java.lang.IllegalArgumentException: unable to parse date [1702842480000]]""",
    "issue": "Transform task state is [failed]"
  • 作为最后的手段,请考虑重置 SLO
缺失的摄取管道
编辑

如果缺少任何所需的摄取管道,请尝试重置 SLO操作。

与堆栈相关的问题
编辑

如上所述,维护健康的集群对于 SLO 正常运行至关重要。以下示例显示了与 SLO 无关但仍可能中断其正常运行的问题。虽然排查这些问题不在本文档的范围之内,但包含它们是为了说明目的。

  • 访问源数据时出现问题,导致转换失败

    Failed to execute phase [can_match], start; org.elasticsearch.action.search.SearchPhaseExecutionException:
      Search rejected due to missing shards [[index_name_1][1], [index_name_2][1], [index_name_3][1]].
  • 远程集群不可用,例如,如果 SLO 从名为 remote-metrics 的远程集群提取数据

    Validation Failed: 1: no such remote cluster: [remote-metrics]
  • 由于节点内存不足导致的断路器异常
SLO 问题排查操作
编辑
检查 SLO 资产
编辑

要能够检查 SLO,您必须在 Kibana 中激活相应的功能

  1. 通过在主菜单中找到堆栈管理或使用全局搜索字段,打开高级设置
  2. 启用 observability:enableInspectEsQueries 设置。

之后,访问SLO 编辑页面,然后单击SLO 检查

SLO 检查选项提供了 SLO 的详细报告,包括

  • SLO 配置
  • 汇总转换配置
  • 摘要转换配置
  • 汇总摄取管道
  • 摘要摄取管道
  • 临时文档
  • 汇总转换查询复合
  • 摘要转换查询复合

这些资源对于执行以下任务非常有用:尝试转换执行的查询和检查所有关联资源的 ID。该视图还包括指向 Kibana 中转换和摄取管道部分的直接链接。

重置 SLO
编辑

重置 SLO 会强制删除所有 SLI 数据、摘要数据和转换,然后重新安装并处理数据。从本质上讲,它会重新创建 SLO,就像用户删除并重新创建了 SLO 一样。

重置 SLO 虽然可以帮助解决某些问题,但它可能并不总是能解决错误的根本原因。大多数与转换相关的错误通常源于结构不正确的源数据,例如无法解析的时间戳,这会阻止转换的进行。此外,格式不正确的 SLO 查询以及随之而来的转换查询也可能导致失败。

在重置 SLO 之前,请验证源数据和查询是否已正确格式化和验证。只有在所有其他故障排除步骤都已用尽时,才应将重置作为最后手段。

请按照以下步骤重置 SLO

  1. 在主菜单中查找SLOs,或使用全局搜索字段
  2. 单击要重置的 SLO。
  3. 选择操作重置

或者,您可以使用 Kibana API 进行重置操作

POST kbn:/api/observability/slos/{sloId}∫/_reset

其中,sloId 可以从检查 SLO 资产操作中获得。

使用 API 调用来检索 SLO 详细信息
编辑

请参阅SLO API 调用,以替代使用 SLO 检查

从 beta 版本升级到 GA 版本
编辑

从 8.12.0 版本开始,SLO 已正式可用 (GA)。如果您是从 SLO 的 beta 版本(在 8.11.0 及更早版本中提供)升级,则必须将 SLO 定义迁移到新格式。否则,SLO 将不会显示。

迁移您的 SLO 定义

要迁移您的 SLO 定义,请打开 SLO 概览。横幅将显示检测到的过时 SLO 的数量。对于每个过时的 SLO,请单击重置。如果您不再需要该 SLO,请选择删除

如果您有大量的 SLO 定义,则可以自动化此过程。为此,您需要使用两个 Elastic API

includeOutdatedOnly=1 作为查询参数传递给定义查找 API。这将显示您过时的 SLO 定义。循环遍历此列表,逐个调用每个过时 SLO 定义上的重置 API。重置 API 会加载过时的 SLO 定义,并将其重置为 GA 所需的新格式。重置 SLO 后,它将开始重新生成 SLI 和摘要数据。

删除旧的摘要转换

迁移到 8.12 或更高版本后,您可能有一些旧的 SLO 摘要转换正在运行。您可以安全地删除以下旧的摘要转换

# Stop all legacy summary transforms
POST _transform/slo-summary-occurrences-30d-rolling/_stop?force=true
POST _transform/slo-summary-occurrences-7d-rolling/_stop?force=true
POST _transform/slo-summary-occurrences-90d-rolling/_stop?force=true
POST _transform/slo-summary-occurrences-monthly-aligned/_stop?force=true
POST _transform/slo-summary-occurrences-weekly-aligned/_stop?force=true
POST _transform/slo-summary-timeslices-30d-rolling/_stop?force=true
POST _transform/slo-summary-timeslices-7d-rolling/_stop?force=true
POST _transform/slo-summary-timeslices-90d-rolling/_stop?force=true
POST _transform/slo-summary-timeslices-monthly-aligned/_stop?force=true
POST _transform/slo-summary-timeslices-weekly-aligned/_stop?force=true

# Delete all legacy summary transforms
DELETE _transform/slo-summary-occurrences-30d-rolling?force=true
DELETE _transform/slo-summary-occurrences-7d-rolling?force=true
DELETE _transform/slo-summary-occurrences-90d-rolling?force=true
DELETE _transform/slo-summary-occurrences-monthly-aligned?force=true
DELETE _transform/slo-summary-occurrences-weekly-aligned?force=true
DELETE _transform/slo-summary-timeslices-30d-rolling?force=true
DELETE _transform/slo-summary-timeslices-7d-rolling?force=true
DELETE _transform/slo-summary-timeslices-90d-rolling?force=true
DELETE _transform/slo-summary-timeslices-monthly-aligned?force=true
DELETE _transform/slo-summary-timeslices-weekly-aligned?force=true

不要删除迁移后的 SLO 使用的任何新的摘要转换。