创建服务级别目标 (SLO)

编辑

创建服务级别目标 (SLO)编辑

要创建和管理 SLO,您需要一个合适的许可证,并且必须配置SLO 访问权限

要创建 SLO,请转到 可观测性 → SLO

  • 如果您是第一次创建 SLO,您将看到一个介绍页面。单击 创建 SLO 按钮。
  • 如果您之前创建过 SLO,请单击页面右上角的 创建新的 SLO 按钮。

从这里,完成以下步骤

定义您的 SLI编辑

要使用的 SLI 类型取决于您的数据位置

自定义 KQL编辑

基于您的任何 Elasticsearch 索引或数据视图创建指标。您定义两个查询:一个从您的索引中生成良好事件,另一个从您的索引中生成所有事件。

示例: 您可以基于 service-logs 定义自定义 KQL 指标,其中 良好查询 定义为 nested.field.response.latency <= 100 and nested.field.env : “production”,而 总查询 定义为 nested.field.env : “production”

在定义自定义 KQL SLI 时,请设置以下字段

  • 索引 — 您要基于其创建 SLI 的数据视图或索引模式。例如,service-logs
  • 时间戳字段 — 索引使用的时间戳字段。
  • 查询过滤器 — KQL 过滤器,用于指定要过滤索引文档的相关条件。
  • 良好查询 — 生成被认为良好或成功的事件的查询。例如,nested.field.response.latency <= 100 and nested.field.env : “production”
  • 总查询 — 生成所有事件的查询,以考虑计算 SLI。例如,nested.field.env : “production”
  • 分组依据 — 用于根据特定字段的值对数据进行分组的字段。例如,您可以按 url.domain 字段进行分组,这将为所选字段的每个值创建单独的 SLO。

自定义指标编辑

创建指标以从您索引中的指标字段定义自定义方程式。

示例: 您可以将 良好事件 定义为字段 processor.processed 的总和,其过滤器为 "processor.outcome: \"success\"",并将 总事件 定义为 processor.processed 的总和,其过滤器为 "processor.outcome: *"

在定义自定义指标 SLI 时,请设置以下字段

  • 来源

    • 索引 — 您要基于其创建 SLI 的数据视图或索引模式。例如,my-service-*
    • 时间戳字段 — 索引使用的时间戳字段。
    • 查询过滤器 — KQL 过滤器,用于指定要过滤索引文档的相关条件。例如,'field.environment : "production" and service.name : "my-service"'
  • 良好事件

    • 指标 [A-Z] — 使用 sum 聚合来聚合良好事件的字段。例如,processor.processed
    • 过滤器 [A-Z] — 要应用于良好事件指标的过滤器。例如,"processor.outcome: \"success\""
    • 方程式 — 计算良好指标的方程式。例如,A
  • 总事件

    • 指标 [A-Z] — 使用 sum 聚合来聚合总事件的字段。例如,processor.processed
    • 过滤器 [A-Z] — 要应用于总事件指标的过滤器。例如,"processor.outcome: *"
    • 方程式 — 计算总指标的方程式。例如,A
  • 分组依据 — 用于根据特定字段的值对数据进行分组的字段。例如,您可以按 url.domain 字段进行分组,这将为所选字段的每个值创建单独的 SLO。

时间片指标编辑

基于使用统计聚合和阈值来确定时间片是好是坏的自定义方程式创建指标。支持的聚合包括 AverageMaxMinSumCardinalityLast valueStd. deviationDoc countPercentile。该方程式支持基本的数学和逻辑运算。

此指标要求您使用 Timeslices 预算方法。

示例: 您可以定义一个指标来确定 Kubernetes StatefulSet 是否健康。首先,您将查询过滤器设置为 orchestrator.cluster.name: "elastic-k8s" AND kubernetes.namespace: "my-ns" AND data_stream.dataset: "kubernetes.state_statefulset"。然后,您定义一个方程式,将就绪 (健康) 副本的数量与观察到的副本数量进行比较:A == B ? 1 : 0,其中 A 检索 kubernetes.statefulset.replicas.ready 的最后一个值,而 B 检索 kubernetes.statefulset.replicas.observed 的最后一个值。如果条件 A == B 为真 (表示副本数量相同),则该方程式返回 1;如果为假,则返回 0。如果该值小于 1,则您可以确定 Kubernetes StatefulSet 不健康。

在定义时间片指标 SLI 时,请设置以下字段

  • 来源

    • 索引 — 您要基于其创建 SLI 的数据视图或索引模式。例如,metrics-*:metrics-*
    • 时间戳字段 — 索引使用的时间戳字段。
    • 查询过滤器 — KQL 过滤器,用于指定要过滤索引文档的相关条件。例如,orchestrator.cluster.name: "elastic-k8s" AND kubernetes.namespace: "my-ns" AND data_stream.dataset: "kubernetes.state_statefulset"
  • 指标定义

    • 聚合 [A-Z] — 要使用的聚合类型。
    • 字段 [A-Z] — 要在聚合中使用的字段。例如,kubernetes.statefulset.replicas.ready
    • 过滤器 [A-Z] — 要应用于指标的过滤器。
    • 方程式 — 计算总指标的方程式。例如,A == B ? 1 : 0
    • 比较器 - 要执行的比较类型。
    • 阈值 - 与比较器一起使用的值,用于确定时间片是好是坏。

直方图指标编辑

直方图以压缩格式记录数据,可以记录延迟和延迟指标。您可以使用 range 聚合或 value_count 聚合来创建基于直方图指标的 SLI,用于良好事件和总事件。两种事件类型都支持使用 KQL 查询进行过滤。

在使用 range 聚合时,范围的 fromto 阈值都是必需的,事件是该范围内事件的总数。该范围包括 from 值,但不包括 to 值。

示例: 您可以使用 processor.latency 字段定义您的 良好事件,其过滤器为 "processor.outcome: \"success\"",并使用 processor.latency 字段定义您的 总事件,其过滤器为 "processor.outcome: *"

在定义直方图指标 SLI 时,请设置以下字段

  • 来源

    • 索引 — 您要基于其创建 SLI 的数据视图或索引模式。例如,my-service-*
    • 时间戳字段 — 索引使用的时间戳字段。
    • 查询过滤器 — KQL 过滤器,用于指定要过滤索引文档的相关条件。例如,field.environment : "production" and service.name : "my-service"
  • 良好事件

    • 聚合 — 用于良好事件的聚合类型,可以是 值计数范围
    • 字段 — 用于聚合被认为良好或成功的事件的字段。例如,processor.latency
    • — (range 聚合仅限于此) 良好事件范围的起始值。例如,0
    • — (range 聚合仅限于此) 良好事件范围的结束值。例如,100
    • KQL 过滤器 — 良好事件的过滤器。例如,"processor.outcome: \"success\""
  • 总事件

    • 聚合 — 用于总事件的聚合类型,可以是 值计数范围
    • 字段 — 用于聚合总事件的字段。例如,processor.latency
    • — (range 聚合仅限于此) 总事件范围的起始值。例如,0
    • — (range 聚合仅限于此) 总事件范围的结束值。例如,100
    • KQL 过滤器 — 总事件的过滤器。例如,"processor.outcome : *"
  • 分组依据 — 用于根据特定字段的值对数据进行分组的字段。例如,您可以按 url.domain 字段进行分组,这将为所选字段的每个值创建单独的 SLO。

APM 延迟和 APM 可用性edit

APM 延迟edit

根据您已检测服务的延迟数据和延迟阈值创建指标。

示例: 您可以为名为 banking-service 的 APM 服务定义指标,该服务用于 production 环境,交易名称为 POST /deposit,延迟阈值为 300 毫秒。

APM 可用性edit

根据您已检测服务的可用性创建指标。可用性是通过计算成功交易的百分比 (event.outcome : "success") 除以成功交易和失败交易的总数来确定的,不包括未知结果。

示例: 您可以为名为 search-service 的 APM 服务定义指标,该服务用于 production 环境,交易名称为 POST /search

在定义 APM 延迟或 APM 可用性 SLI 时,请设置以下字段

  • 服务名称 — APM 服务名称。
  • 服务环境all 或特定环境。
  • 交易类型all 或特定交易类型。
  • 交易名称all 或特定交易名称。
  • 阈值(仅限 APM 延迟) — 毫秒 (ms) 内的延迟阈值,用于将请求视为良好。
  • 查询过滤器 — APM 数据上的可选查询过滤器。

设置您的目标edit

定义 SLI 后,您需要设置目标。要设置目标,请完成以下操作

选择您的预算方法edit

您可以选择 事件时间片 预算方法

事件

使用良好事件的数量和总事件的数量来计算 SLO。

示例: 您有一个 30 天滚动 SLO,目标为 95%,在过去 30 天中,总共有 1,355,700 个事件。错误预算为 100-95 = 5%,即大约 66,785 个不良事件在违反 SLO 之前是可以容忍的。

如果您在同一时期有 1,300,000 个良好事件,则观察到的值为 Good Events / Total Events = 0.95891421 => 95.89%

时间片

将整个时间窗口分解成定义持续时间的较小时间片,并使用良好时间片的数量除以总时间片的数量来计算 SLO。

时间片目标 (%) - 确定时间片是好是坏的单个时间片目标。 时间片窗口(以分钟为单位) - 时间片窗口的大小。

示例: 定义为五分钟时间片的 30 天滚动 SLO 共有 30*24*12 = 8640 个时间片。如果 SLO 目标为 98%,则我们的错误预算为 100-98 = 2%,即 8640 * 0.02 = 172 个不良时间片在违反 SLO 之前是可以容忍的。

设置您的时间窗口edit

选择您要计算 SLO 的持续时间。时间窗口使用定义的滚动期间的数据。例如,最近 30 天。

设置您的目标/SLO (%)edit

SLO 目标百分比。

描述您的 SLOedit

设置目标后,为您的 SLO 命名,添加简短描述,并添加任何相关标签。

创建 SLO 燃尽率警报规则edit

使用 UI 创建 SLO 时,会自动创建默认的 SLO 燃尽率警报规则。燃尽率规则将使用默认配置,没有连接器。如果您想接收有关 SLO 违规的警报,则必须配置连接器。

有关配置规则的更多信息,请参阅 创建 SLO 燃尽率规则

将 SLO 概述面板添加到自定义仪表板edit

创建 SLO 后,您可以从可观察性中的“SLO”页面监控它,但您也可以将“SLO 概述”面板添加到自定义仪表板。有关仪表板的更多信息,请参阅 仪表板和可视化

Using the Add panel button to add an SLO Overview widget to a dashboard