从零搭建卫星主站监控平台
搭建卫星主站的监控平台,起因很简单:现有的商用软件太贵,而且不够灵活。我们需要的不只是一个看板,而是一个能融入日常运维流程的工具。
需求分析
第一步不是写代码,而是花了两周时间跟着运维团队轮班,记录他们每天做什么、看什么、哪些操作重复性最高。观察下来,几个核心需求浮出水面:
- 实时信号监控:载波功率、SNR、BER 等关键指标的实时展示和告警
- 远端站管理:批量配置、固件升级、状态查询
- 运维日志:自动记录操作历史,供回溯和审计
- 报表生成:每日/每周/每月运营报告的自动生成
技术选型
前端选了 React + TypeScript,不是因为时髦,而是因为团队最熟悉。后端用 Python(FastAPI),因为需要和大量硬件设备通信,Python 的生态在这方面最成熟。数据库选了 PostgreSQL + TimescaleDB 扩展,处理时序数据得心应手。
消息队列方面,最终选了 MQTT——它本来就是为物联网场景设计的,与卫星终端的通信协议天然契合。
架构设计
整体采用微服务架构,但不是那种教科书式的过度拆分。根据实际业务边界,分成了四个核心服务:
1. 数据采集服务:负责与硬件设备通信,采集遥测数据
2. 告警引擎:基于规则的告警系统,支持多级告警和升级策略
3. Web 服务:API 网关和前端服务
4. 报表服务:异步生成各类运营报告
踩过的坑
最大的一个坑是时区问题。卫星主站的设备来自不同厂家,有的用 UTC,有的用本地时间,有的用 GPS 时间。在数据入库前统一为 UTC,展示时再转换为用户所在时区——这个原则说起来简单,执行起来涉及到整个系统的时间处理逻辑重构。
另一个教训是不要低估网络环境的复杂性。卫星链路本身就有高延迟、有丢包,监控系统如果设计得太"互联网化"(高频请求、大量实时推送),反而会给本就紧张的带宽雪上加霜。
结果
平台上线后运行至今,覆盖了我们管理的所有主站和数百个远端站。最让我欣慰的不是技术指标,而是运维同事的一句话:"现在晚班不用一直盯屏幕了,有问题它会叫我。"
好的工具不是让人看起来更忙,而是让人能把精力放在真正需要判断的事情上。