阿里云服务网格ASM提供了生成服务等级目标SLO以及配套的告警规则的能力,能够通过自定义资源CRD配置的方式简化这一流程。本文将介绍对应的CRD具体字段内容含义。
系列文章:
在ASM中为应用服务启用SLO(1):服务等级目标SLO概览
https://developer.aliyun.com/article/1114965
在ASM中为应用服务启用SLO(2):服务网格中的SLO定义
https://developer.aliyun.com/article/1115135
在ASM中为应用服务启用SLO(3):使用ASM定义应用服务级SLO
https://developer.aliyun.com/article/1115152
在ASM中为应用服务启用SLO(4):导入生成的规则到Prometheus中执行SLO
https://developer.aliyun.com/article/1115171
在ASM中为应用服务启用SLO(5):使用Grafana查看SLO
https://developer.aliyun.com/article/1115187
示例文件
以下示例配置将为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" slosname 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"
在自定义配置文件时,需要重点关注以下字段:
- namespace: 自定义资源的命名空间,即目标服务的命名空间
- service: 目标服务的名称
- period:slo持续时间,只能为30d, 28d, 14d或者7d
- objective: 目标值
- plugin:id按照需要的slo类型填写对应插件类型,options填写对应插件选项(没有可不填)
其他字段请参考下方的字段详解进行填写
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字段定义
名称 |
类型 |
必填 |
描述 |
示例 |
period |
string |
是 |
只能为30d, 28d, 14d或者7d |
30d |
service |
string |
是 |
目标服务名 |
httpbin |
labels |
object |
否 |
全局标签设置,slos字段中配置的每个slo生成的recording rules的labes字段中都会包含此处的标签 |
labels: |
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: |
sli |
object, Sli类型 |
是 |
选择所需的SLI类型 |
|
alerting |
object, Alerting类型 |
是 |
配置告警规则 |
Sli字段定义
名称 |
类型 |
必填 |
描述 |
示例 |
plugin |
object, Plugin类型 |
是 |
sli插件配置 |
Plugin字段定义
名称 |
类型 |
必填 |
描述 |
示例 |
id |
string |
是 |
插件id,目前可以选择 |
latency |
options |
map |
否(如果options中包含必填字段则为必填) |
插件选项,不同插件需要配置不同的插件选项,当选择的插件options中包含必填项时必须填写 |
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。开启后响应码为5xx的请求将不会纳入延迟计算。 |
false |
Alerting字段定义
名称 |
类型 |
必填 |
描述 |
示例 |
name |
string |
是 |
告警规则名称 |
asm-alert |
labels |
map |
否 |
告警规则标签 |
labels: |
annotations |
map |
否 |
告警的注释信息 |
annotations: |
pageAlert |
object |
否 |
page级别的告警配置,严重程度相对较高 |
|
ticketAlert |
object |
否 |
ticket级别的告警配置,严重程度相对较轻 |
PageAlert字段定义
名称 |
类型 |
必填 |
描述 |
示例 |
disable |
bool |
否 |
是否开启此告警,默认开启 |
false |
labels |
map |
否 |
告警规则标签 |
labels: |
annotations |
map |
否 |
告警的注释信息 |
annotations: |
TicketAlert字段定义
名称 |
类型 |
必填 |
描述 |
示例 |
disable |
bool |
否 |
是否开启此告警,默认开启 |
false |
labels |
map |
否 |
告警规则标签 |
labels: |
annotations |
map |
否 |
告警的注释信息 |
annotations: |