由于公司在生产A环境已经使用上了K8S,所以我们需要使用一套监控系统来实现对K8S的监控,并自定义一些PrometheusRule来实现自定义报警。
我们采用阿里云提供的chart去部署promethues监控系统,chart的本质是deployment,service,sercert,PrometheusRule等资源类型的压缩包,helm专门是用来管理这些chart的。
创建ack-prometheus-oprator 之后,会自动创建grafana,alertmanager,promethues的service,如果需要外部访问这些service的话,需要给这些service添加ingress。
1.找到路由导航栏,点击创建
2.输入域名,选择grafana服务,单击创建
说明:域名可以使用自定义前缀+集群域名,或者已备案的自定义域名。
3.重复步骤1和步骤2,分别完成prometheus和prometheus-alertmanager的Ingress配置。
1. promethues-server webUI,Expression是用来写PromQL的,通过prom QL就可以实现自定义报警
2. grafana webUI,ack-prometheus-oprator安装完之后已经添加默认数据源为所在集群的数据源,下图为集群Node节点的监控信息。
3. alertmanager webUI,可以通过这个界面看到哪些报警信息已经发给了alertmanager,由Alertmanager进行告警处理和
路由(支持邮件、webhook等方式)
通过编写prometheusrule类型的yaml文件,然后应用到集群中,就可以实现自定义报警
1.首先创建一个群组,然后在群组里面创建钉钉机器人,安全设置选择自定义关键词为"Annotation",因为报警信息里面都会包含Annotion,如果不配置的话会被拦截掉。
创建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
可以看到我们自定义的报警规则已经生效,并且通过alertmanager发送给钉钉群了