身份管理平台的可观测性实践:ForgeRock的Prometheus之旅
概述
ForgeRock 是一家提供身份和访问管理 (IAM) 解决方案的国际软件公司,其平台由多个核心产品构成。在迁移到云原生架构(Docker 和 Kubernetes)之前,ForgeRock 面临着监控碎片化的挑战:每个产品都提供不同的监控接口(如 SNMP、JMX、LDAP、REST API),导致整体监控复杂且需要多套工具。为解决此问题,ForgeRock 选择了 Prometheus 作为统一的监控基础,这不仅简化了平台内部的质量工程与问题诊断,也为其客户提供了一套标准化、强大的可观测性方案。
核心概念
数据模型适配:维度 vs. 层次
ForgeRock 在迁移过程中遇到的一个关键技术挑战是监控数据模型的差异。Prometheus 及其生态系统(如 Micrometer)倾向于使用维度 (Dimensions) 模型,即通过标签(Labels)来区分同一指标的不同维度(例如 method="GET", status="200")。而 ForgeRock 内部原有的指标体系更习惯于层次 (Hierarchical) 结构,即通过指标名称本身来嵌套信息(例如 requests.get.success)。
为兼容这两种模型,ForgeRock 并未选择妥协,而是构建了一个自定义的适配层。他们基于 Micrometer 接口进行了封装,并调整了 DropWizard Prometheus Exporter。这使得他们的单一插桩代码能够同时以维度或层次结构暴露指标,从而平滑地支持了向 Prometheus 的过渡,同时保留了向后兼容性。
分层监控架构
在向“身份即服务”(IDaaS) 模式演进的过程中,ForgeRock 构建了清晰的两级 Prometheus 监控架构:
- 租户级监控:为每个客户(租户)环境部署独立的 Prometheus 实例,收集该环境的详细指标,并提供给客户自行监控和定制 Grafana 仪表盘。
- 中央服务监控:构建一个中心化的 Prometheus 服务,通过 Remote Write 或类似机制汇聚所有租户环境的关键指标。这使得 ForgeRock 的 SRE 团队能够从全局视角掌握所有客户环境的整体健康状况和运行模式。
这种架构既满足了客户自治的需求,也保障了平台提供商的全局可观测性与运维效率。
实践
过渡路径
ForgeRock 的迁移并非一蹴而就,而是采取了务实且渐进的步骤:
- 统一插桩库:选择 DropWizard 作为基础指标收集库,并统一应用于所有产品。
- 适配与集成:解决 Prometheus 的维度模型与自身层次模型的冲突,通过构建自定义适配层(基于 Micrometer 接口和改造后的 Exporter)来实现灵活暴露。
- 提供开箱即用的监控:开发一系列示例 Grafana 仪表盘,随产品一起提供给客户,帮助他们快速启动监控,并允许他们进行自定义。
- 保持兼容性:虽然强烈推荐使用 Prometheus,但 ForgeRock 仍然保留了旧有的 SNMP、JMX 等监控接口,以确保平滑过渡。
监控驱动的质量改进
切换到 Prometheus 后,一个显著的改进发生在质量工程(QE)团队的工作流程中:
- 默认启用监控:QE 团队在压力测试和性能测试中默认启用 Prometheus 指标收集。
- 定制测试仪表盘:他们为特定的性能测试场景定制 Grafana 仪表盘,使测试结果可视化、可量化。
- 定位性能瓶颈:通过分析监控指标,QE 团队能够更精准地向工程团队指出性能问题所在,大幅提升了问题诊断的效率。
- 工程团队采纳:工程团队在复现和修复问题时也开始依赖 Prometheus 数据,进一步扩展了相关仪表盘。这一过程形成了一个正向循环:测试发现问题 -> 监控提供洞察 -> 工程修复并验证,最终提升了产品质量。
SRE 要点
与可靠性、可观测性的关联
ForgeRock 的实践是利用监控提升可靠性 (Reliability) 的典范。统一的监控面板为他们的 SRE/QA 团队提供了清晰的可观测性 (Observability),使他们能够主动发现性能退化、验证修复效果,并深入理解系统在负载下的行为。这种基于数据的决策文化,直接减少了“猜测式”排错,提升了平均修复时间 (MTTR)。
最佳实践与常见反模式
- 最佳实践:
- 统一监控接口:为复杂平台提供一致的监控体验,降低内外部用户的使用成本。
- 渐进式迁移:保持向后兼容,鼓励但不强制用户迁移,减少迁移阻力。
- 监控驱动开发:将监控能力的建设融入开发和测试流程,让“可观测性”从一开始就成为产品的一部分。
- 分层与聚合:设计多级监控架构,平衡客户自治与平台集中运维的需求。
- 常见反模式(ForgeRock 规避了这些):
- 技术锁定:强制要求客户使用某一种特定的监控后端。
- 监控孤岛:不同产品或团队使用完全割裂的监控系统,无法形成全局视图。
- 事后补救:在产品开发后期才考虑如何监控,导致指标设计不合理或缺失。
相关指标 (SLI/SLO/SLA)
虽然访谈中未明确提及具体的 SLI/SLO,但 ForgeRock 的实践为定义身份平台的 SLO 提供了坚实的数据基础。例如,他们可以轻松地从 Prometheus 中获取并定义以下 SLI:
- 身份认证请求成功率:
sum(rate(auth_requests_total{status=~"2.."}[5m])) / sum(rate(auth_requests_total[5m])) - 身份令牌颁发延迟:
histogram_quantile(0.99, rate(token_issuance_duration_seconds_bucket[5m])) - 目录服务查询可用性:基于健康检查端点的成功率。
这些 SLI 可进一步与客户签订的 SLO 和 SLA 挂钩,从而将技术指标转化为商业承诺,并指导 Error Budget 的消费。