全部产品
Search
文档中心

服务网格 ASM:将生成的规则导入Prometheus中执行SLO

更新时间:Aug 21, 2026

使用ASM定义应用服务级SLO,可以自动生成Prometheus规则。本文介绍如何将生成的规则导入Prometheus中执行SLO。

前提条件

步骤一:将规则导入Prometheus

本文采用Prometheus Operator模式部署Prometheus。在此模式下,Prometheus的相关配置由Prometheus定义的相关自定义资源决定。配置Recording Rules和告警规则时,您可以新建Prometheus CR,创建一个具有app: ack-prometheus-operator和release: ack-prometheus-operator标签的PrometheusRule对象。

说明
  • 标签的添加取决于在Prometheus CR中标签选择器ruleSelector的设置。若ruleSelector为空,可以不添加标签。请您根据实际情况进行调整。

  • 不同的Prometheus部署方式,需要采用不同的方法部署生成的Prometheus规则。关于导入Prometheus规则的更多信息,请参见Prometheus。

  1. 在容器服务ACK中获取ruleSelector。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

    2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 自定义资源。

    3. 在资源定义(CustomResourceDefinition)页签,单击PrometheusRule。

    4. 在资源对象浏览器页签,命名空间选择monitoring,在ack-prometheus-operator-prometheus右侧的操作列下,单击YAML 编辑。

    5. 获取ruleSelector字段信息。

      ruleSelector字段示例如下。为了被标签选择器选中,PrometheusRule中需要包含matchLabels中的标签。

      ruleSelector:
        matchLabels:
          app: ack-prometheus-operator
          release: ack-prometheus-operator
  2. 部署Prometheus。

    1. 使用以下内容,创建prometheusrule.yaml。

      YAML文件中,labels字段的内容由上一步获取,spec字段的内容为生成的Prometheus规则。

      apiVersion: monitoring.coreos.com/v1
      kind: PrometheusRule
      metadata:
        labels:
          app: ack-prometheus-operator
          release: ack-prometheus-operator
        name: asm-rules
        namespace: monitoring
      spec:
        # 此处替换为生成的规则文件。
    2. 在ACK集群中,执行以下命令,部署Prometheus。

      kubectl apply -f prometheusrule.yaml
  3. 查看Prometheus是否配置成功。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

    2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择配置管理 > 配置项。

    3. 在配置项页面上方,选择命名空间为monitoring,在Prometheus配置右侧的操作列下,单击YAML 编辑。

      可以看到PrometheusRule的对应Controller会自动将配置写入ConfigMap中供Prometheus读取。ConfigMap中已自动写入PrometheusRule配置,其中 monitoring-asm-rules-fcd9bea9-22b3-462b-8786-424f74f098ec.yaml 为ASM规则文件的键名:

      up{job= alertmanager main,namespace= monitoring }
                  )
                )
                >= 0.5
              for: 5m
              labels:
                severity: critical
        monitoring-asm-rules-fcd9bea9-22b3-462b-8786-424f74f098ec.yaml: |
          groups:
          - name: sloth-slo-sli-recordings-httpbin-asm-slo
            rules:

步骤二:执行SLO

查看Prometheus监控数据和告警信息

  1. 使用kubectl连接至ACK集群,在命令行执行以下命令,将ack-prometheus-operator-prometheus服务转发到本地端口。

    kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-prometheus 9090
  2. 单击https://localhost:9090,访问Prometheus控制台。

  3. 在Prometheus页面的文本框中,输入asm_slo_info,然后单击Execute,查看配置的SLO。

    可以看到SLO配置,表示Prometheus Recording Rules配置成功。

    查询返回结果为 asm_slo_info{asm_slo="asm-slo",slo_id="httpbin-asm-slo",slo_mode="cli-gen-prom",slo_objective="99.9",slo_service="httpbin",slo_spec="prometheus/v1",slo_version="dev"}。

  4. 在页面上方,单击Alerts,查看告警规则。

    存在如下两条规则,表示Prometheus Alerting Rules配置成功。两条告警规则均名为 asm-alert,状态显示为 0 active(无活跃告警)。

场景一:模拟正常请求

  1. 在命令行执行以下脚本,模拟99.5%成功率的情况下产生的指标。

    脚本中的{网关IP}请替换为实际的网关IP。关于如何获取网关IP,请参见查看网关信息。

    #!/bin/bash
    for i in `seq 200`
    do
    if (( $i == 100 ))
    then
        curl -I http://{网关IP}/status/500;
    else
        curl -I http://{网关IP}/;
    fi
    echo "OK"
    sleep 0.01;
    done;
  2. 返回Prometheus控制台的Prometheus页面,在文本框中输入slo:period_error_budget_remaining:ratio,然后单击Execute,查看剩余的错误预算的变化。

    示例效果如下:

    执行查询后,折线图显示剩余错误预算比率从约 1.0 急剧下降至约 0.93,表明错误预算正在被快速消耗。

    SLO的关键指标说明如下。更多信息,请参见服务等级目标SLO概述。

    指标

    说明

    slo:period_error_budget_remaining:ratio

    SLO持续时间(30d)的剩余错误预算。

    slo:sli_error:ratio_rate30d

    SLO持续时间(30d)内的平均错误率。

    slo:period_burn_rate:ratio

    SLO持续时间(30d)内的燃烧率。

    slo:current_burn_rate:ratio

    当前燃烧率。

场景二:模拟异常请求

手动触发故障,测试告警。

  1. 在命令行执行以下脚本,模拟请求出错时,50%成功率(燃烧率为50)的情况下产生的指标。

    脚本中的{网关IP}请替换为实际的网关IP。

    #!/bin/bash
    for i in `seq 200`
    do
    curl -I http://{网关IP}/
    curl -I http://{网关IP}/status/500;
    echo "OK"
    sleep 0.01;
    done;
  2. 返回Prometheus控制台的Alerts页面,查看告警。

    告警触发后的示例效果如下:

    在 Alerts 页面,规则文件路径 monitoring-asm-rules.yaml 下的 sloth-slo-alerts-httpbin-asm-slo2 规则组中,两条 asm-alert 告警规则均显示为活跃状态(1 active):

    • 第一条规则:sloth_severity=page,sloth_window=30m,标签包含 alertlabel="bbb"、pagelabels="ddd"、sloth_id="httpbin-asm-slo2"。

    • 第二条规则:sloth_severity=ticket,sloth_window=2h,标签包含 ticketlabel="eee"。

在AlertManager控制台查看告警

在Prometheus框架中,由AlertManager组件负责收集Prometheus Server产生的告警信息,并根据您的配置发送给各个接收者。

  1. 执行以下命令,将ack-prometheus-operator-alertmanager服务转发到本地端口。

    kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-alertmanager 9093
  2. 单击https://localhost:9093,访问AlertManager控制台。

  3. 在Alertmanager页面,单击展开图标,查看告警。

    可以看到自定义告警信息采集成功。

    Alertmanager 告警列表中展示了两条 asm-alert 类型的自定义告警:一条 slo_severity=page(slo_window=30m),另一条 slo_severity=ticket(slo_window=2h),表明 ASM SLO 告警规则已成功触发。