加载中

创建 SLO

重要提示

对于 Observability 无服务器项目,创建 SLO 需要 Editor(编辑者)或更高权限的角色。要了解更多信息,请参考 分配用户角色和权限

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

要创建 SLO,请在主菜单中找到 SLOs,或使用全局搜索字段

  • 如果您正在创建第一个 SLO,您将看到一个引导页面。点击 Create SLO 按钮。
  • 如果您以前创建过 SLO,请点击页面右上角的 Create new SLO 按钮。

在此之后,完成以下步骤

  1. 定义您的服务水平指标 (SLI).
  2. 设置您的目标.
  3. 描述您的 SLO.
可用的 Agent 技能

有一个技能可用于帮助 AI 智能体处理此主题。

详细了解适用于 Elastic 的 Agent 技能

获取此技能
注意

对于 Elastic Stack,集群必须包含一个或多个同时具有 ingesttransform 角色 的节点。这些角色可以存在于同一个节点上,也可以分布在不同的节点上。在 Elastic Cloud Hosted 部署中,这由同时充当 ingesttransform 节点的热节点(hot nodes)来处理。

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

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

示例:您可以基于 service-logs index 定义自定义 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) 的服务创建两种类型的 SLI:APM 延迟和 APM 可用性。

使用 APM 延迟根据从您的插桩服务接收到的延迟数据和延迟阈值来创建指标。

示例:您可以在名为 banking-service 的 APM 服务(针对 production 环境,事务名称为 POST /deposit)上定义指标,延迟阈值设为 300ms。

使用 APM 可用性根据您的插桩服务的可用性创建指标。可用性是通过计算成功事务(event.outcome : "success")占成功和失败事务总数的百分比来确定的——未知结果将被排除。

示例:您可以在名为 search-service 的 APM 服务(针对 production 环境,事务名称为 POST /search)上定义指标。

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

  • 服务名称:APM 服务名称。
  • 服务环境:可以是 all 或特定环境。
  • 事务类型:可以是 all 或特定事务类型。
  • 事务名称:可以是 all 或特定事务名称。
  • 阈值(仅限 APM 延迟):将请求视为良好请求的延迟阈值(以毫秒 ms 为单位)。
  • 查询过滤器:对 APM 数据的可选查询过滤器。

根据您的 synthetic monitors 的可用性创建指标。可用性是通过计算成功的检查次数(monitor.status : "up")占总检查次数的百分比来确定的。

示例:您可以根据 HTTP 监控器在至少 99% 的时间内处于 "up" 状态来定义指标。

定义 Synthetics 可用性 SLI 时,请设置以下字段

  • 监控器名称 — 一个或多个 synthetic monitors 的名称。
  • 项目 — 包含 synthetic monitors 的一个或多个 项目 的 ID。
  • 标签 — 分配给 synthetic monitors 的一个或多个 标签
  • 查询过滤器 — 用于根据某些相关条件过滤 Synthetics 检查的可选 KQL 查询。
注意

Synthetics 可用性 SLI 会根据监控器和位置自动分组。

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

  1. 选择您的预算方法
  2. 设置您的时间窗口
  3. 设置您的目标/SLO 百分比

选择要用于计算 SLO 的持续时间。您可以选择滚动日历对齐时间窗口

滚动 使用取决于创建 SLO 时间的指定持续时间的数据,例如最近 30 天。
日历对齐 使用与日历对齐的指定持续时间的数据,例如每周或每月。

您可以选择次数时间片预算方法

次数 使用良好事件的数量和总事件的数量来计算 SLI。
时间片 将整体时间窗口拆分为具有定义持续时间的较小切片,并使用良好切片数除以总切片数来计算 SLI。

以百分比表示的 SLO 目标值。

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

当您使用 UI 创建 SLO 时,系统会自动创建一个默认的 SLO 消耗速率警报规则。消耗速率规则将使用默认配置,且不包含任何连接器。如果您想接收有关违反 SLO 的警报,必须配置一个连接器。

有关配置规则的更多信息,请参阅 创建 SLO 消耗速率规则

创建 SLO 后,您可以从 Observability 中的 SLOs 页面对其进行监控,但您也可以将 SLO 概览面板添加到自定义仪表板中。阅读有关仪表板的更多信息,请参见 仪表板和可视化

Using the Add panel button to add an SLO Overview widget to a dashboard
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.