kube-promethues监控k8s集群外服务
一. 概述
1.1 编写目的和使用场景
本文档的目的是编写一个通用的监控方案,方便以后监控大部分基于k8s搭建的服务时,能够快速实现监控服务重要指标的任务,保证服务能够正常稳定的运行,提高服务可用性指标。
1.2 监控工具的选用
传统企业的运维经过多年的积累,已沉淀下来了不少了监控工具,根据公司业务实际情况,这里主要选用promethues作为监控工具。
1.3 监控内容
本方案的监控内容基于 运维交付通用部署方案 中的应用,主要分为5块,包括宿主机监控,中间件监控,数据库监控,k8s基础组件监控,容器状态监控(pod, service)。
因为公司内网60网段的k8s测试环境已经部署相关服务,本文档所有内容都是直接使用测试环境中的prometheus监控其中的相关服务
二. prometheus监控介绍
公司使用的标准监控工具是kube-prometheus,可以认为是prometheus的集群加强版,是紧密结合k8s设计运行的。
2.1 prometheus架构图
2.2 prometheus基础模块
名称 | 功能说明 |
---|---|
prometheus server | 收集和存储时间序列数据(TSDB) |
Exporter | 负责收集目标对象(host ,container...)的性能数据 |
可视化组件 | Grafana 能够与 Prometheus 无缝集成,提供完美的数据展示能力 |
Alertmanager | 用户可以定义基于监控数据的告警规则,规则会触发告警 |
Push Gateway | 使用主动推送数据的方式, 文档中minio采用这种方式采集数据 |
2.3 prometheus中的metrics
2.3.1 宿主机的监控数据
数据由Node Exporter 工具提供,生产环境中常以 DaemonSet 的方式运行在宿主机上,主要负责抓取节点的负载(Load)、CPU、内存、磁盘以及网络这样的常规信息
2.3.2 k8s基础组件的数据
k8s各个组件的核心监控指标,包括controller-manager, etcd, kube-proxy, kube-scheduler, kubelet,
apiserver等
2.3.3 中间件和数据库监控数据
这些服务需要分别部署专有的exporter工具,比如mysql-exporter, redis-exporter等获取相关监控指标,然后配置prometheus拉取这些指标
2.3.4 容器状态监控
包括pod, service等运行状态,比如副本数,重启情况,资源使用情况等
2.4 prometheus工作流程
- 定期从配置好的 jobs 或者 exporters 中拉取 metrics,或者接收来自 Pushgateway 发过来的metrics
- Prometheus server 在本地存储收集到的 metrics
- Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警
- 在图形界面grafana中,可视化采集数据
三. 监控指标
3.1 指标等级
监控指标按照重要程度划分等级如下,一般三级以上的指标都必须进行监控
级别 | 描述 |
---|---|
一级 | 可选 |
二级 | 一般 |
三级 | 重要 |
四级 | 很重要 |
五级 | 必须 |
3.2 宿主机监控
宿主机的监控指标是通过node-exporter来获取的,部署prometheus时,默认会自动在每个宿主机节点上安装此客户端工具。
3.2.1 节点监控
监控指标 | 等级 | 说明 |
---|---|---|
服务器是否可达 | 五级 | 服务器宕机或者agent失败监控会不可达 |
运行时长 | 三级 | 服务器自上次启动后正常运行的时间 |
主机名 | 三级 | 主机名在统计和排查故障时很重要 |
3.2.2 CPU监控
监控指标 | 等级 | 说明 |
---|---|---|
CPU数量 | 五级 | 服务器能使用的CPU资源 |
CPU负载 | 五级 | 一段时间内占用CPU时间的进程和等待CPU时间的进程数之和 |
CPU使用率 | 五级 | 一段时间内CPU非空闲时间占比 |
用户CPU时间占比(us) | 三级 | 用户CPU时间占比(%),高运算任务时会变高 |
系统CPU时间占比(sy) | 三级 | 系统CPU时间占比,IO操作等系统调用时会变高 |
空闲CPU时间占比(id) | 三级 | 空闲CPU时间占比,一般id+us+sy=100 |
等待I/O时间占比 | 三级 | 等待IO的cpu时间 |
3.2.3 磁盘监控
监控指标 | 等级 | 说明 |
---|---|---|
磁盘空间 | 三级 | 宿主机能使用的磁盘空间有多少 |
目录使用空间占比 | 三级 | 目前还有多少空间能用 |
r/s | 二级 | 每秒磁盘连续读次数 |
w/s | 二级 | 每秒磁盘连续写次数 |
rkB/s | 二级 | 每秒磁盘读取速度 |
wkB/s | 二级 | 每秒磁盘写入速度 |
r_await | 二级 | 读请求等待时间 |
w_await | 二级 | 写请求等待时间 |
%utils | 二级 | 表示磁盘利用率 |
avgqu-sz | 二级 | 待处理的 I/O 请求的数目 |
3.2.4 内存监控
监控指标 | 等级 | 说明 |
---|---|---|
MemTotal | 三级 | 服务器内存总量 |
MemFree | 三级 | 服务器目前可用内存量 |
Buffer | 二级 | 对磁盘数据的缓存 |
Cache | 二级 | 二级 |
SwapTotal | 二级 | 虚拟内存可使用的大小 |
3.2.5 网络监控
监控指标 | 等级 | 说明 |
---|---|---|
下载流量 | 二级 | 服务器接收的数据总量 |
上传流量 | 二级 | 服务器发送的数据总量 |
TCP连接数 | 二级 | 有多少个TCP连接到本服务器 |
3.2.6 grafana模板
添加node-exporter的grafana模板, ID为11074
3.3 k8s基础组件监控
主要保证相关组件正常运行即可
监控指标 | 等级 | 说明 |
---|---|---|
EtcdCluseterUnavailable | 三级 | etcd 集群健康检查 |
EtcdLeaderCheck | 二级 | etcd检查 leader是否正常 |
Etcdlived | 三级 | etcd 存活检测 |
KubeControllerManagerDown | 三级 | KubeControllerManager是否 失联 |
KubeSchedulerDown | 三级 | KubeScheduler 是否失联 |
apiserver_client_certificate_expiration_seconds_count | 三级 | kubelet证书有效期剩余时间 |
kubeletDown | 三级 | kubelet是否失联 |
apiserver_request_total | 二级 | APIServer 请求数 |
KubeAPIDown | 三级 | APIserver是否失联 |
KubeAPIErrorsHigh | 二级 | APIServer 请求错误率 |
3.4 中间件和数据库监控
这些数据都需要安装特定的exporter工具来采集这些服务的监控指标,然后prometheus在通过exporter拉取这些指标数据进行监控。
3.4.1 kafka监控
监控目标:10.255.60.141的kafka集群, 集群中只需要随便选择一个节点安装kafka-exporter即可,不需要所有节点都安装。如果kafka集群中有一个节点宕机,则kafka-exporter不可用
3.4.1.1 部署kafka-exporter
下载kafka-exporter及启动
https://github.com/danielqsj/kafka_exporter/releases/download/v1.4.2/kafka_exporter-1.4.2.linux-amd64.tar.gz
tar -zxvf kafka_exporter-1.4.2.linux-amd64.tar.gz -C /opt/
前台启动,默认监听端口9308
./kafka_exporter --kafka.server=10.255.60.141:9092
后台启动
nohup ./kafka_exporter --kafka.server=10.255.60.141:9092 &
注意:
kafka-exporter和kafka的版本有对应关系,这里kafka的版本为2.1.1对应kafka-exporter的版本是1.4.2. 经测试使用版本为1.2.0的kafka-exporter启动失败
创建service服务
根据情况需要修改文件中的IP地址,文件路径
cat > /lib/systemd/system/kafka_exporter.service <<EOF
[Unit]
Description=kafka_exporter
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
User=root
Group=root
ExecStart=/opt/kafka_exporter-1.4.2.linux-amd64/kafka_exporter --kafka.server=10.255.60.141:9092
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
启动服务并测试
systemctl daemon-reload
systemctl enable kafka_exporter
systemctl start kafka_exporter
systemctl status kafka_exporter
#测试
curl 10.253.60.141:9308/metrics
3.4.1.2 kube-prometheus中修改配置
添加prometheus-additional.yaml
prometheus的配置默认是不能修改的,目前可以通过新增prometheus-additional.yaml来添加新增配置,文件在10.255.60.127的/root/yaml/prometheus目录,如下
- job_name: kafka-exporter
honor_timestamps: true
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- 10.253.60.141:9308
创建promethues的secret对象
kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring
更新的话删除,再创建
kubectl delete secret additional-configs -n monitoring
资源对象Promtheus中添加additionalScrapeConfigs 字段
先使用kubectl –n monitoring get Prometheus查看资源名字
然后使用命令kubectl -n monitoring edit Prometheus k8s,其中命令中的k8s是Prometheus这个资源的名字,不同环境中的名字可能不同
...
spec:
additionalScrapeConfigs:
name: additional-configs
key: prometheus-additional.yaml
...
验证prometheus中是否能看到kafka
访问http://10.255.60.127:30090/targets
正常情况下,此时就可以再prometheus监控页面看到kafka-exporter这个监控项了
3.4.1.3 kafka监控指标
监控指标 | 等级 | 说明 |
---|---|---|
kafka_broker_count | 三级 | Kafka集群的Broker数量 |
kafka_topic_partition_count | 三级 | 指定Kafka主题的分区数量 |
kafka_partition_leader | 二级 | 指定Kafka分区的Leader副本ID |
kafka_topic_log_size | 二级 | 指定Kafka主题的消息生产情况 |
kafka_consumer_records_consumed | 二级 | 指定Kafka消费者组的消费速率 |
3.4.1.4 添加grafana模板
添加kafka的grafana模板,https://grafana.com/grafana/dashboards/7589
3.4.2 redis监控
监控目标:10.255.60.118的redis集群
集群中只需要随便选择一个节点安装redis-exporter即可,不需要所有节点都安装。
3.4.2.1 redis-exporter获取数据
下载redis-exporter及启动
wget https://github.com/oliver006/redis_exporter/releases/download/v1.50.0/redis_exporter-v1.50.0.linux-amd64.tar.gz
tar xzvf redis_exporter-v1.50.0.linux-amd64.tar.gz -C /opt
#直接启动,无密码
./redis_exporter redis//10.255.60.118:6379 &
./redis_exporter -redis.addr 10.255.60.118:6379 &
#有密码
./redis_exporter -redis.addr 10.255.60.118:6379 -redis.password Gioneco2021
编写service服务
#systemctl启动
vim /lib/systemd/system/redis_exporter.service
[Unit]
Description=redis_exporter
Documentation=https://github.com/oliver006/redis_exporter
After=network.target
[Service]
Type=simple
#User=prometheus
ExecStart=/opt/redis_exporter-v1.50.0.linux-amd64/redis_exporter -redis.addr 10.255.60.118:6379 -redis.password Gioneco2021
Restart=on-failure
[Install]
WantedBy=multi-user.target
#启动服务
systemctl daemon-reload
systemctl start redis_exporter
systemctl status redis_exporter
systemctl enable redis_exporter
验证
redis-exporter默认端口是9121,可以直接访问10.255.60.118:9121/metrics看是否有指标输出
3.4.2.2 kube-prometheus中修改配置
修改prometheus-additional.yaml
文件在10.255.60.127的/root/yaml/prometheus目录下
- job_name: redis-exporter
honor_timestamps: true
metrics_path: /metrics
scheme: http
static_configs:
- targets:
- 10.255.60.118:9121
更新secret对象
更新的话删除,再创建
kubectl delete secret additional-configs -n monitoring
kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring
资源对象Promtheus中添加additionalScrapeConfigs 字段
如果配置好kafka-exporter后可省去这个步骤
...
spec:
additionalScrapeConfigs:
name: additional-configs
key: prometheus-additional.yaml
...
验证
访问http://10.255.60.127:30090/targets,正常情况下可看到redis-exporter监控项
3.4.2.3 redis重要监控指标
监控指标 | 等级 | 说明 |
---|---|---|
redis_up | 五级 | redis服务是否存活 |
connected_num | 三级 | redis的连接数 |
slave_num | 三级 | slave的数量 |
master_num | 三级 | master的个数 |
3.4.2.4 添加grafana模板
导入redis的grafana 模板ID 763
3.4.3 mysql监控
3.4.3.1 部署mysql-exporter
下载安装包
官方地址:https://github.com/prometheus/mysqld_exporter/releases
#解压
tar -xvzf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64 mysqld_exporter
mysql中创建用户
CREATE USER 'exporter'@'%' IDENTIFIED BY 'Yh9YKb7P';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
flush privileges;
验证创建的用户
use mysql
select host,user from user;
创建配置文件
在mysql_exporter文件夹中创建.my.cnf
[client]
user = exporter
password = Yh9YKb7P
host = 10.255.60.121
port = 3306
创建service文件
cd /usr/lib/systemd/system
cat mysqld_exporter.service
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/root/mysqld_exporter/mysqld_exporter --config.my-cnf=/root/mysqld_exporter/.my.cnf --web.listen-address=:9104
[Install]
WantedBy=multi-user.target
启动及测试
#启动服务
systemctl daemon-reload
systemctl start mysqld_exporter.service
#查看运行状态
systemctl status mysqld_exporter.service
#设置开机启动
systemctl enable mysqld_exporter.service
#测试指标
curl localhost:9104/metrics
3.4.3.2 kube-prometheus中修改配置
修改prometheus-additional.yaml
#添加mysql-exporter项
- job_name: 'mysql-exporter'
static_configs:
- targets:
- 10.255.60.122:9104
- 10.255.60.123:9104
重建secret
kubectl delete secret additional-configs -n monitoring
kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring
验证
访问http://10.255.60.127:30090/targets查看是否有mysql-exporter监控项
3.4.3.3 添加grafana模板
grafana添加mysql模板:模板号为11323, 7362
3.4.3.4 mysql重要监控指标
指标名 | 等级 | 说明 |
---|---|---|
可用性 | 五级 | 数据库是否可以正常对外服务 |
慢查询 | 三级 | 耗时较长的查询情况 |
主从延迟 | 二级 | 主从延迟时间 |
主从状态 | 三级 | 主从链路是否正常 |
连接数 | 三级 | 连接到数据库会话的数量,默认1024 |
3.4.4 minio监控
监控目标:10.255.60.156-10.255.60.159的minio集群,VIP地址为10.255.60.155,我们这里直接监控VIP地址
3.4.4.1 minio配置Prometheus监控
MinIO默认情况下支持Prometheus作为监控,并提供了接口地址/minio/v2/metrics/cluster,用户只需要添加支持prometheus监控的配置即可
修改run.sh
修改/usr/local/minio/bin/run.sh
添加export MINIO_PROMETHEUS_AUTH_TYPE="public"
注意:必须在所有minio节点上修改,然后重启minio
安装mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/
chmod +x /usr/local/bin/mc #添加可执行权限
设置别名
mc alias set minio http://10.255.60.155:9000 Minio GionecoTest_2022
mc使用别名生成Prometheus配置
MinIO中的Prometheus端点默认需要身份验证,Prometheus支持使用承载令牌方法对Prometheus抓取请求进行身份验证,mc生成Prometheus配置抓取minio指标的命令如下
mc admin prometheus generate minio
生成的配置如下
- job_name: minio-job
bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiTWluaW8iLCJleHAiOjQ4NDI3NDE5NDR9.A4SX7K3vFMzOKVABLMf2n7YXkvK9hFIBmRXfxssaEkBAND1OkFLE-w5MvQ-CWTVJpBuh0zliu5DnZHGlyKTxmw
metrics_path: /minio/v2/metrics/cluster
scheme: http
static_configs:
- targets: ['10.255.60.155:9000']
3.4.4.2 kube-prometheus中修改配置
修改prometheus-additional.yaml
#添加mc生成的prometheus配置内容
- job_name: minio-job
bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiTWluaW8iLCJleHAiOjQ4NDI3NDE5NDR9.A4SX7K3vFMzOKVABLMf2n7YXkvK9hFIBmRXfxssaEkBAND1OkFLE-w5MvQ-CWTVJpBuh0zliu5DnZHGlyKTxmw
metrics_path: /minio/v2/metrics/cluster
scheme: http
static_configs:
- targets: ['10.255.60.155:9000']
创建secret对象
更新的话删除,再创建
kubectl delete secret additional-configs -n monitoring
kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring
验证
curl 10.255.60.155:9000/minio/v2/metrics/cluster 验证下是否可获得指标
注意:
网页上直接访问会跳转到登录页面,不影响prometheus获取数据
3.4.4.3.添加grafana面板
在grafana页面导入面板id 13502,在scrape_jobs中选择minio-job标签
3.4.4.4 minio重要监控指标
https://zhuanlan.zhihu.com/p/600159070
指标 | 等级 | 说明 |
---|---|---|
桶对象计数 | 三级 | 现在共有多少个桶 |
节点运行数 | 三级 | minio集群有多少个节点 |
可用存储量 | 三级 | 目前可用的存储空间 |
3.4.5 emq监控
监控目标: 10.255.60.146, 登录地址是http://10.255.60.146:18083 账户是admin 密码是public
3.4.5.1 配置emq允许prometheus监控
查看版本
cd /usr/local/emqx/bin
./emqx_ctl status
Node 'emqx@127.0.0.1' is started
emqx 4.0.4 is running
开启emqx_statsd插件
EMQ 3.0以后的版本提供 emqx_statsd插件,用于将系统的监控数据输出到第三方的监控系统中。
进入Emq Web端,左侧选项选择 MANAGEMENT > Plugins > emqx_statsd,点击后面的 Start 按钮开启插件
emqx_statsd 插件内部会启动一个定时器,使其每间隔一段时间便采集 EMQ X 中的监控数据。
修改插件配置文件
vim /etc/emqx/plugins/emqx_statsd.conf
statsd.push.gateway.server = http://192.168.6.***:9091 # Prometheus 的 PushGateway 地址
statsd.interval = 15000 # 推送间隔,单位:毫秒 必须大于0 ,默认 5000
安装pushgateway
下载地址:
https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz
解压到指定目录
tar xzvf pushgateway-1.5.1.linux-amd64.tar.gz
mv pushgateway-1.5.1.linux-amd64 /usr/local/pushgateway
后台运行
nohup ./pushgateway > run.log 2>&1 &
验证
curl localhost:9091/metrics #访问 pushgateway-server:9091/metrics可以看到指标
3.4.5.2 kube-prometheus中修改配置
prometheus-additional.yaml中添加下面配置
job_name: 'pushgateway-emqx'
scrape_interval: 5s
honor_labels: true
static_configs:
# Pushgateway IP address and port
- targets: ['10.255.60.146:9091']
更新secret对象
更新的话删除,再创建
kubectl delete secret additional-configs -n monitoring
kubectl create secret generic additional-configs --from-file=prometheus-additional.yaml -n monitoring
稍等一会儿访问http://10.255.60.127:30090/targets,正常情况下可看到pushgateway-emqx监控项
3.4.5.3 添加grafana模板
在模板的import输入框中,直接添加https://grafana.com/grafana/dashboards/17446-emqx/ 即可
3.4.5.4 emq重要监控指标
参考:https://docs.emqx.com/zh/cloud/latest/deployments/prometheus.html#指标详解
指标名 | 等级 | 说明 |
---|---|---|
emqx_topics_count | 三级 | 当前主题数 |
emqx_vm_process_messages_in_queues | 三级 | 消息阻塞总数 |
emqx_vm_cpu_use | 二级 | CPU占用数 |
emqx_subscriptions_shared_count | 二级 | 当前共享订阅数 |
emqx_subscribers_count | 三级 | 当前订阅者数 |
emqx_connections_count | 三级 | 当前连接数 |
3.5 容器状态监控
3.5.1 pod指标
指标名 | 等级 | 说明 |
---|---|---|
kube_pod_container_status_restarts_total | 三级 | pod重启状态 |
kube_pod_status_phase | 三级 | pod状态 |
kube_pod_container_status_waiting_reason | 三级 | 值为0表示在等待状态的容器 |
3.5.2 deployment指标
指标名 | 等级 | 说明 |
---|---|---|
kube_deployment_status_observed_generation | 三级 | Deployment 生成资源数 |
kube_deployment_metadata_generation | 三级 | Deployment 定义资源数 |
kube_deployment_spec_replicas 资源定义副本数 | 三级 | deployment定义副本数 |
kube_deployment_status_replicas_available | 三级 | deployment正在运行副本数 |
kube_deployment_status_replicas_updated | 三级 | deployment更新的副本数 |
3.5.3 statefulset指标
指标名 | 等级 | 说明 |
---|---|---|
kube_statefulset_status_replicas_ready | 三级 | statefulset就绪副本数 |
kube_statefulset_status_replicas | 三级 | statefulset当前副本数 |
kube_statefulset_status_replicas_updated | 三级 | statefulset更新的副本数 |
kube_statefulset_replicas | 三级 | StatefulSet 所需的副本数 |
3.5.4 daemonset指标
指标名 | 等级 | 说明 |
---|---|---|
kube_daemonset_status_number_ready | 三级 | 就绪的 DaemonSet |
kube_daemonset_status_desired_number_scheduled | 三级 | 应该调度的 DaemonSet 数量 |
kube_daemonset_status_number_misscheduled | 三级 | 运行在不该运行的节点状态 |
3.5.5 添加grafana模板
grafana中添加模板ID: 13105
四. 报警指标
报警级别从高到低依次如下
Disaster > High > Average > Warning > Information > Not classafied
4.1 宿主机资源报警指标
指标名 | 等级 | 说明 |
---|---|---|
node down | Disaster | 节点宕机 |
HostHighCpuLoad | High | CPU load is > 80% |
HostOomKill | High | OOM kill detected |
Low free space | High | 某个挂载点剩余空间太少 |
HostOutOfMemory | High | 主机内存少于10%报警 |
HostUnusualNetworkThroughputIn | High | 网络接收数据库异常 |
HostUnusualNetworkThroughputOut | High | 网络发送数据量异常 |
HostOutOfInodes | High | 文件句柄数剩余10%报警 |
4.2 k8s nfs存储相关
指标名 | 等级 | 说明 |
---|---|---|
KubernetesPersistentvolumeclaimPending | High | pvc申请失败 |
KubernetesVolumeOutOfDiskSpace | High | nfs存储空间不足 |
KubernetesVolumeFullInFourDays | High | nfs存储空间4天内占满 |
KubernetesPersistentvolumeError | High | PV申请失败 |
4.3 k8s 容器状态相关
指标名 | 等级 | 说明 |
---|---|---|
KubernetesStatefulsetDown | High | statefulset服务失败 |
KubernetesContainerOomKiller | High | pod 资源不足oom了 |
KubernetesPodNotHealthy | High | pod监控检查失败 |
KubernetesPodCrashLooping | Warning | pod状态一直crash looping |
ContainerKilled | Warning | 容器丢失超过60秒 |
ContainerCpuUsage | High | 容器CPU使用率超过预分配的300% |
ContainerMemoryUsage | Warning | 容器内存使用率超过预分配的90% |
ContainerVolumeUsage | High | 容器存储使用率超过预分配的80% |
KubernetesDaemonsetMisscheduled | High | Daemonset类型pod运行在了污点标签节点上 |
4.4 k8s基础组件相关指标
指标名 | 等级 | 说明 |
---|---|---|
EtcdDown | Hight | etcd组件失败 |
KubeSchedulerDown | High | KubeScheduler组件失败 |
KubeControllerManagerDown | High | controllerManager组件失败 |
KubernetesApiServerErrors | High | APIserver请求失败率过高 |
KubernetesApiServerLatency | High | APIserver请求延迟值过大 |
KubernetesClientCertificateExpiresNextWeek | High | Client证书下周过期 |
KubernetesClientCertificateExpiresSoon | High | Client证书24小时内过期 |
4.5 mysql相关指标
指标名 | 等级 | 说明 |
---|---|---|
MysqlDown | Disaster | mysql宕机 |
MysqlTooManyConnections | warning | 连接数超过最大值的80% |
MysqlSlaveSqlThreadNotRunning | Disaster | slave服务器没运行 |
MysqlSlaveReplicationLag | warning | 主从复制延迟较大 |
MysqlSlowQueries | warning | 存在慢查询,影响性能 |
MysqlRestarted | information | mysql重启了 |
4.6 redis相关指标
指标名 | 等级 | 说明 |
---|---|---|
RedisDown | Disaster | redis宕机 |
RedisMissingMaster | Disaster | 失去master角色 |
RedisTooManyMasters | Disaster | 存在多个master角色 |
RedisDisconnectedSlaves | High | 存在未同步复制的slave角色 |
RedisReplicationBroken | High | redis丢失了一个slave角色 |
RedisMissingBackup | High | redis备份失败 |
RedisOutOfConfiguredMaxmemory | warning | redis超过配置的最大内存 |
RedisTooManyConnections | Warning | redis连接数过多 |
RedisRejectedConnections | High | redis拒绝连接 |
4.7 emqx服务相关
指标名 | 等级 | 说明 |
---|---|---|
subscribersTooMany | High | 订阅数超过阈值 |
ConnectTooMany | High | 连接数过多 |
emqDown | Disaster | emqtt服务宕机 |
4.8 minio相关指标
指标名 | 等级 | 说明 |
---|---|---|
minio_cluster_nodes_offline_total | High | 存在脱机的 MinIO 节点 |
minio_cluster_disk_offline_total | High | 存在脱机的磁盘 |
minioDown | Disaster | minio服务宕机 |
4.9 kafka相关指标
指标名 | 等级 | 说明 |
---|---|---|
Broker数量预警 | High | 当Broker数量达到阈值【❤️】时进行预警 |
消费延迟预警 | High | 当积压的消息数量达到阈值【>1000】时进行预警 |
kafkaDown | Disaster | kafka服务宕机 |
添加告警配置示例
创建myrule.yaml
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: myrule
namespace: monitoring
labels:
app: prometheus-operator
heritage: Tiller
release: prometheus-operator
spec:
groups:
- name: my-node-time
rules:
- alert: myClockSkewDetected
annotations:
message: myClock skew detected on node-exporter {{`{{ $labels.namespace }}`}}/{{`{{ $labels.pod }}`}}. Ensure NTP is configured correctly on this host.
expr: abs(node_timex_offset_seconds{job="node-exporter"}) > 0.03
for: 2m
labels:
severity: warning
参考:
https://www.cnblogs.com/putaoo/p/17446151.html
alertmanager: prometheus-kube-prometheus-alertmanager
app.kubernetes.io/instance: prometheus-kube-prometheus-alertmanager
app.kubernetes.io/managed-by: prometheus-operator
app.kubernetes.io/name: alertmanager
app.kubernetes.io/version: 0.24.0