专访 ForgeRock

2019年6月18日作者 Simon Pasquier

我们将继续对 Prometheus 用户进行系列访谈,本期我们邀请了来自 ForgeRock 的 Ludovic Poitou,他将与我们分享他们的监控之旅。

您能介绍一下您自己以及 ForgeRock 的业务吗?

我是 Ludovic Poitou,ForgeRock 的产品管理总监,常驻法国格勒诺布尔附近。ForgeRock 是一家国际身份和访问管理软件公司,拥有超过500名员工,于2010年在挪威成立,目前总部位于美国旧金山。我们提供解决方案,以保护与客户、员工、设备和物联网的每一次在线互动。我们拥有超过800家客户,涵盖从金融公司到政府服务等多个领域。

在使用 Prometheus 之前,您的监控体验是怎样的?

ForgeRock 身份平台一直提供监控接口。但该平台由4个主要产品组成,每个产品都有不同的选项。例如,目录服务产品通过 SNMP、JMX 或 LDAP 提供监控信息,最新版本甚至支持通过 HTTP 的 RESTful API。而其他产品仅支持 REST 或 JMX。因此,监控整个平台非常复杂,需要能够集成这些协议的工具。

你们为什么决定研究 Prometheus?

我们需要一个统一且通用的接口来监控我们所有的产品,但同时为了向后兼容,也需要保留现有的接口。

我们开始使用 DropWizard 在所有产品中收集指标。与此同时,我们开始将这些产品迁移到云端,并在 Docker 和 Kubernetes 中运行。因此,Prometheus 成了显而易见的选择,因为它与 Kubernetes 集成良好,部署简单,并且集成了 Grafana。我们也考虑过 Graphite,虽然我们的产品也增加了对它的支持,但我们的客户很少使用它。

你们是如何过渡的?

我们的一些产品已经在使用 DropWizard 库,并且我们决定在所有产品中使用一个通用的库,所以 DropWizard 是编写监控埋点的明显选择。但很快,我们就遇到了数据模型的问题。Prometheus 接口使用维度(dimensions),而我们的指标模型倾向于层级结构(hierarchical model)。我们也开始使用 Micrometer,并很快遇到了一些限制。因此,我们最终构建了一个自定义实现,使用 Micrometer 接口来收集我们的指标。我们改造了 DropWizard Metrics 以满足我们的需求,并对 DropWizard Prometheus exporter 进行了调整。现在,通过单一的监控埋点,我们既可以按维度暴露指标,也可以按层级结构暴露。然后,我们开始构建示例 Grafana 仪表盘,我们的客户可以安装和自定义这些仪表盘,以拥有自己的监控视图和警报。

Access Management ForgeRock's Grafana dashboard

我们确实继续提供以前的接口,但我们强烈鼓励客户使用 Prometheus 和 Grafana。

切换后你们看到了哪些改进?

最初的好处来自我们的质量工程(Quality Engineering)团队。当他们开始测试我们对 Prometheus 的支持和不同的指标时,他们开始在所有的压力和性能测试中默认启用它。他们开始为特定的测试自定义 Grafana 仪表盘。不久之后,他们就开始通过各种指标来指出和解释一些性能问题。

在为了理解和修复问题而复现问题时,我们的工程团队也使用了 Prometheus,并扩展了一些仪表盘。整个过程让我们得到了一个更好的产品,并且对哪些指标对于客户的监控和可视化至关重要有了更深入的理解。

您认为 ForgeRock 和 Prometheus 的未来会是怎样?

ForgeRock 已经开始努力将其产品和解决方案作为服务来提供。随着这一转变,监控和警报变得更加重要,当然,我们的监控基础设施是基于 Prometheus 的。我们目前有两级监控:一级是针对每个租户(tenant),我们使用 Prometheus 收集单个客户环境的数据,并且可以为该客户暴露一组指标。但我们也建立了一个中央 Prometheus 服务,所有已部署租户的指标都会被推送到这里,这样我们的 SRE 团队就可以非常清楚地了解所有客户环境的运行情况和方式。总的来说,我想说 Prometheus 已经成为我们的主要监控服务,它既服务于我们的本地(on-premise)客户,也服务于我们自己运营的“即服务”解决方案。