创建 SLO
要创建 SLO,请在主菜单中找到 SLO,或使用全局搜索字段
- 如果您是第一次创建 SLO,您会看到一个介绍页面。单击 创建 SLO 按钮。
- 如果您之前创建过 SLO,请单击页面右上角的 创建新 SLO 按钮。
从这里开始,完成以下步骤
对于 Elastic Stack,集群必须包含一个或多个同时具有 ingest
和 transform
角色的节点。这些角色可以存在于同一个节点上,也可以分布在不同的节点上。在 Elastic Cloud Hosted 部署中,这由热节点处理,这些节点同时充当 ingest
和 transform
节点。
要使用的 SLI 类型取决于您的数据位置
- 自定义 KQL:根据来自您的服务的原始日志创建 SLI。
- 时间片指标:基于使用多个聚合的自定义公式创建 SLI。
- 自定义指标:创建 SLI 以从您的索引中的指标字段定义自定义公式。
- 直方图指标:基于直方图指标创建 SLI。
- APM 延迟和 APM 可用性:基于使用应用程序性能监控 (APM) 的服务创建 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"'
。
- 索引:要基于其创建 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
。 - 比较器:要执行的比较类型。
- 阈值:与比较器一起使用的值,以确定切片是好还是坏。
直方图以压缩格式记录数据,并且可以记录延迟和延迟指标。您可以基于直方图指标创建 SLI,使用 range
聚合或 value_count
聚合来表示良好事件和总事件。两种事件类型都支持使用 KQL 查询进行过滤。
当使用 range
聚合时,from
和 to
阈值都是范围所必需的,并且事件是该范围内事件的总数。该范围包括 from
值,但不包括 to
值。
示例:您可以使用具有 "processor.outcome: \"success\""
过滤器的 processor.latency
字段定义您的 良好事件,并使用具有 "processor.outcome: *"
过滤器的 processor.latency
字段定义您的 总事件。
定义直方图指标 SLI 时,请设置以下字段:
源
- 索引:要基于其创建 SLI 的数据视图或索引模式。例如,
my-service-*
。 - 时间戳字段:索引使用的时间戳字段。
- 查询过滤器: 用于指定相关条件的 KQL 过滤器,用于过滤索引文档。 例如:
field.environment : "production" and service.name : "my-service"
。
- 索引:要基于其创建 SLI 的数据视图或索引模式。例如,
良好事件
- 聚合: 用于良好事件的聚合类型,可以是 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 后,您需要设置目标。 要设置您的目标,请完成以下操作:
选择要计算 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 概览)面板添加到自定义仪表板。 在 仪表板和可视化 中阅读有关仪表板的更多信息。
