你是否曾经在凌晨时分收到运维团队的紧急消息?当 K8s 集群出现故障时,及时的告警是生命线。有没有想过,利用 Prometheus 搭配邮箱和微信告警,让监控变得智能化和高效化?
如何通过 Prometheus 配合邮箱和微信告警,打造一套高效、智能的 Kubernetes 集群监控系统?
随着云原生架构和微服务的普及,Kubernetes 成为很多企业的基础设施。而高效的监控与告警系统成为保障业务稳定运行的重要一环。通过 Prometheus 和告警系统的组合,企业可以实现更加智能和即时的响应机制,从而减少停机时间和故障恢复时间。
为什么选择 Prometheus?
-
高效的时间序列数据库
Prometheus 作为一个开源监控系统,专为时间序列数据设计。它支持高效存储与查询,可以毫不费力地处理 Kubernetes 集群中产生的海量指标数据。 -
K8s 原生支持
Prometheus 天生就适合与 Kubernetes 集群结合,通过其集成的 K8s 服务发现与自动发现功能,能够无缝监控集群中的每个容器和 Pod。 -
告警机制自定义强大
Prometheus 的 Alertmanager 允许用户设置告警规则,并支持与多种通知渠道集成,包括邮箱、微信等,确保关键问题第一时间得到响应。
01 特征
普罗米修斯的主要特点是:
-
一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
-
PromQL,一种灵活的查询语言 ,可利用此维度
-
不依赖分布式存储;单服务器节点是自治的
-
时间序列收集通过HTTP上的拉模型进行
-
通过中间网关支持推送时间序列
-
通过服务发现或静态配置发现目标
-
多种图形和仪表板支持模式
02 组件
Prometheus生态系统包含多个组件,其中许多是可选的:
-
Prometheus主服务器,它会刮取并存储时间序列数据
-
客户端库,用于检测应用程序代码
-
一个支持短期工作的 推送网关
-
诸如HAProxy,StatsD,Graphite等服务的专用 出口商
-
一个 alertmanager处理警报
-
各种支持工具
大多数Prometheus组件都是用 Go编写的,因此易于构建和部署为静态二进制文件。
03 架构
下图说明了Prometheus的体系结构及其某些生态系统组件:
Prometheus直接或通过中介推送网关从已检测作业中删除指标,以用于短期作业。它在本地存储所有报废的样本,并对这些数据运行规则,以汇总和记录现有数据中的新时间序列,或生成警报。 Grafana或其他API使用者可以用来可视化收集的数据。
04 安装
前提需要有helm环境:
安装成功,查看pod状态会发现有两个处于pending状态,是因为需要请求pv
这里使用hostPath来创建pv
查看pod状态会发现有个pod会报错,并查看日志是报错是容器名不同
真正的原因是因为使用的hoatPath,pvc请求的权限不够,到worker节点给对应的hostpath加777的权限即可,这是我通过rancher查看到的报错
05 访问web界面
这里还需要修改Prometheus-server的Port类型为NodePort。
06 安装grafana
由于grafana没有使用持久存储,根据需求修改为hostpath持久存储,需要注意的是,宿主机目录也需要777的权限
还需要需改grafana的svc类型为NodePort
访问web界面,用户admin,密码:admin123
07 导入Prometheus
填入Prometheus的地址
则表示验证通过
导入grafana的模板
这里选择Prometheus
即可看到灰常华丽的仪表盘了
这里提供几个模板的编号:
08 配置alertmanager告警
1、关联alertmanager和prometheus
添加alertmanager的服务名称
添加告警规则
rules.yml:|
groups:
- name: Host
rules:
- alert: HostMemory Usage
expr: sum(kube_pod_container_resource_requests_memory_bytes) / sum(kube_node_status_allocatable_memory_bytes) * 100 > 80
for: 1m
labels:
name: Memory
team: wechat
severity: Warning
annotations:
summary: " {{ $labels.appname }} "
description: "宿主机内存使用率超过80%."
value: "{{ $value }}"
- alert: HostCPU Usage
expr: sum(kube_pod_container_resource_requests_cpu_cores) / sum(kube_node_status_allocatable_cpu_cores) * 100 > 60
for: 1m
labels:
name: CPU
team: wechat
severity: Warning
annotations:
summary: " {{ $labels.appname }} "
description: "宿主机CPU使用率超过60%."
value: "{{ $value }}"
- alert: HostFilesystem Usage
expr: (sum(node_filesystem_size_bytes{device!="rootfs"}) - sum(node_filesystem_free_bytes{device!="rootfs"})) / sum(node_filesystem_size_bytes{device!="rootfs"}) > 0.8
for: 1m
labels:
name: Disk
team: wechat
severity: Warning
annotations:
summary: " {{ $labels.appname }} "
description: " 宿主机 [ {{ $labels.mountpoint }} ]分区使用超过80%."
value: "{{ $value }}%"
保存后重新启动Prometheus服务。
2、配置企业微信告警
编写告警模板
修改prometheus-alertmanager的yaml文件,将微信配置挂载进来
登录企业微信,创建机器人
获取api_secret和agent_id
点击我的企业、企业信息,获取corp_id
需要报警的组,获取to_party
修改prometheus-alertmanager的configmap文件
重启alertmanager服务即可,如果需要测试,在告警规则降低阈值即可。
3、配置邮件告警
修改alertmanager的configmap文件
如果你也在为 Kubernetes 集群监控而烦恼,可以参考一些现成的工具,比如 Alertmanager 与 Wechat Work 插件结合,通过这些工具,你可以轻松接收来自 Prometheus 的告警信息,确保第一时间反应。
将 Prometheus 与邮箱和微信告警结合,能够让你从繁杂的日志中解放出来,快速锁定问题,提升集群运维的效率。借助这一技术,Kubernetes 集群的健康状况始终在你的掌控之中。
“监控是集群的眼睛,告警是集群的耳朵,只有眼耳兼备,才能让你在风雨中无所畏惧。”