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

本文涉及的产品
容器镜像服务 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也成功采集到了自定义告警信息。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
Prometheus 监控 Cloud Native
使用 Prometheus 配置 SLO 监控和告警
使用 Prometheus 配置 SLO 监控和告警
|
2月前
|
Prometheus Kubernetes Cloud Native
「译文」使用 Prometheus 和 Grafana 实现 SLO
「译文」使用 Prometheus 和 Grafana 实现 SLO
|
运维 Kubernetes 安全
解锁ASM网关:一致的规则配置, 多样化的入出口网关场景
作为业内首个全托管Istio兼容的服务网格产品ASM,一开始从架构上就保持了业界领先性、以及与社区发展的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立, 保持高可用部署与稳定性。阿里云ASM产品是基于社区开源的Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵
212 0
解锁ASM网关:一致的规则配置, 多样化的入出口网关场景
|
JSON Prometheus 监控
在ASM中为应用服务启用SLO(5):使用Grafana查看SLO
Grafana是开源的数据可视化平台,它可以生成各种可视化仪表,大大帮助我们简化监控的复杂度,下面介绍如何使用Grafana查看SLO相关指标。
201 0
在ASM中为应用服务启用SLO(5):使用Grafana查看SLO
|
Prometheus Cloud Native
在ASM中为应用服务启用SLO(3):使用ASM定义应用服务级SLO
用户可以基于Prometheus指标手动定义SLO,但过程相对繁琐。阿里云服务网格ASM提供了生成SLO以及配套的告警规则的能力,能够通过自定义资源YAML配置的方式简化这一流程。本文将介绍如何使用ASM定义应用服务级SLO。
205 0
在ASM中为应用服务启用SLO(3):使用ASM定义应用服务级SLO
|
Prometheus Cloud Native
在ASM中为应用服务启用SLO(2):服务网格中的SLO定义
阿里云服务网格ASM提供了生成服务等级目标SLO以及配套的告警规则的能力,能够通过自定义资源CRD配置的方式简化这一流程。本文将介绍对应的CRD具体字段内容含义。
318 0
在ASM中为应用服务启用SLO(2):服务网格中的SLO定义
|
运维 监控 微服务
在ASM中为应用服务启用SLO(1):服务等级目标SLO概览
服务等级目标 (SLO) 提供了一种形式化的方式来描述、衡量和监控微服务应用程序的性能、质量和可靠性。SLO 为应用开发和平台团队、运维团队提供了一个共享的质量基准,作为衡量服务水平质量以及持续改进的参考。SLO 由一个或多个服务等级指标 (SLI) 组成。使用 SLI 组合定义的 SLO 允许团队以更精确和相关的方式描述服务健康状况。 阿里云服务网格ASM提供了开箱即用的基于服务等级目标SLO的监控和告警能力,用于监控应用服务之间调用的延迟和错误率特征。
449 1
在ASM中为应用服务启用SLO(1):服务等级目标SLO概览
|
安全 算法 Cloud Native
使用阿里云服务网格 ASM 和 Intel Multi-Buffer 技术实现更快的应用服务间加密通信|学习笔记
快速学习使用阿里云服务网格 ASM 和 Intel Multi-Buffer 技术实现更快的应用服务间加密通信
304 0
使用阿里云服务网格 ASM 和 Intel Multi-Buffer 技术实现更快的应用服务间加密通信|学习笔记
|
2月前
|
Oracle 关系型数据库
oracle asm 磁盘显示offline
oracle asm 磁盘显示offline
30 2
|
2月前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例