# 告警不锁局域网:Prometheus+cpolar实现跨网监控触达
**凌晨2点,某跨境电商公司的值班手机突然响起——不是生产环境报警,而是运维工程师的消息:“VPN连不上,我看不了Grafana,你们谁有内网权限?”**
这套场景暴露了自建监控体系的经典盲区:**Prometheus能监控一切,唯独监控不了自己被困在内网里**。指标再全、告警规则再精细,只要告警消息出不了局域网,值班人员就是睁眼瞎。
Prometheus+cpolar的组合,解决的正是**“监控可达性”问题**——不是让Prometheus跑得更快,而是让它的告警能从内网走到任何人的手机屏幕上。
## 一、问题锚定:内网监控的“最后一公里”失联
Prometheus生态已是云原生监控的事实标准:**Node Exporter采集主机指标,Prometheus Server存储与计算,AlertManager路由与发送,Grafana可视化**。这一链条在局域网内运转丝滑,但一旦离开办公室网络,四个环节全部断联:
- **Grafana大盘**打不开,无法查看历史趋势
- **AlertManager**的Webhook发不到公网接收端
- **Prometheus API**无法被外部巡检系统调用
- 多分支机构的统一监控视图需要公网汇聚
**问题的核心不是监控能力,而是监控服务的网络位置**。Prometheus部署在企业内网,就等于给监控系统加了一把“地理位置锁”。
## 二、方案解耦:cpolar只做流量管道,不碰监控数据
cpolar在本方案中的角色非常克制:**它不存储指标,不解析告警,不介入认证——只把内网的9090(Prometheus)、9093(AlertManager)、3000(Grafana)等端口通过加密隧道映射到公网网关**。
**部署流程**(以Grafana为例):
```bash
# 1. 安装cpolar(Linux/macOS/Windows均支持)
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
# 2. 启动隧道指向Grafana端口(默认3000)
cpolar http 3000
<"abb.p5k3.org.cn">
<"avg.p5k3.org.cn">
<"avr.p5k3.org.cn">
# 3. 获取公网访问地址
Forwarding https://grafana-2026.cpolar.top -> http://localhost:3000
```
此时,**任何人在任何网络下打开`https://grafana-2026.cpolar.top`,都能看到内网Grafana的登录页**。后续配置LDAP/钉钉扫码登录即可。
**关键设计**:cpolar免费套餐提供随机域名,24小时轮换,适合临时排查;**生产环境建议保留固定二级子域名**(需官网预留),配置一次后长期不变。
## 三、告警出网:AlertManager如何把消息推给“外人”
AlertManager默认告警接收端(钉钉/企微/飞书)均需公网回调地址。若AlertManager跑在内网,**云端的钉钉机器人无法主动访问内网Webhook**——这是典型的反向通信困境。
**解决方案**:**cpolar映射AlertManager的Webhook端口,让云端接收端主动拉取**?不,方向反了。正确的解法是**AlertManager主动推送至公网接收网关**。
**配置示例**(钉钉告警):
```yaml
# alertmanager.yml
receivers:
- name: 'dingtalk'
webhook_configs:
- url: 'http://dingtalk-proxy.cpolar.top/dingtalk/webhook' # cpolar映射的公网地址
send_resolved: true
```
**这个公网地址背后**:可以是自建的钉钉网关服务,也可以是云函数,甚至是一个简单的Flask应用接收POST后转发至钉钉官方接口。**cpolar在这里只负责让内网的AlertManager能找到这条出站路径**。
## 四、双工增强:让公网系统能“拉”内网指标
有些场景需要**公网巡检系统主动调用内网Prometheus API**,例如:
- 总部统一监控全国分支机构的Thanos Receiver
- 自动化混沌工程平台定时触发内网故障演练
- 第三方SLA监测服务验证接口可用性
此时需要**将Prometheus API端口(默认9090)通过cpolar暴露为公网HTTPS地址**。
```bash
cpolar http 9090
# 获得 https://prometheus-api.cpolar.top
```
<"evs.p5k3.org.cn">
<"vrb.p5k3.org.cn">
<"muy.p5k3.org.cn">
公网系统即可通过此地址执行PromQL查询:
```bash
curl https://prometheus-api.cpolar.top/api/v1/query?query=up{job=~"node.*"}
```
**安全建议**:公网暴露的监控接口务必启用`basic_auth`或携带Bearer Token,配置在Prometheus的`web-config.yml`中。
## 五、三个必须知道的边界
**第一,cpolar不替代VPN,它解决的是“轻量级远程访问”**。对于单兵作战、应急排查、中小团队,启动隧道比拉起整个OpenStack快两个数量级;但对于百人以上研发团队的常态化办公,VPN仍是合规要求。
**第二,随机域名不适合长期告警接收端**。钉钉/企微机器人后台一旦配置回调地址,24小时后cpolar更换域名,告警即失联。**固定子域名是生产级告警的最低门槛**。
**第三,公网暴露≠公网安全**。建议组合以下措施:
- Grafana启用强制HTTPS(cpolar默认提供)
- 配置Grafana的`allowed_origins`与`cookie_secure`
- Prometheus接口启用`--web.enable-admin-api`仅在调试时开
- 重要面板叠加钉钉扫码登录或OAuth2
## 六、场景复盘:跨境电商公司的监控“出狱”
该跨境电商公司最终方案:
- **深圳机房**:Prometheus + AlertManager + Grafana
- **cpolar**:开通三个隧道,分别映射9090、9093、3000端口,绑定固定子域名
- **钉钉机器人**:接收端地址指向cpolar映射后的AlertManager Webhook URL
- **运维团队**:成员遍布深圳、广州、长沙,手机4G网络随时打开`grafana.公司域名.cn`查看大盘
**效果**:**某次凌晨IDC光缆被挖断,值班人员在滴滴上打开Grafana确认只有单节点离线,未触发全链路告警,淡定通知机房次日修复**。监控数据成功走出了内网,但从未走出公司可控的管道。
**Prometheus的使命是“监控一切”,但不包括它自己所在的网络位置**。cpolar做的不是颠覆,而是补齐——补齐那个从localhost到公网可达的最后一公里。**当告警能追着人跑,而不是等人连进内网才看见,监控才真正闭环**。