# Telegram 子机告警显示外网 IP

**日期**: 2026-06-09

## 摘要

资源告警/恢复/离线 Telegram 消息增加 `IP地址：x.x.x.x(外) y.y.y.y(内)`；外网 IP **优先**取 `servers.domain`（公网 IP 时，如运维登记的 `120.79.11.13`），其次 `extra_attrs`，最后 Agent ipify 探测；内网为 Agent `private_ip` 或 domain 私网地址。

## 动机

告警中内外网均显示 VPC 内网地址（如 172.21.x），无法识别真实公网 IP。

## 涉及文件

- `web/agent/agent.py` — `public_ip` / `private_ip` 心跳字段
- `server/utils/server_alert_ips.py` — 解析与格式化
- `server/infrastructure/telegram/__init__.py` — 告警/恢复/离线模板
- `server/api/websocket.py` — 推送前解析 IP
- `tests/test_server_alert_ips.py`

## 迁移 / 重启

- 需 **升级各子机 Agent** 后外网 IP 才会出现在新心跳中；未升级前外网可能为 `—`
- 中心 API 重启即可加载新 Telegram 模板

## 验证

- `pytest tests/test_server_alert_ips.py tests/test_notify_toggle_sync.py -q`
- 子机 Agent 升级后触发 CPU 告警，Telegram 外网应为公网 IP
