告警不锁局域网:Prometheus+cpolar实现跨网监控触达

# 告警不锁局域网: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到公网可达的最后一公里。**当告警能追着人跑,而不是等人连进内网才看见,监控才真正闭环**。


请使用浏览器的分享功能分享到微信等