创建 SLO
要创建 SLO,请在主菜单中找到 SLOs,或使用全局搜索字段
- 如果您正在创建第一个 SLO,您将看到一个引导页面。点击 Create SLO 按钮。
- 如果您以前创建过 SLO,请点击页面右上角的 Create new SLO 按钮。
在此之后,完成以下步骤
有一个技能可用于帮助 AI 智能体处理此主题。
对于 Elastic Stack,集群必须包含一个或多个同时具有 ingest 和 transform 角色 的节点。这些角色可以存在于同一个节点上,也可以分布在不同的节点上。在 Elastic Cloud Hosted 部署中,这由同时充当 ingest 和 transform 节点的热节点(hot nodes)来处理。
要使用的 SLI 类型取决于您的数据位置
- 自定义 KQL:基于来自您的服务的原始日志创建 SLI。
- 时间片指标:基于使用多个聚合的自定义方程创建 SLI。
- 自定义指标:创建 SLI 以从索引中的指标字段定义自定义方程。
- 直方图指标:基于直方图指标创建 SLI。
- APM 延迟和 APM 可用性:基于使用应用性能监控 (APM) 的服务创建 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"'。
- 索引:您要基于其构建 SLI 的数据视图或索引模式。例如,
良好事件
- 指标 [A-Z]:针对良好事件使用
sum聚合进行聚合的字段。例如,processor.processed。 - 过滤器 [A-Z]:应用于良好事件指标的过滤器。例如,
"processor.outcome: \"success\""。 - 方程:计算良好指标的方程。例如,
A。
- 指标 [A-Z]:针对良好事件使用
总事件
- 指标 [A-Z]:针对总事件使用
sum聚合进行聚合的字段。例如,processor.processed。 - 过滤器 [A-Z]:应用于总事件指标的过滤器。例如,
"processor.outcome: *"。 - 方程:计算总指标的方程。例如,
A。
- 指标 [A-Z]:针对总事件使用
分组依据:用于根据特定字段的值对数据进行分组的字段。例如,您可以按
url.domain字段进行分组,这将为所选字段的每个值创建单独的 SLO。
基于使用统计聚合和阈值的自定义方程创建一个指标,以确定切片是良好还是不良。支持的聚合包括 Average、Max、Min、Sum、Cardinality、Last value、Std. deviation、Doc count 和 Percentile。该方程支持基本的数学和逻辑运算。
此指标要求您使用 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"。
- 索引:您要基于其构建 SLI 的数据视图或索引模式。例如,
指标定义
- 聚合 [A-Z]:要使用的聚合类型。
- 字段 [A-Z]:要在聚合中使用的字段。例如,
kubernetes.statefulset.replicas.ready。 - 过滤器 [A-Z]:要应用于指标的过滤器。
- 方程:计算总指标的方程。例如,
A == B ? 1 : 0。 - 比较器:要执行的比较类型。
- 阈值:与比较器一起使用的值,用于确定切片是良好还是不良。
直方图以压缩格式记录数据,并可以记录延迟和延时指标。您可以针对良好事件和总事件,使用 range 聚合或 value_count 聚合基于直方图指标创建 SLI。两种事件类型都支持使用 KQL 查询进行过滤。
当使用 range 聚合时,该范围需要同时设置 from 和 to 阈值,并且事件是指该范围内的总事件数。该范围包含 from 值,但不包含 to 值。
示例:您可以使用字段 processor.latency(带有过滤器 "processor.outcome: \"success\"")定义良好事件,并使用字段 processor.latency(带有过滤器 "processor.outcome: *")定义总事件。
定义直方图指标 SLI 时,请设置以下字段
源
- 索引:您要基于其构建 SLI 的数据视图或索引模式。例如,
my-service-*。 - 时间戳字段:索引使用的时间戳字段。
- 查询过滤器:一个 KQL 过滤器,用于指定过滤索引文档的相关条件。例如,
field.environment : "production" and service.name : "my-service"。
- 索引:您要基于其构建 SLI 的数据视图或索引模式。例如,
良好事件
- 聚合:用于良好事件的聚合类型,可以是值计数或范围。
- 字段:用于聚合被视为良好或成功的事件的字段。例如,
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 后,您需要设置目标。要设置目标,请完成以下操作
选择要用于计算 SLO 的持续时间。您可以选择滚动或日历对齐时间窗口
| 滚动 | 使用取决于创建 SLO 时间的指定持续时间的数据,例如最近 30 天。 |
| 日历对齐 | 使用与日历对齐的指定持续时间的数据,例如每周或每月。 |
您可以选择次数或时间片预算方法
| 次数 | 使用良好事件的数量和总事件的数量来计算 SLI。 |
| 时间片 | 将整体时间窗口拆分为具有定义持续时间的较小切片,并使用良好切片数除以总切片数来计算 SLI。 |
以百分比表示的 SLO 目标值。
设置目标后,为您的 SLO 命名、提供简短描述并添加任何相关的标签。
当您使用 UI 创建 SLO 时,系统会自动创建一个默认的 SLO 消耗速率警报规则。消耗速率规则将使用默认配置,且不包含任何连接器。如果您想接收有关违反 SLO 的警报,必须配置一个连接器。
有关配置规则的更多信息,请参阅 创建 SLO 消耗速率规则。
创建 SLO 后,您可以从 Observability 中的 SLOs 页面对其进行监控,但您也可以将 SLO 概览面板添加到自定义仪表板中。阅读有关仪表板的更多信息,请参见 仪表板和可视化。