把 Grafana 监控栈部署到公网
记录我是如何把这套 1.7G 小服务器上的监控栈开放到公网,让任何人都能访问 Demo。
环境信息
- 服务器:阿里云 ECS,1 核 2G(实际可用约 1.7G)
- 系统:CentOS 7
- Docker:≥ 20.10
- Docker Compose:≥ 2.0
开放的端口
| 服务 | 端口 | 说明 |
|---|---|---|
| Grafana | 3000 | 可视化面板,默认账号 admin/admin |
| Prometheus | 9090 | 时序数据库查询界面 |
| Alertmanager | 9093 | 告警管理界面 |
| node-exporter | 9100 | 主机指标暴露端(通常只给 Prometheus 访问) |
阿里云安全组配置
- 登录阿里云控制台 → ECS → 安全组
- 添加入方向规则:
- 协议类型:TCP
- 端口范围:3000/9090/9093/9100
- 授权对象:0.0.0.0/0(或限制为你信任的 IP 段)
- 保存后立即生效
一键启动监控栈
bash
# 克隆项目
git clone <your-repo-url>
cd full_stack_monitoring
# 配置邮件(重要)
vi alertmanager/alertmanager.yml
# 启动所有服务
docker compose up -d验证各服务是否可达
bash
# 查看容器状态
docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
# 查看 Prometheus 抓取目标
curl -s http://localhost:9090/api/v1/targets | python3 -m json.tool
# 测试邮件链路
python3 -c "import smtplib; s=smtplib.SMTP_SSL('smtp.qq.com', 465); s.login('your-qq@qq.com', 'your-auth-code'); print('OK')"本地访问测试
在你的浏览器打开:
http://<阿里云公网IP>:3000默认账号密码都是 admin,首次登录会要求修改密码。
安全建议(必须做)
- 修改 Grafana 默认密码:admin/admin 绝对不能留
- 限制端口访问:如果不需要公开 Prometheus/Alertmanager,安全组只放行 3000
- 考虑加 Nginx 反向代理 + 域名 + HTTPS:见后续文章
- 定期备份 Grafana 面板和 Alertmanager 配置
踩坑记录
- QQ 邮箱 SMTP 必须用域名:
smtp.qq.com:465,不能填 IP,否则 TLS 证书验证失败。 - Alertmanager 0.27 有静默 bug:升级到 0.28.1+ 才正常发邮件。
- docker compose restart 不读新配置:改完 compose 文件后要用
docker compose up -d --force-recreate。
下一步
- [ ] 给 Grafana 配置域名 + HTTPS
- [ ] 用 Nginx 反向代理隐藏端口
- [ ] 接入企业微信/钉钉 Webhook 告警