当前位置:首页>python>基于Python开发带 AI 智能分析的 K8s 集群监控系统项目分享

基于Python开发带 AI 智能分析的 K8s 集群监控系统项目分享

  • 2026-10-11 05:43:14
基于Python开发带 AI 智能分析的 K8s 集群监控系统项目分享

今天就给大家分享一个我最近开源的项目——Simple System Detection and Alerting for Linux。这是一个轻量级的系统资源监控与告警工具,支持单机运行,也可以一键部署到 Kubernetes 集群。之后还可以在告警时自动调用大模型进行根因分析,把排查建议直接写到告警消息里。

GitHub 地址:https://github.com/y114514-zero/Simple-system-detection-and-alerting---Linux
Gitee地址:https://gitee.com/sheep-jacket/simple-system-detection-and-alerting---linux-v1/tree/master/

✨ 核心功能一览

  • 实时采集:CPU 使用率、内存使用率、磁盘使用率、磁盘读写速率、网络流量等。

  • 阈值告警:可自定义 CPU/内存/磁盘的告警阈值,超出后通过企业微信/钉钉/飞书机器人发送通知。

  • AI 智能分析(可选):告警时自动查询最近的历史数据,发送给 DeepSeek 等大模型,生成可能的原因和排查步骤,并附加到告警消息中。

  • 多平台支持:原生 Python 脚本,可在 Linux、macOS、Windows 上运行。

  • Kubernetes 原生部署:提供完整的 Dockerfile 和 K8s 资源清单(DaemonSet、ConfigMap、Secret、ServiceMonitor),开箱即用。

  • Prometheus + Grafana 集成:指标暴露为 Prometheus 格式,可被 Prometheus 抓取,在 Grafana 中可视化。


🛠️ 技术栈

  • 语言:Python 3.9+

  • 核心依赖:psutil(系统信息采集)、requests(HTTP 请求)、prometheus_client(暴露指标)、pymysql(可选,历史数据存储)、openai(对接 DeepSeek 等兼容接口)

  • 容器编排:Docker + Kubernetes(DaemonSet)

  • 配置管理:单机用 .env + config.json;K8s 用 ConfigMap + Secret


📦 单机快速体验

1. 克隆项目

git clone https://github.com/y114514-zero/Simple-system-detection-and-alerting---Linux.gitcd Simple-system-detection-and-alerting---Linux
2. 安装依赖
pip install -r requirements.txt

3. 配置

  • 编辑 config.json 设置告警阈值(默认 CPU 80%、内存 90%、磁盘 80%)

  • 首次运行会自动生成 .env 模板,填入你的 Webhook 地址和 DeepSeek API Key(如需 AI 分析)

# .env 示例url=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxAPI_KEY=sk-your-deepseek-api-key

4. 运行

python monitor.py

终端会实时打印采集数据,当指标超过阈值时,你绑定的企业微信/钉钉/飞书就会收到告警消息(如果有 AI Key,还会附加大模型的分析建议)。

后台运行可选 nohup:

nohup python monitor.py > monitor.log 2>&1 &

☸️ 迁移到 Kubernetes(DaemonSet 模式)

架构概览

┌──────────────┐  ┌──────────────┐  ┌──────────────┐│   Node1 Pod  │  │   Node2 Pod  │  │   Node3 Pod  │  ← DaemonSet 保证每个节点一个│   :8000      │  │   :8000      │  │   :8000      │└──────┬───────┘  └──────┬───────┘  └──────┬───────┘       │ 暴露 Prometheus 指标               │       ▼                                    ▼┌─────────────────┐               ┌─────────────────┐│   Prometheus    │──────────────▶│     Grafana     │└─────────────────┘               └─────────────────┘       │  (阈值告警)       ▼┌─────────────────┐   ┌─────────────────┐│  企业微信机器人  │◀──│  AI 分析建议     │└─────────────────┘   └─────────────────┘

1. 构建镜像并推送

FROM python:3.9-slimENV PYTHONUNBUFFERED=1COPY . /appWORKDIR /appRUN pip install -r requirements.txtCMD ["python", "monitor.py"]
docker build -t your-registry/simple-monitor:v1 .docker push your-registry/simple-monitor:v1

2. 配置 ConfigMap 和 Secret

  • 在 k8s/ 目录下已提供完整的 YAML 文件,修改ConfigMap(配置文件)、Secret(密钥文件)就行。

3. 部署

kubectl apply -f k8s/namespace.yamlkubectl apply -f k8s/configmap.yamlkubectl apply -f k8s/secret.yamlkubectl apply -f k8s/daemonset.yamlkubectl apply -f k8s/service.yaml# 如果安装了 Prometheus Operatorkubectl apply -f k8s/servicemonitor.yaml

之后就可以通过 kubectl logs -n monitoring <pod-name> -f 查看实时采集数据了。

4. 配置 Prometheus + Grafana

  • ServiceMonitor 会自动被发现,只要你的 Prometheus 实例的 serviceMonitorSelector 标签匹配(如 release: kube-prometheus-stack)。

  • 在 Grafana 中新建 Dashboard,查询指标如 CPU_use_percent、Free_use_percent、Disk_use_percent 即可实时监控所有节点。


在迁移过程中遇到的麻烦与解决办法:

1. kubectl logs 看不到输出

使用kubectl logs pod名没有日志显示。解决方法:在 Dockerfile 里加一行 ENV PYTHONUNBUFFERED=1,或者启动命令用 python -u。

2. Pod 无法访问外网(Webhook、AI API 超时)

监控 Pod 需要通过 HTTPS 调用企业微信和 DeepSeek,但一直 ConnectTimeout。排查发现,Flannel 默认没有开启 SNAT。修改 kube-flannel-cfg ConfigMap,增加 "EnableSNAT": true,重启 Flannel 后解决。

3. MTU 问题导致 TLS 握手超时

Flannel 启用 SNAT 后,普通 HTTP 请求正常,但 HTTPS 依然超时。最后发现是因为 VXLAN 封装导致有效 MTU 不足,TLS Client Hello 包被丢弃。在 Flannel ConfigMap 中设置 "MTU": 1400 后恢复正常。

4. CDN IP 不可达(最隐蔽的坑)

一切配置正确后,Webhook 仍然时好时坏。最终发现 qyapi.weixin.qq.com 解析出的某些 CDN IP 在我们的网络中不可达,而 DNS 轮询到这些 IP 时就会超时。临时方案是使用 hostAliases 将域名固定到一个可达的 IP,长期方案建议内部搭建代理。

5. Grafana Pod 反复重启

Grafana 一直处于 2/3 Running 状态,查看日志发现是 OOM。原来是测试环境节点内存不足,调整资源限制后解决。

6. 时区错误

告警消息中的时间比实际早 8 小时,因为容器默认 UTC。在 Dockerfile 中设置 TZ=Asia/Shanghai 或挂载 /etc/localtime 即可。

只是新手大佬勿喷

AI 智能分析怎么实现的?

当某个指标超过阈值时,程序会:

  1. 从 MySQL(或内存)中取出最近 10 条该资源的历史数据。

  2. 构建如下 Prompt 发送给大模型:

你是一个系统运维专家。当前监控告警如下:- 资源类型:CPU- 当前使用率:99.6%- 告警阈值:80%以下是最近10条该资源的历史数据(时间戳, 使用率):2026-06-29 22:00:07, 1.0%...请分析可能的原因,并给出具体的排查步骤和解决建议。输出格式:简要说明原因,然后列出步骤。
  1. 将返回的建议拼接到告警消息里,随 Webhook 一起发送。

这样运维人员收到的就不仅仅是“CPU 过高”,还附带了大模型推测的原因和排障思路,大大缩短了响应时间。

总结:

这个项目从最初的单机 Python 脚本,一步步演进为支持 K8s 集群监控、Prometheus 可视化、AI 智能分析的完整系统。代码量不大,但覆盖了容器化、配置管理、网络、安全、可观测性等多个领域,非常适合用来学习和二次开发。

最新文章

随机文章