Skip to content

把 Grafana 监控栈部署到公网

记录我是如何把这套 1.7G 小服务器上的监控栈开放到公网,让任何人都能访问 Demo。

环境信息

  • 服务器:阿里云 ECS,1 核 2G(实际可用约 1.7G)
  • 系统:CentOS 7
  • Docker:≥ 20.10
  • Docker Compose:≥ 2.0

开放的端口

服务端口说明
Grafana3000可视化面板,默认账号 admin/admin
Prometheus9090时序数据库查询界面
Alertmanager9093告警管理界面
node-exporter9100主机指标暴露端(通常只给 Prometheus 访问)

阿里云安全组配置

  1. 登录阿里云控制台 → ECS → 安全组
  2. 添加入方向规则:
    • 协议类型:TCP
    • 端口范围:3000/9090/9093/9100
    • 授权对象:0.0.0.0/0(或限制为你信任的 IP 段)
  3. 保存后立即生效

一键启动监控栈

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,首次登录会要求修改密码。

安全建议(必须做)

  1. 修改 Grafana 默认密码:admin/admin 绝对不能留
  2. 限制端口访问:如果不需要公开 Prometheus/Alertmanager,安全组只放行 3000
  3. 考虑加 Nginx 反向代理 + 域名 + HTTPS:见后续文章
  4. 定期备份 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 告警

Powered by VitePress