阿里云服务网格ASM提供了生成SLO以及配套的告警规则能力。通过自定义资源CRD配置的方式,简化您的配置流程。本文介绍SLO CRD字段的相关说明。
示例文件
以下示例文件将为default命名空间下的httpbin服务生成服务可用性SLO。以下示例代码中,目标值为99.9%,持续时间为30天,配置Page和Ticket两个等级的告警,添加了自定义标签和注解。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ServiceLevelObjective
metadata:
name: asm-slo-default-httpbin
namespace: default # 自定义资源的命名空间。
spec:
service: httpbin # 目标服务名。
period: 30d # SLO持续时间。
labels:
owner: "finance-team"
slos:
- name: asm-slo2 # SLO名称。
objective: "99.9" # 目标值。
labels:
description: "service availability description"
sli:
plugin:
id: availability # 使用的插件类型。
options: # 插件选项。
filter: request_protocol="http"
alerting:
name: asm-alert # 告警规则名称。
labels:
category: "availability"
annotations:
summary: "High error rate on requests"
pageAlert:
labels:
severity: "10"
ticketAlert:
labels:
channel: "channel - call"
示例文件的重点字段说明如下。关于字段的详细说明,请参见下文CRD定义说明。
字段 | 说明 |
namespace | 自定义资源的命名空间,即目标服务的命名空间。 |
service | 目标服务的名称。 |
period | SLO持续时间,单位为d(天)。可取值为30d、28d、14d或7d。 |
objective | 目标值。 |
plugin |
关于参数的具体说明,请参见下文Plugin字段定义。 |
CRD定义说明
Metadata字段定义
名称 | 类型 | 是否必选 | 说明 | 示例值 |
name | String | 是 | 名称,格式为asm-slo-{目标服务所在命名空间}-{目标服务名}。 | asm-slo-default-httpbin |
namespace | String | 是 | 自定义资源的命名空间。需要与目标服务的命名空间相同。 | default |
labels | Object | 否 | 无需您手动填写。后端会自动填充两个字段值供标签选择器使用。
| labels: asm-target-namespace: default asm-target-service: httpbin |
Spec字段定义
名称 | 类型 | 是否必选 | 说明 | 示例值 |
service | String | 是 | 目标服务名。 | httpbin |
period | String | 是 | SLO持续时间,可配置为30d、28d、14d或7d。30d表示30天。 | 30d |
labels | Object | 否 | 全局标签设置,slos字段中配置的每个SLO生成的Recording Rules的labes字段中,都会包含此处的标签。 | labels: global: "some-label" |
slos | Array[Slo类型] | 是 | 需要设置的SLO数组,至少配置一个SLO。 | - |
Slo字段定义
名称 | 类型 | 是否必选 | 描述 | 示例值 |
name | String | 是 | SLO的名称。 | asm-slo |
objective | String | 是 | SLO的目标值。格式为字符串,且该字符串能够解析为一个(0,100]之间的浮点数。 | "99.9" |
labels | Object | 否 | SLO标签。此处配置的标签会附加到该SLO生成的每一条Recording Rules的labels字段中。 | labels: recordlabel: aaa |
sli | Object[Sli类型] | 是 | 选择所需的SLI类型。 | - |
alerting | Object[Alerting类型] | 是 | 配置告警规则。 | - |
Sli字段定义
名称 | 类型 | 是否必选 | 描述 | 示例值 |
plugin | Object[Plugin类型] | 是 | SLI插件配置。 | - |
Plugin字段定义
名称 | 类型 | 是否必选 | 说明 | 示例值 |
id | String | 是 | 插件ID。取值如下:
| latency |
options | Map | 否 说明 若options中包含必选字段则为必选。 | 插件选项。不同插件需要配置不同的插件选项。 | options: bucket: "300" |
id字段的取值不同,对应的options字段也有所区别。
当id为availability时,options字段说明如下:
名称
类型
是否必选
说明
示例值
filter
String
否
Prometheus标签过滤器。用法与promQL相同,设置后只计算包含指定标签的指标。
request_protocol="http"
当id为latency时,options字段说明如下:
名称
类型
是否必选
说明
示例值
bucket
String
是
期望满足的目标延迟。格式为字符串,且该字符串能够直接转换成一个整数。
"300"
filter
String
否
Prometheus标签过滤器。用法与promQL相同,设置后只计算包含指定标签的指标。
request_protocol="http"
exclude_errors
Bool
否
是否过滤错误请求。默认为false。
true:响应码为5XX的请求将不会纳入延迟计算。
false:不过滤错误请求。
false
Alerting字段定义
名称 | 类型 | 是否必选 | 说明 | 示例值 |
name | String | 是 | 告警规则名称。 | asm-alert |
labels | Map | 否 | 告警规则标签。 | labels: alertlabel: bbb |
annotations | Map | 否 | 告警的注释信息。 | annotations: alertanno: ccc |
pageAlert | Object | 否 | Page级别的告警配置,严重程度相对较高。 | - |
ticketAlert | Object | 否 | Ticket级别的告警配置,严重程度相对较轻。 | - |
PageAlert字段定义
名称 | 类型 | 是否必选 | 说明 | 示例值 |
disable | Bool | 否 | 是否开启此告警。默认为true,表示开启。 | false |
labels | Map | 否 | 告警规则标签。 | labels: pagelabel: ddd |
annotations | Map | 否 | 告警的注释信息。 | annotations: pageanno: eee |
TicketAlert字段定义
名称 | 类型 | 是否必选 | 说明 | 示例值 |
disable | Bool | 否 | 是否开启此告警。默认为true,表示开启。 | false |
labels | Map | 否 | 告警规则标签。 | labels: pagelabel: ddd |
annotations | Map | 否 | 告警的注释信息。 | annotations: pageanno: eee |