2020-11-03
aliyun
00
请注意,本文编写于 1302 天前,最后修改于 569 天前,其中某些信息可能已经过时。

目录

保障服务正常运行的监控
报警内容
发送方式
业务是否报错的监控
报警的内容
发送的方式
阿里云给k8s提供的报警三个位置
如何使用arms提供的报警
进入arms服务
配置第一个报警
开启报警策略
添加联系人和联系组
配置通知策略
查看报警
报警收到了
自定义报警策略
简单的PromQL语法
创建报警

保障服务正常运行的监控

报警内容

集群报警发送给运维组(devops)

监测内容,

  1. 节点的磁盘空间,cpu,内存状态。

  2. pod状态(是否重启,pending,error等)

  3. deployment的状态(Jenkins发版更新确认是否成功)

发送方式

邮件,短信(重要)。

发送给运维

业务是否报错的监控

报警的内容

报警发送给各个项目相关人员

  1. 检测日志是否error,1条就发(邮件,短信)

  2. 检测日志warring,根据频繁程度报警(邮件,企业微信webhook)

发送的方式

邮件,短信,企业微信webhook

发给每个对应的开发负责成员,兵总,运维

saas服务发给研发

阿里云给k8s提供的报警三个位置

  1. arms提供的报警

https://arms-ap-southeast-1.console.aliyun.com/?promtype=ManagedKubernetes/#/promDetail/ap-southeast-1/ca3135b0b22024faf895e826d6c241c9e/alarms

image-20211025084919049

  1. 日志sls提供的报警

image-20211025085054711

直接通过日志进行报警,原理是我们安装的ack会开启事件中心,时间中心会记录下k8s的所有事件。日志是放在sls下边,名称为k8s-event。

image-20211025085944988

这里可以通过关键字进行报警。

  1. ack集群提供的报警设置

image-20211025085144189

这个报警也是使用的sls日志报警,通过的是阿里云的CRD配置进去的。

报警项目对应关系:https://help.aliyun.com/document_detail/207725.html?spm=5176.2020520152.help.dexternal.9c9d16ddXzw8gs

image-20211025085321377

如何使用arms提供的报警

进入arms服务

image-20211025170706169

点击“Prometheus监控”

image-20211025170738023

点击实例进入

image-20211025170900292

选择“报警配置”

image-20211025170940236

这里可以看到系统内置的报警规则。

配置第一个报警

开启报警策略

主要功能是监控是否有报警产生,

在“报警配置”页面开启需要报警的服务,可以进行自定义编辑。

添加联系人和联系组

告警运维中心地址:https://alerts-sg.console.aliyun.com/#/alarm/dispatch

没有很明显的入口,直接使用URL进入。

image-20211025171601606

配置通知策略

注意,这里需要配置通知策略里边的“分派规则”来关联前面的“报警策略”。

image-20211025172219910

查看报警

在告警运维中心可以查看报警历史和正在进行的报警。

image-20211025172853397

报警收到了

image-20211025172518080

自定义报警策略

简单的PromQL语法

官方:https://help.aliyun.com/document_detail/176180.html

image-20211027110424494

查找某个image的pod的信息

bash
kube_pod_container_info{image="registry-vpc.ap-southeast-1.aliyuncs.com/acs/node-problem-detector:v0.6.3-29-71bd5f8"} kube_pod_container_info是标签 支持正则表达式匹配 http_requests_total{code!="200"}// 表示查询 code 不为 "200" 的数据 http_requests_total{code=~"2.."}// 表示查询 code 为 "2xx" 的数据 http_requests_total{code!~"2.."}// 表示查询 code 不为 "2xx" 的数据

查找某个pod_name前缀为ad-go-sg的pod的信息

bash
kube_pod_container_info{pod_name=~"ad-go-sg.*"} .* 表示所有

统计匹配到的pod个数

bash
count(kube_pod_container_info{pod_name=~"ad-go-sg.*"}) # 支持的聚合运算符 ## sum,min,max,avg,stddev,stdvar,count,count_values,bottomk,topk,quantile,
bash
kube_deployment_status_replicas{deployment=~".*ad.*"} kube_pod_container_status_waiting_reason == 1

获取pending的容器

bash
kube_pod_status_phase{phase=~"Pending",pod!~"ad-go-sg.*"}> 0

创建报警

点击"创建报警"

image-20211027164755104

配置策略

image-20211027165049044

这里是测试出来的,一些告警信息可以选的变量。

bash
$labels的内容: {phase=Pending, _aliyun_arms_alert_level=ERROR, instance=kube-state-metrics:8080, pod=fluent-bit-46jqk, clustername=en-sg-prod, _aliyun_arms_alert_type=101, _aliyun_arms_integration_name=ARMS-DEFAULT, alertname=pending的容器(排除ad-namespace下的容器), _aliyun_arms_userid=1919028704903788, _aliyun_arms_involvedObject_name=en-sg-prod, pod_name=fluent-bit-46jqk, _aliyun_arms_involvedObject_id=ca3135b0b22024faf895e826d6c241c9e, __name__=kube_pod_status_phase, _aliyun_arms_region_id=ap-southeast-1, _aliyun_arms_involvedObject_kind=cluster, _aliyun_arms_product_type=ARMS_PROMETHEUS, namespace=kubesphere-logging-system, _aliyun_arms_integration_id=105, _aliyun_arms_involvedObject_type=ManagedKubernetes, job=_kube-state-metrics, _aliyun_arms_alert_rule_id=18804} 简单模板: pod状态:{{$labels.phase}} pod名称:{{$labels.pod}} 集群名称:{{$labels.clustername}} 报警名称:{{$labels.alertname}} 命名空间:{{$labels.namespace}} Service:{{$labels.name}} 如果是根据某个值进行的监控使用: 当前查出来的值,{{$value}}

创建完成。

image-20211027165257374

通知策略同模式配置方式。

bash
kube_deployment_status_replicas_unavailable and kube_deployment_status_replicas_available / kube_deployment_status_replicas < 1 and kube_deployment_status_replicas > 9
bash

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!