正在加载

创建 SLO

重要提示

对于可观测性的无服务器项目,创建 SLO 需要具有编辑器角色或更高级别的角色。要了解更多信息,请参阅分配用户角色和权限

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

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

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

从这里开始,完成以下步骤

  1. 定义您的服务级别指标 (SLI).
  2. 设置您的目标.
  3. 描述您的 SLO.
注意

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

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

基于您的任何 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.outcome: \"success\"" 过滤器的字段 processor.processed 的总和,并将 总事件 定义为具有 "processor.outcome: *" 过滤器的 processor.processed 的总和。

定义自定义指标 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
    • 比较器:要执行的比较类型。
    • 阈值:与比较器一起使用的值,以确定切片是好还是坏。

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

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

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

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

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

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

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

您可以基于使用应用程序性能监控 (APM) 的服务创建两种类型的 SLI:APM 延迟和 APM 可用性。

使用 APM latency(APM 延迟)根据从您检测的服务收到的延迟数据和延迟阈值创建指标。

示例: 您可以为 production 环境中名为 banking-service 的 APM 服务定义一个指标,以及事务名称 POST /deposit,其延迟阈值为 300 毫秒。

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

示例: 您可以为 production 环境中名为 search-service 的 APM 服务定义一个指标,以及事务名称 POST /search

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

  • Service name:(服务名称)APM 服务名称。
  • Service environment:(服务环境)all(全部)或特定的环境。
  • Transaction type:(事务类型)all(全部)或特定的事务类型。
  • Transaction name:(事务名称)all(全部)或特定的事务名称。
  • Threshold (APM latency only):(阈值(仅适用于 APM 延迟))将请求视为良好的延迟阈值,以毫秒 (ms) 为单位。
  • Query filter:(查询过滤器)APM 数据上的可选查询过滤器。

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

示例:您可以定义一个基于 HTTP monitor 在至少 99% 的时间内“启动”的指标。

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

  • Monitor name — 一个或多个 synthetic monitor 的名称。
  • Project — 包含 synthetic monitor 的一个或多个 project 的 ID。
  • Tags — 分配给 synthetic monitor 的一个或多个 tag
  • Query filter — 用于过滤某些相关标准的 Synthetics 检查的可选 KQL 查询。
注意

Synthetics 可用性 SLI 自动按 monitor 和位置分组。

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

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

选择要计算 SLO 的持续时间。您可以选择 rolling(滚动)或 calendar aligned(日历对齐)时间窗口

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

您可以选择 occurrences(出现次数)或 timeslices(时间片)预算方法

Occurrences(出现次数) 使用良好事件的数量和总事件的数量来计算 SLI。
Timeslices(时间片) 将整个时间窗口分解为定义持续时间的较小切片,并使用好切片的数量除以总切片的数量来计算 SLI。

SLO 目标百分比。

设置目标后,为您的 SLO 指定一个名称、简短的描述,并添加任何相关的标签。

当您使用 UI 创建 SLO 时,会自动创建一个默认的 SLO 燃尽率告警规则。燃尽率规则将使用默认配置且没有连接器。 如果您希望接收 SLO 违反的告警,则必须配置连接器。

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

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

Using the Add panel button to add an SLO Overview widget to a dashboard
© . All rights reserved.