今天就给大家分享一个我最近开源的项目——Simple System Detection and Alerting for Linux。这是一个轻量级的系统资源监控与告警工具,支持单机运行,也可以一键部署到 Kubernetes 集群。之后还可以在告警时自动调用大模型进行根因分析,把排查建议直接写到告警消息里。
GitHub 地址:https://github.com/y114514-zero/Simple-system-detection-and-alerting---LinuxGitee地址: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
pip install -r requirements.txt
3. 配置
# .env 示例url=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxAPI_KEY=sk-your-deepseek-api-key
4. 运行
终端会实时打印采集数据,当指标超过阈值时,你绑定的企业微信/钉钉/飞书就会收到告警消息(如果有 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
在迁移过程中遇到的麻烦与解决办法:
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 智能分析怎么实现的?
当某个指标超过阈值时,程序会:
从 MySQL(或内存)中取出最近 10 条该资源的历史数据。
构建如下 Prompt 发送给大模型:
你是一个系统运维专家。当前监控告警如下:- 资源类型:CPU- 当前使用率:99.6%- 告警阈值:80%以下是最近10条该资源的历史数据(时间戳, 使用率):2026-06-29 22:00:07, 1.0%...请分析可能的原因,并给出具体的排查步骤和解决建议。输出格式:简要说明原因,然后列出步骤。
将返回的建议拼接到告警消息里,随 Webhook 一起发送。
这样运维人员收到的就不仅仅是“CPU 过高”,还附带了大模型推测的原因和排障思路,大大缩短了响应时间。
总结:
这个项目从最初的单机 Python 脚本,一步步演进为支持 K8s 集群监控、Prometheus 可视化、AI 智能分析的完整系统。代码量不大,但覆盖了容器化、配置管理、网络、安全、可观测性等多个领域,非常适合用来学习和二次开发。