SentinelBot 是一个功能完整的监控告警系统,将 Prometheus + Alertmanager + Telegram Bot 完美结合,为运维人员提供:
- 🚀 秒级告警推送:从告警触发到手机收到通知仅需 2-5 秒
- 📊 交互式监控面板:在 Telegram 中实时查询服务器资源状态
- 🎯 智能告警路由:支持按严重程度、项目分组的告警策略
- 🔐 MFA 验证码:集成 TOTP 验证码生成功能
- 🌐 多项目支持:统一管理多个项目的服务器和数据库
- ✅ CPU 使用率(5分钟平均,含趋势箭头)
- ✅ 内存占用(基于
MemAvailable,更准确) - ✅ 磁盘空间(支持多分区,自动识别最紧张分区)
- ✅ 系统负载(Load1 指标)
- ✅ 磁盘 Inode 使用率
- ✅ AWS RDS CPU 利用率
- ✅ 数据库连接数
- ✅ 剩余存储空间
- ✅ 可用内存
| 级别 | 告警类型 | 阈值 | 持续时间 | 重复间隔 |
|---|---|---|---|---|
| 🔴 Critical | 实例宕机 | up == 0 | 10s | 15分钟 |
| 🔴 Critical | CPU 严重 | > 90% | 5分钟 | 30分钟 |
| 🔴 Critical | 内存即将耗尽 | > 95% | 5分钟 | 30分钟 |
| 🟠 Warning | CPU 使用率高 | > 80% | 5分钟 | 2小时 |
| 🟠 Warning | 内存使用率高 | > 85% | 5分钟 | 2小时 |
| 🟠 Warning | 磁盘空间不足 | > 85% | 10分钟 | 2小时 |
- ⚡ 宕机告警零延迟:
group_wait: 0s,立即推送 - 🛡️ 防刷屏机制:超过 10 条告警自动折叠
- 🌍 时间本地化:UTC 自动转换为北京时间(CST)
- 🔗 快捷操作:一键查看节点详情、项目汇总
🏠 主菜单
├── 🔐 MFA 验证码
├── 📂 浏览项目服务器
│ ├── 按项目分组查看
│ ├── 查看节点详细指标
│ └── 查看 RDS 数据库状态
├── 📊 查看项目汇总
│ ├── 全部资源
│ └── 仅异常节点
└── 🚨 当前告警
- 实时指标:CPU、内存、磁盘、负载
- 趋势分析:
↗️ 上升 /↘️ 下降 / ➡️ 平稳 - 磁盘分区:列出所有挂载点的使用情况
- 一键刷新:随时获取最新数据
- 倒计时进度条:可视化显示剩余时间
- 一键刷新:无需重新发送命令
- 权限控制:仅管理员可用
- Docker & Docker Compose
- Telegram 账号
- 被监控服务器需安装 Node Exporter
git clone https://github.com/7Ese/SentinelBot.git
cd SentinelBotcp .env.example .env
cp monitoring/.env.example monitoring/.env编辑 monitoring/.env,填入你的配置:
# Telegram Bot Token(从 @BotFather 获取)
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
# 管理员 User ID(向 @userinfobot 发送消息获取)
TELEGRAM_ADMIN_ID=123456789
# 告警推送的群组/频道 ID(将 Bot 加入群组后获取)
TELEGRAM_CHAT_ID=-1001234567890
# MFA 密钥(可选)
MFA_SECRET=YOUR_TOTP_SECRET
# AWS 凭证(如需监控 RDS)
AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID_HERE
AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY_HERE编辑 monitoring/prometheus/prometheus.yml:
scrape_configs:
- job_name: 'nodes'
static_configs:
- targets:
- '10.0.1.10:9100' # 替换为你的服务器 IP
labels:
project: 'MyProject'
role: 'web'
alias: 'web-server-01'./manage.sh start在 Telegram 中向你的 Bot 发送 /start,如果收到欢迎消息,说明部署成功!
访问 Web 界面:
- Prometheus: http://localhost:9090
- Alertmanager: http://localhost:9093
- Grafana: http://localhost:3000 (默认账号:
admin/admin123)
在每台需要监控的服务器上安装 Node Exporter:
# 下载 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xvf node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64
# 启动服务
./node_exporter &
# 验证(应该能看到指标输出)
curl http://localhost:9100/metrics推荐使用 Systemd 管理:
sudo tee /etc/systemd/system/node_exporter.service > /dev/null <<EOF
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter- 确保 AWS 凭证有 CloudWatch 读取权限
- 编辑
monitoring/cloudwatch/rds-config.yml - 在
sentinel/sentinel.py中添加你的 RDS 实例:
RDS_INSTANCES: List[Dict[str, str]] = [
{"id": "my-rds-instance", "project": "MyProject", "alias": "生产数据库"},
]编辑 monitoring/prometheus/rules/basic-alerts.yml:
- alert: CustomAlert
expr: your_prometheus_query > threshold
for: 5m
labels:
severity: warning
annotations:
summary: "告警摘要"
description: "详细描述"# 启动所有服务
./manage.sh start
# 停止所有服务
./manage.sh stop
# 重启服务
./manage.sh restart
# 查看服务状态
./manage.sh status
# 查看实时日志
./manage.sh logs| 命令 | 描述 |
|---|---|
/start |
显示主菜单 |
/mfa 或 /FA |
获取 MFA 验证码 |
所有操作都通过内联按钮完成,无需记忆命令:
- 浏览项目服务器:选择项目 → 查看节点列表 → 点击节点查看详情
- 查看项目汇总:选择项目 → 查看所有资源或仅异常节点
- 当前告警:查看所有 Firing 状态的告警
┌─────────────────────┐
│ 被监控服务器 │
│ (Node Exporter) │
│ :9100 │
└──────────┬──────────┘
│
│ scrape
▼
┌─────────────────────┐ ┌──────────────────┐
│ Prometheus │─────▶│ Alertmanager │
│ :9090 │ │ :9093 │
└──────────┬──────────┘ └─────────┬────────┘
│ │
│ query │ webhook
│ ▼
│ ┌──────────────────┐
│ │ SentinelBot │
│ │ (Flask:5000) │
│ │ (Telegram) │
│ └─────────┬────────┘
│ │
▼ │
┌─────────────────────┐ │
│ Grafana │ │
│ :3000 │ │
└─────────────────────┘ │
▼
┌──────────────────┐
│ Telegram API │
└──────────────────┘
| 组件 | 版本 | 说明 |
|---|---|---|
| Prometheus | latest | 指标采集与查询 |
| Alertmanager | latest | 告警路由与推送 |
| Grafana | latest | 数据可视化 |
| CloudWatch Exporter | latest | AWS RDS 监控 |
| Python | 3.9+ | Bot 开发语言 |
| python-telegram-bot | 13.15 | Telegram Bot SDK |
| Flask | 2.3.3 | Webhook 服务器 |
| Docker Compose | - | 容器编排 |
检查环境变量是否正确配置:
cd monitoring
docker-compose logs sentinel-bot- 确保服务器防火墙开放 9100 端口
- 检查
prometheus.yml中的 IP 地址是否正确 - 手动测试:
curl http://your-server:9100/metrics
- 检查 Alertmanager 配置:
http://localhost:9093 - 确保 Bot 在群组中有发送消息权限
- 查看 Webhook 日志:
docker-compose logs sentinel-bot
- 将 Bot 加入群组
- 向群组发送一条消息
- 访问:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates - 在返回的 JSON 中找到
chat.id
- 支持服务发现(Consul / Kubernetes)
- 接入长期存储(Thanos / VictoriaMetrics)
- AI 辅助根因分析
- 多租户支持
- 更多 Exporter(MySQL、Redis、Nginx)
- Web 管理后台
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目基于 MIT License 开源。
- Prometheus - 强大的监控系统
- Alertmanager - 告警管理
- python-telegram-bot - Telegram Bot SDK
- Grafana - 数据可视化平台
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!
Made with ❤️ by 7Ese