Gojek 如何利用 Cortex 应对其不断增长的规模
Gojek 于 2010 年在印度尼西亚作为摩托车出租车预订呼叫中心成立。如今,这家初创公司已成为一家估值超过百亿美元的独角兽企业,通过其移动钱包 GoPay 和超级应用上的 20 多种产品,为东南亚数百万用户提供服务。想订晚餐?预订按摩?购买电影票?您都可以通过 Gojek 应用轻松完成。
该公司的使命是利用技术创新解决日常挑战。为了在多个市场实现这一目标,Gojek 的系统团队专注于构建一个兼具速度、可靠性和可扩展性的基础设施。到 2019 年,该团队意识到他们需要一个新的监控系统,能够跟上 Gojek 不断壮大的技术组织的发展步伐,这促使他们选择了 Cortex,一个可水平扩展的 Prometheus 实现方案。
产品工程师 Ankit Goel 表示:“我们之前使用 InfluxDB 进行指标存储。开发者通过在 git 仓库中提交 Kapacitor 脚本来配置告警。为了实现高可用性,我们设置了两个 InfluxDB 的中继配置。由于除非购买企业版许可证,否则无法对 InfluxDB 进行水平扩展,我们最终部署了许多带有中继配置的 InfluxDB 集群。”
我们的一些团队生成超过一百万个活跃时序数据。
Ankit Goel,Gojek 产品工程师
寻找更优的监控解决方案
尽管团队引入了自动化设置,但管理所有这些 Influx 实例成为了运维的痛点。此外,一些 Gojek 工程团队需要更大的规模。“我们的一些团队生成超过一百万个活跃时序数据,”Goel 说。客户的另一个常见需求是指标的长期存储。使用 InfluxDB,Gojek 只有 2 周的保留期,增加保留期意味着需要更大的实例。
Gojek 正在寻找一个满足以下要求的更优监控解决方案
- Kubernetes 原生。
- 可水平扩展。
- 开箱即用的高可用性。
- 高可靠性。
- 低运维开销,以便小团队能够管理。
Cortex 满足了所有这些要求,并且还具备 Gojek 团队可以利用的以下特性
- 多租户。
- 可定制和修改,因此可以与 Gojek 现有的工具集成。
- 支持 remote_write。
由于支持 remote_write,Cortex 满足了 Gojek 的一项关键需求:提供监控即服务的能力。Goel 说:“如果使用 Thanos,我们就需要在每个部署的 Prometheus 上部署一个 Thanos Sidecar。因此,本质上,我们需要管理客户端的大部分基础设施。我们更倾向于 Cortex,因为人们只需将他们的指标推送给我们,我们就能将所有指标集中到一个地方。”
Cortex 真正帮助我们的是将监控系统与我们现有的工具集成。我们有很多内部工具,在某些地方,我们需要与监控系统实现非常紧密的集成。
Ankit Goel,Gojek 产品工程师
实施过程
实施工作始于 2019 年 1 月。团队开发了一些工具:一个用于基于令牌认证的简单服务,另一个用于存储团队信息,例如通知渠道和 PagerDuty 策略。完成这些工作后,他们利用 InfluxData Telegraf 的 remote_write 插件将数据写入 Cortex。这使得发送到 InfluxDB 的所有指标也能发送到 Cortex。“因此,从 InfluxDB 迁移到多租户系统并不复杂。由于 Cortex 是多租户的,我们可以将每个 InfluxDB 服务器直接映射到我们的租户,”Goel 说。他们开发了一个内部的 Helm Chart 来部署和管理 Cortex。在约两个月完成定制后,“我们的系统启动并运行起来了,我们将一个团队迁移到了 Cortex 上,”他说。
在最初的版本中,GitOps 是开发者应用告警和创建仪表盘的唯一接口。团队构建了诸如 grafonnet-playground 之类的工具,以便开发者轻松创建仪表盘。由于 Grafana 维护仪表盘的版本历史,开发者也可以使用 UI 创建仪表盘。

Goel 说:“我们需要诸如‘每个团队触发的告警数量’、‘解决这些告警耗时多久’、‘有多少是可操作的、有多少被忽略’等指标。为了衡量这些指标,团队只需创建一个简单的仪表盘,因为 ruler 组件暴露了每个租户的告警指标。业务人员和开发者都发现这些指标非常有用。”

团队构建了一个 CLI 工具,以改善应用告警的用户体验,而无需深入研究 PromQL。Goel 说:“您可以输入一个命令,比如 lens attach alert
,然后告诉它您想附加哪种类型的告警,例如 CPU 告警或 Postgres 告警,然后指定服务名称。这种应用告警的方法存在一些挑战,但我们未来希望转向这种模式。”
团队面临的挑战之一是开发者培训。但 Goel 说:“我们一直知道,如果我们要迁移到 Thanos 或 Cortex,开发者将不得不学习 PromQL。”监控团队与开发者合作,帮助他们理解 PromQL 并迁移他们的图表和告警。
Goel 说,监控团队不时会遇到 Cortex 的问题,但“我们总是通过 Cortex Slack 频道向 Cortex 社区寻求帮助”,“Cortex 社区的活跃成员一直帮助我们解决问题”。如今,Gojek 的 Lens 监控系统拥有 40 多个租户,Cortex 每秒处理约 120 万个样本。采用率通过口碑自然增长。Gojek 目前正在迁移到 Kubernetes,迁移到 Kubernetes 的团队发现 Prometheus 比 InfluxDB 更适合。看到这一成功,其他 Kubernetes 上的团队也自行接入了 Lens。

Goel 最后说:“Cortex 真正帮助我们的是将监控系统与我们现有的工具集成。我们有很多内部工具,在某些地方,我们需要与监控系统实现非常紧密的集成。因此,目标是确保每当创建新的服务或团队时,它们都能自动接入监控平台。开发者部署后,他们的一些系统指标以及所有其他服务的标准指标都会自动发送到平台。”该团队计划在未来六个月内将所有人都迁移到 Lens。
展望未来,Goel 和他的团队有着从监控团队发展成为一个全面的可观测性团队的长期愿景。他说:“我们还想负责 Gojek 的日志和追踪。Loki 与 Cortex 很容易集成,因此未来我们想探索使用 Loki 进行日志管理。”
最初发布于:https://cortexmetrics.io/