基于阿里云平台搭建Prometheus并实现自定义报警

一、背景

由于公司在生产A环境已经使用上了K8S,所以我们需要使用一套监控系统来实现对K8S的监控,并自定义一些PrometheusRule来实现自定义报警。

二、Prometheus搭建过程 

我们采用阿里云提供的chart去部署promethues监控系统,chart的本质是deployment,service,sercert,PrometheusRule等资源类型的压缩包,helm专门是用来管理这些chart的。

2.1 安装 ack-prometheus-oprator

  • 在应用目录选择 ack-prometheus-oprator

  •  点击创建,底层是执行了helm install 

2.2 添加Ingress路由

创建ack-prometheus-oprator 之后,会自动创建grafana,alertmanager,promethues的service,如果需要外部访问这些service的话,需要给这些service添加ingress。

1.找到路由导航栏,点击创建

2.输入域名,选择grafana服务,单击创建

说明:域名可以使用自定义前缀+集群域名,或者已备案的自定义域名。

3.重复步骤1和步骤2,分别完成prometheus和prometheus-alertmanager的Ingress配置。

2.2  查看Promethues,grafana,alertmanager安装之后的界面

1. promethues-server webUI,Expression是用来写PromQL的,通过prom QL就可以实现自定义报警

2. grafana webUI,ack-prometheus-oprator安装完之后已经添加默认数据源为所在集群的数据源,下图为集群Node节点的监控信息。

3. alertmanager webUI,可以通过这个界面看到哪些报警信息已经发给了alertmanager,由Alertmanager进行告警处理和
路由(支持邮件、webhook等方式)

三、自定义规则实现钉钉报警

通过编写prometheusrule类型的yaml文件,然后应用到集群中,就可以实现自定义报警

 3.1 创建钉钉机器人

1.首先创建一个群组,然后在群组里面创建钉钉机器人,安全设置选择自定义关键词为"Annotation",因为报警信息里面都会包含Annotion,如果不配置的话会被拦截掉。

3.2 创建PromethuesRule

创建prometheusRule的yaml文件,promethuesRule编写规则贺promQL的语法可以访问链接

1. prometheusRule需要加上【app:  ack-prometheus-operator  release:  ack-prometheus-operator】这两个标签,因为只有包含这两个标签才可以被Prometheus-server采集到。

2.定义rule名称为./pod.rules,alert名称为podCPUAlert

3.最重要的还是需要更具metric编写prom QL实现自定义报警。下面这个prom QL的大致意思是先用rate(container_cpu_usage_seconds_total这个,得到我们目前pod的实际cpu,然后再除以kube_pod_container_resource_limits_cpu_cores(pod的cpu limit值)

4. prometheusrule完整文件,因为是做测试,所以设定的条件是当任意一个pod的cpu使用量/pod cpu limit值 > 4% 就报警

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    app:      ack-prometheus-operator
    release:  ack-prometheus-operator
  name: ack-prometheus-operator-pod-rule.rules
spec:
  groups:
  - name: ./pod.rules
    rules:
    - alert: podCPUAlert
      expr: sum by(pod,namespace)((label_replace(sum by(namespace, pod_name) (rate(container_cpu_usage_seconds_total{container_name!="POD",image!="",job="kubelet"}[5m]))/3,"pod","$1","pod_name","(.*)"))/on(namespace,pod)  sum by(pod,namespace) (kube_pod_container_resource_limits_cpu_cores{pod !="POD"} )) > 0.02
      for: 1m
      labels:
        severity: WARNING
      annotations:
        message: pod cpu over 2%,please check it's cpu.

5.应用podrule.yaml到集群里面,让Prometheus-server可以pull到

kubectl apply -f podrule.yaml -n monitoring

3.3 钉钉群里面的报警消息

可以看到我们自定义的报警规则已经生效,并且通过alertmanager发送给钉钉群了

发布了161 篇原创文章 · 获赞 40 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_36441027/article/details/103042595