如何监控多个 SaaS 软件项目的运营数据,统一给负责人发送运营日报。

如何监控运营数据?

常见做法

  1. 在业务层入侵式埋点、上报,定时任务程序读取后汇总发送。

  2. 在业务层非入侵式

  • 埋点、上报,定时任务程序读取后汇总发送;
  • 独立分析模块通过读存储数据副本、监控日志离线分析,存储分析结果,定时任务程序读取后汇总发送。

简单的解耦合、无状态和分布式发送日报设计和实现

发送日报常见问题

  • 单个项目 vs 多个项目: 几乎每个项目都要发送, 没有必要重复实现类似逻辑;整个多个项目统一发送同时考虑解耦合
  • 异构运行环境 serverless vs VM vs container: 不同运行环境下统一上报通用格式的数据,集中处理后再发送
  • 统一语言框架 vs 多语言多框架: 和前者类似,实现独立于语言和独立于框架

解决方案架构:

┌─────────────────────────┐
│ Serverless Worker 1 + DB│──┐
└─────────────────────────┘  │  HTTP POST/RPC (API Key)
                             ├──► ┌─────────────────────────┐      ┌─────────────────┐
┌─────────────────────────┐  │    │ Central Worker          │─────►│ Notification    │
│ Serverless Worker 2 + DB│──┤    │ (schedule job @ 10:00)  │      │ (IM/Email)      │
└─────────────────────────┘  │    └─────────────────────────┘      └─────────────────┘
                             │
┌─────────────────────────┐  │
│ Computing Nodes + DB    │──┤
└─────────────────────────┘  │
                             │
                    ....   ──┘

Central Worker 模块

  • 接收 JSON 格式运营数据
  • 发送日报到负责人
  • project 管理
    • 定义有什么项目和应用,运营发送日报发送格式
    • 预定义通用的运营日报 section,如 用户总数、日/周/月增长、日/周/月活跃、日/周/月订阅付费
    • 节假日按欧美还是按大中华区,节假日是否发送
    • 上报接口使用的 API 验证 key
  • project & contact 管理, 定义日报使用什么信道、发送给谁

定义通用接收上报数据 JSON 格式

project: string <project name>
data: array, `[{"key.name": <data point>},{"key.name": <data point>}, ...]`
timestamp: float64, <unix timestamp in Reporting interval granularity hours/days>

定义日报模板

# <hard-coded xxx project>

## <hard-coded section name>

- DAU: ${key.name}
- Installs: {{ `select sum(foo) from <project name as table name>` }}
- Uninstalls: {{ `select sum(bar) from <project name as table name>` }}

可按需实现一个简陋的带计算逻辑模板:

  • hard-coded ... 部分的直接写死
  • ${key.name} 的从存储按 project 和 key.name 组合查询
  • {{ ... }} 聚合计算后再填充模板

如何扩展

水平扩展

  • Central Worker 支持几乎无限个 project 接入
  • Central Worker 和相关存储过载时,可以部署多套,修改 project 上报 HTTP/RPC 入口即可

安全性

  • Central Worker 改动频率低,设置单管理员用户或写死特定 SSO 用户统一管理即可
  • 单个 project 泄漏对其他项目无影响
  • 单个信道密钥泄漏,对其他项目无影响,重置即可

智能洞察

  • month-to-month 环比 year-to-year 同比:保留日报每次发送历史,提供接口给大模型分析,在日报基础上实现历史分析,发送环比月报和同比年报
  • be-better 让大模型根据 日月年报运营数据提供运营改进建议