4. 医疗SaaS平台可观测性体系构建
医疗SaaS平台的可观测性不是“装几个监控面板”,而是围绕患者服务链路建立一套可回答问题的证据体系:当前是否可用、慢在哪一段、影响哪些租户与业务、是否触及合规与数据安全边界、以及是否已经违反对医院客户承诺的服务水平。医疗场景的特殊性在于:挂号、缴费、报告查询、影像调阅、处方流转等链路往往跨多个服务与外部接口,且对时延、可用性和数据完整性要求高;一旦出现故障,既要快速恢复,也要能追溯“谁在什么时间访问了什么数据”。因此,可观测性体系需要把指标、日志、链路追踪、告警、健康检查与SLO/SLI设计串成一条闭环。
一、四类信号的定位与医疗场景下的采集重点
指标(Metrics)适合回答“整体趋势与阈值”:如接口QPS、P95/P99时延、错误率、数据库连接池使用率、消息积压量、缓存命中率。医疗SaaS中建议按“租户+业务域+接口”三个维度打标签,例如tenant_id、domain=registration|payment|report|imaging、endpoint,否则只能看到平台整体,无法判断是某一家医院还是全部医院受影响。
日志(Logs)适合回答“具体发生了什么”:应用异常栈、外部接口返回码、审计事件、数据变更记录。医疗场景必须区分运行日志与审计日志:运行日志用于排障,审计日志用于合规追溯,二者保留周期、访问权限和脱敏策略不同。运行日志中的患者姓名、身份证号、手机号必须脱敏,例如只保留patient_id哈希值与masked_phone。
链路追踪(Traces)适合回答“慢在哪一跳”:一次挂号请求经过网关、鉴权、挂号服务、排班服务、支付网关、短信服务,TraceID贯穿全链路。医疗SaaS中外部接口(医保、支付、短信、LIS/PACS)往往是时延大头,需要在Span中标记peer.service与external=true,便于区分内部耗时与外部依赖耗时。
健康检查(Health Check)适合回答“实例能不能接流量”:分为存活探针(liveness)与就绪探针(readiness)。医疗SaaS的就绪检查不能只返回进程存活,还应检查数据库连接、Redis、关键外部依赖的轻量探测;但外部依赖探测要设置短超时与降级策略,避免依赖抖动导致全部实例被摘除。
二、SLI/SLO设计:把“医院能感知的质量”翻译成可计算指标
SLI是测量值,SLO是目标值。医疗SaaS建议从四个维度定义SLI:可用性(成功请求数/总请求数)、时延(P95或P99响应时间)、成功率(业务成功而非仅HTTP 200,例如挂号是否真正占号成功)、数据新鲜度(报告、影像、检验结果从产生到可查询的延迟)。
以“报告查询”为例,可定义SLI为:report_query_success_ratio = 成功返回报告数 / 报告查询请求数,SLO设为月度99.9%;时延SLI为P95(report_query_duration_seconds),SLO设为P95≤800ms。错误预算=1-99.9%=0.1%,即每月约43分钟不可用。当错误预算消耗超过50%时触发预警,超过80%时冻结非必要发布。
医疗场景还要增加“租户维度SLO”:平台整体99.9%不代表每家医院都达标。建议按tenant_id计算SLI,对重点三甲医院单独设置SLO,避免被长尾租户平均掉。
三、告警设计:从“有告警”到“告警可行动”
告警必须可行动、可分级、可抑制。建议分三级:P1为业务中断(如挂号成功率低于95%持续5分钟、支付回调积压超过1000条),立即电话通知;P2为性能劣化(P95超过1.5倍SLO持续10分钟),企业微信/钉钉通知;P3为容量预警(磁盘使用率>80%、连接池>85%),工单跟进。
医疗SaaS告警要避免“一个租户抖动,全平台告警”。做法是按租户聚合,设置for持续时间,并配置抑制规则:当P1已触发时,抑制同链路的P2/P3。告警内容应包含:影响租户、影响接口、当前值、SLO阈值、最近一次变更、TraceID样例,便于值班人员直接下钻。
四、健康检查与发布门禁
健康检查要与发布流程结合。就绪探针通过后才接入流量;发布过程中若新实例就绪失败,自动回滚。医疗SaaS的就绪检查建议包含:数据库连接可用、Redis可用、关键配置加载成功、外部依赖探测(超时200ms,失败不直接判定实例不可用,而是标记降级)。
readinessProbe:
httpGet:
path: /health/ready
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 2
failureThreshold: 3
livenessProbe:
httpGet:
path: /health/live
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 5
五、落地检查清单(可直接用于评审)
| 维度 | 检查项 | 医疗场景要求 |
|---|---|---|
| 指标 | 是否按租户/业务域/接口打标签 | 能定位到具体医院与具体业务 |
| 日志 | 运行日志是否脱敏、审计日志是否独立留存 | 满足合规追溯与最小权限访问 |
| 链路 | TraceID是否贯穿网关到外部依赖 | 能区分内部耗时与医保/支付外部耗时 |
| 告警 | 是否分级、抑制、包含TraceID与租户信息 | P1可电话触达,避免租户抖动放大 |
| 健康检查 | 就绪探针是否检查关键依赖并支持降级 | 发布门禁与自动回滚可用 |
| SLO | 是否按租户定义SLI与错误预算 | 重点医院单独SLO,预算消耗驱动发布冻结 |