在ASM中为应用服务启用SLO(4):导入生成的规则到Prometheus中执行SLO

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 服务等级目标SLO可以用于衡量服务的水平。用户可以基于Prometheus指标手动定义SLO,但过程相对繁琐。ASM服务网格提供了生成SLO以及配套的告警规则的能力,能够通过自定义资源YAML配置的方式简化这一流程。本文将介绍如何将生成的规则导入到Prometheus中以及如何执行SLO。

服务等级目标SLO可以用于衡量服务的水平。用户可以基于Prometheus指标手动定义SLO,但过程相对繁琐。ASM服务网格提供了生成SLO以及配套的告警规则的能力,能够通过自定义资源YAML配置的方式简化这一流程。本文将介绍如何将生成的规则导入到Prometheus中以及如何执行SLO。


系列文章:

在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


前提条件


部署示例应用

在集群中部署httpbin应用并配置相应的虚拟服务与网关规则。


1. 在ACK集群中部署httpbin应用

将下面的yaml文件保存为httpbin.yaml,通过kubectl连接到ACK集群,执行命令kubectl apply -f httpbin.yaml


################################################################################################### httpbin service##################################################################################################apiVersion: v1
kind: ServiceAccount
metadata:  name: httpbin
---apiVersion: v1
kind: Service
metadata:  name: httpbin
  labels:    app: httpbin
    service: httpbin
spec:  ports:  - name: http
    port: 8000    targetPort: 80  selector:    app: httpbin
---apiVersion: apps/v1
kind: Deployment
metadata:  name: httpbin
spec:  replicas: 1  selector:    matchLabels:      app: httpbin
      version: v1
  template:    metadata:      labels:        app: httpbin
        version: v1
    spec:      serviceAccountName: httpbin
      containers:      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:        - containerPort: 80

 

2. 在ASM服务网格中配置虚拟服务和网关规则

将下面的yaml保存为文件httpbin-gateway.yaml,切换kubectl连接至服务网格,执行命令kubectl apply -f httpbin-gateway.yaml


apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:  name: httpbin-gateway
spec:  selector:    istio: ingressgateway
  servers:  - port:      number: 80      name: http
      protocol: HTTP
    hosts:    - "*"---apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:  name: httpbin
spec:  hosts:  - "*"  gateways:  - httpbin-gateway
  http:  - route:    - destination:        host: httpbin
        port:          number: 8000


导入规则到Prometheus

本示例中使用的Prometheus通过Prometheus Operator模式进行部署。在Operator模式下,Prometheus的相关配置是通过Prometheus定义的相关自定义资源来决定的。根据使用的Prometheus部署方式的不同,需要采用不同的方法来部署生成的Prometheus规则。如有需要,可以参考Prometheus官方网站了解如何导入规则。


要配置recordingrules和告警规则,可以通过新建PrometheusRulecr,创建一个具有 app: ack-prometheus-operator和release: ack-prometheus-operator 标签的PrometheusRule对象。


注意:具体需要添加的标签取决于在cr Prometheus中标签选择器ruleSelector的设置,为空可以不加,实际使用中需要根据实际情况调整 。在ACK中获取ruleSelector参数的方法如下:

  1. 登录容器服务管理控制台,在集群列表页面中,单击目标集群名称,进入集群信息页面。
  2. 在左侧导航栏,选择工作负载 > 自定义资源
  3. 资源定义标签页找到自定义资源Prometheus并单击进入资源对象浏览器标签页
  4. 切换命名空间为monitoring,找到ack-prometheus-operator-prometheus,单击右侧操作列下的YAML编辑
  5. 查找ruleSelector字段,结构如下。为了被选中,PrometheusRule需要包含matchLabels中的标签。
ruleSelector:  matchLabels:    app: ack-prometheus-operator
    release: ack-prometheus-operator


本示例中,PrometheusRule的结构如下:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:  labels:    app: ack-prometheus-operator
    release: ack-prometheus-operator
  name: asm-rules
  namespace: monitoring
spec:# 此处替换为生成的规则文件


将上述生成的规则文件替换到spec字段中后,将yaml格式的cr保存为prometheusrule.yaml


使用kubectl连接到ACK集群,执行命令kubectl apply -f prometheusrule.yaml将cr添加到集群中。


打开集群控制台,可以看到PrometheusRule的对应controller会自动将配置写入configmap中供Prometheus读取。


执行SLO

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

使用kubectl连接到ACK集群,在本地终端运行kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-prometheus 9090,点击http://localhost:9090访问Prometheus控制台,

在首页查询框内输入asm_slo_info后点击执行,查看配置的SLO,结果如下图所示,说明成功配置了Prometheus Recording Rules:


点击切换到Alerts标签页查看告警规则,能看到下图所示的两条规则,说明成功配置了Prometheus Alerting Rules:


模拟正常请求

请将大括号中内容替换成自己的网关ip后,在命令行执行下方脚本,模拟99.5%成功率的情况下产生的指标。


#!/bin/bashfor i in`seq 200`doif (( $i==100 ))
thencurl-I http://{网关ip}/status/500;
elsecurl-I http://{网关ip}/; 
fiecho"OK"sleep0.01; 
done;


提示:如何获取网关ip请参考文档:添加入口网关服务



返回Prometheus控制台首页,输入slo:period_error_budget_remaining:ratio后点击执行,查看剩余的错误预算的变化:

关于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:当前燃烧率


模拟异常请求

手动触发故障以测试告警。用户可将大括号中内容替换成自己的网关ip后,在命令行执行下方脚本,模拟请求出错时,50%成功率(燃烧率为50)的情况下产生的指标。

#!/bin/bashfor i in`seq 200`docurl-I http://{网关ip}/
curl-I http://{网关ip}/status/500; 
echo"OK"sleep0.01; 
done;


告警触发后,在Alerts页面可以看到:


在AlertManager中查看告警

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

在终端运行kubectl --namespace monitoring port-forward svc/ack-prometheus-operator-alertmanager 9093,点击http://localhost:9093访问Alert Manager控制台,可以看到Alert Manager也成功采集到了自定义告警信息。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
6月前
|
Prometheus 监控 Cloud Native
使用 Prometheus 配置 SLO 监控和告警
使用 Prometheus 配置 SLO 监控和告警
|
6月前
|
Prometheus Kubernetes Cloud Native
「译文」使用 Prometheus 和 Grafana 实现 SLO
「译文」使用 Prometheus 和 Grafana 实现 SLO
|
Perl
阿里云服务网格ASM的流量标签及路由功能之(2): 基于流量标签的路由规则
通过流量标签CRD(TrafficLabel) 定义了用户自定义的流量标签, 例如asm-labels-test,其取值范围为test1、test2、test3等。为支持基于标签的路由能力, 还需要创建相应的目标规则DestinationRule和虚拟服务VirtualService,才能将流量根据标签路由到对应的工作负载。
278 0
|
运维 Kubernetes 安全
解锁ASM网关:一致的规则配置, 多样化的入出口网关场景
作为业内首个全托管Istio兼容的服务网格产品ASM,一开始从架构上就保持了业界领先性、以及与社区发展的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立, 保持高可用部署与稳定性。阿里云ASM产品是基于社区开源的Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵
266 0
解锁ASM网关:一致的规则配置, 多样化的入出口网关场景
|
JSON Prometheus 监控
在ASM中为应用服务启用SLO(5):使用Grafana查看SLO
Grafana是开源的数据可视化平台,它可以生成各种可视化仪表,大大帮助我们简化监控的复杂度,下面介绍如何使用Grafana查看SLO相关指标。
242 0
在ASM中为应用服务启用SLO(5):使用Grafana查看SLO
|
Prometheus Cloud Native
在ASM中为应用服务启用SLO(3):使用ASM定义应用服务级SLO
用户可以基于Prometheus指标手动定义SLO,但过程相对繁琐。阿里云服务网格ASM提供了生成SLO以及配套的告警规则的能力,能够通过自定义资源YAML配置的方式简化这一流程。本文将介绍如何使用ASM定义应用服务级SLO。
249 0
在ASM中为应用服务启用SLO(3):使用ASM定义应用服务级SLO
|
Prometheus Cloud Native
在ASM中为应用服务启用SLO(2):服务网格中的SLO定义
阿里云服务网格ASM提供了生成服务等级目标SLO以及配套的告警规则的能力,能够通过自定义资源CRD配置的方式简化这一流程。本文将介绍对应的CRD具体字段内容含义。
389 0
在ASM中为应用服务启用SLO(2):服务网格中的SLO定义
|
21天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
113 3
|
3月前
|
Prometheus 监控 Cloud Native
【监控】prometheus传统环境监控告警常用配置
【监控】prometheus传统环境监控告警常用配置
【监控】prometheus传统环境监控告警常用配置
下一篇
无影云桌面