问题排查服务级别目标 (SLO)
编辑问题排查服务级别目标 (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 之前的所有聚合数据。对 name
、description
或 tags
等字段的更新不会触发修订版本升级或资产重新安装。
确保转换正常运行且集群运行状况良好对于维护准确可靠的 SLO 至关重要。
常见问题
编辑当集群中存在基础问题(例如分片不可用或转换失败)时,通常会出现 SLO 问题。由于 SLO 依赖于转换来聚合和处理数据,因此这些组件中的任何故障或错误配置都可能导致 SLO 计算不准确或不完整。此外,不可用的分片会影响数据检索过程,从而进一步使 SLO 指标的可靠性复杂化。
没有转换或摄取节点
编辑由于 SLO 依赖于 摄取管道和转换来处理数据,因此必须确保集群具有具有适当角色的节点。
确保集群包含一个或多个具有 ingest
和 transform
角色的节点,以支持 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 中激活相应的功能
- 通过在主菜单中找到堆栈管理或使用全局搜索字段,打开高级设置。
- 启用
observability:enableInspectEsQueries
设置。
之后,访问SLO 编辑页面,然后单击SLO 检查。
SLO 检查选项提供了 SLO 的详细报告,包括
- SLO 配置
- 汇总转换配置
- 摘要转换配置
- 汇总摄取管道
- 摘要摄取管道
- 临时文档
- 汇总转换查询复合
- 摘要转换查询复合
这些资源对于执行以下任务非常有用:尝试转换执行的查询和检查所有关联资源的 ID。该视图还包括指向 Kibana 中转换和摄取管道部分的直接链接。
重置 SLO
编辑重置 SLO 会强制删除所有 SLI 数据、摘要数据和转换,然后重新安装并处理数据。从本质上讲,它会重新创建 SLO,就像用户删除并重新创建了 SLO 一样。
重置 SLO 虽然可以帮助解决某些问题,但它可能并不总是能解决错误的根本原因。大多数与转换相关的错误通常源于结构不正确的源数据,例如无法解析的时间戳,这会阻止转换的进行。此外,格式不正确的 SLO 查询以及随之而来的转换查询也可能导致失败。
在重置 SLO 之前,请验证源数据和查询是否已正确格式化和验证。只有在所有其他故障排除步骤都已用尽时,才应将重置作为最后手段。
请按照以下步骤重置 SLO
- 在主菜单中查找SLOs,或使用全局搜索字段。
- 单击要重置的 SLO。
- 选择操作 → 重置。
或者,您可以使用 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
-
SLO 定义查找 API(
/api/observability/slos/_definitions
) - SLO 重置 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 使用的任何新的摘要转换。