Cortex:多租户、可横向扩展的Prometheus即服务

2022-04-15 00:00:00 序列 数据 自己的 提供 租户

Cortex:多租户、可横向扩展的Prometheus即服务

作者:Luc Perkins

Prometheus是用于监控和可观察性的标准开源解决方案之一。 Prometheus于2012年起源于SoundCloud,迅速获得广泛采用,后来成为首批CNCF项目之一,第二个毕业项目(仅次于Kubernetes)。它被许多具有前瞻性思维的公司用于生产,包括DigitalOcean、Fastly和Weaveworks等重量级公司,并拥有自己的年度会议PromCon。

Prometheus:强大但有意地限制

Prometheus之所以成功,部分原因是核心Prometheus服务器及其各种补充程序,如Alertmanager、Grafana和导出生态系统,形成了一个引人注目的端到端解决方案,解决了一个至关重要的难题。但是,Prometheus并没有提供你期望从一个成熟的“即服务”平台中获得的一些功能,例如多租户、身份验证和授权以及内置的长期存储。

Cortex于9月作为沙箱项目加入CNCF,是一个开源的Prometheus即服务平台,旨在填补这些空白,从而提供完整、安全、多租户的Prometheus体验。我会在以下说很多关于Cortex的,首先,让我们短暂地游览更熟悉的Prometheus世界。

为何选择Prometheus?

作为CNCF开发者的倡导者,我有机会熟悉Prometheus社区和Prometheus作为工具(主要研究文档和Prometheus Playground)。由于各种原因,它的巨大成功对我来说并不奇怪:

  • Prometheus实例易于部署和管理。我特别喜欢近乎即时的配置重新加载,以及所有Prometheus组件都提供静态二进制文件。
  • Prometheus提供了简单易用的指标展示格式,可以轻松编写自己的指标导出器。这种格式甚至通过OpenMetrics项目(近也加入了CNCF沙箱)变成了开放标准。
  • Prometheus提供了简单,但功能强大的基于标签的查询语言PromQL,用于处理时间序列数据。我觉得PromQL非常直观。

为何选择Prometheus即服务?

早期,Prometheus的核心工程师做出明智的决定,让Prometheus保持简洁和可组合。从一开始,Prometheus设计成可以很好地完成一小部分工作,并与其他可选组件无缝协作(而不是让Prometheus负担过重,增加了一系列硬编码功能和集成)。以下是Prometheus设计范围外的一些内容:

  • 长期存储 - 单个Prometheus实例提供持久存储时间序列数据,但它们不能作为分布式数据存储系统,不提供像具有跨节点复制和自动修复等功能。这意味着,耐久性保证仅限于单台机器。幸运的是,Prometheus提供了一个远程写入API,可用于将时间序列数据传输到其他系统。
  • 全局数据视图 - 如上面要点所述,Prometheus实例充当隔离数据存储单元。Prometheus实例可以联邦,但这会给Prometheus设置增加很多复杂性,而且Prometheus不是设计为分布式数据库。这意味着,没有简单的途径来实现时间序列数据的单一,一致的“全局”视图。
  • 多租户 - Prometheus本身没有的租户概念。这意味着,它无法对特定于租户的数据访问和资源使用配额等事物,提供任何形式的细粒度控制。

为何选择Cortex?

作为Prometheus即服务平台,Cortex充分填补所有这些关键缺口,为即使是苛刻的监控和可观察性使用案例,提供了完整的开箱即用解决方案。

  • 它支持四种开箱即用的长期存储系统:AWS DynamoDB、AWS S3、Apache Cassandra和Google Cloud Bigtable。
  • 它提供了Prometheus时间序列数据的全局视图,其中包括长期存储中的数据,极大地扩展了PromQL用于分析目的的有用性。
  • 它的核心支持多租户。通过Cortex的所有Prometheus指标都与特定租户相关联。

Cortex的架构

Cortex具有基于服务的设计,其基本功能分为单个用途组件,可以独立扩展:

  • Distributor - 使用Prometheus的远程写入API处理由Prometheus实例写入Cortex的时间序列数据。传入数据会自动复制和分片,并且并行发送到多个Cortex Ingester。
  • Ingester - 从distributor节点接收时间序列数据,然后将该数据写入长期存储后端,压缩数据到Prometheus块以提高效率。
  • Ruler - 执行规则并生成警报,将它们发送到Alertmanager(Cortex安装包括Alertmanager)。
  • Querier - 处理来自客户端(包括Grafana仪表板)的PromQL查询,对短期时间序列数据和长期存储中的样本进行抽象。

这些组件每一个都可以独立管理,这是Cortex可扩展性和运营的关键。你可以在下面看到Cortex及与其交互的系统的基本图表:

如图所示,Cortex“完成”Prometheus监控系统。要适应现有的Prometheus安装,你只需重新配置Prometheus实例以远程写入Cortex群集,Cortex将处理其余部分。

多租户

单租户系统往往适用于小型用例和非生产环境,但对于拥有大量团队、用例和环境的大型组织而言,这些系统变得站不住脚(没有双关语意)。为了满足这些大型组织的严格要求,Cortex不是作为附加组件或插件提供多租户,而是作为头等功能。

多租户被编织到Cortex的结构中。从Prometheus实例到达Cortex的所有时间序列数据,都在请求元数据中标记所属于的特定租户。从那里,该数据只能由同一个租户查询。警报也是多租户,每个租户都可以使用Alertmanager配置设定自己的警报。

从本质上讲,每个租户都有自己的系统“视图”,其自身以Prometheus为中心的世界。如果你以单租户的方式使用Cortex,你可以随时扩展到无限大的租户群。

用例

经过几年的发展,Cortex的用户倾向于分为两大类:

  1. 服务供应商构建托管的管理平台,提供监控和可观察性组件。例如,如果你正在构建像Heroku或Google App Engine这样的平台即服务产品,Cortex使你能够为平台上运行的每个应用程序,提供Prometheus提供的全部功能,并处理每个应用程序( 或者每个帐户或客户)作为系统的单独租户。Weave Cloud和Grafana Labs使用Cortex使客户能够充分利用Prometheus,他们是综合云平台的示例。
  2. 企业拥有许多内部客户,运行自己的应用程序、服务和“堆栈”。EA和StorageOS是受益于Cortex的大型企业的例子。

Cortex、Prometheus的生态系统和CNCF

Cortex有一些非常引人注目的技术特性,但在当前的行业氛围下,我也认为指出其开源特性也很重要:

  • Cortex使用Apache 2.0许可授权,并由CNCF支持。
  • 它仅与其他Apache 2.0 CNCF项目紧密耦合,没有与闭源、专有或特定于供应商技术的强链接。
  • 项目合作者包括像Goutham Veeramachaneni和Tom Wilkie这样的Prometheus核心维护者,来自Weaveworks、Grafana Labs、Platform9等公司的工程师,以及其他大量投资于监控和可观察性领域的工程师。
  • Cortex已经投入生产,为Weave Cloud和Grafana Cloud提供支持,这两个云产品(和核心贡献者)的成功关键取决于Cortex未来的发展轨迹。

通过在CNCF沙箱中添加Cortex,现在CNCF保护伞下有三个与Prometheus相关的项目(包括Prometheus本身和OpenMetrics)。我们知道监控和可观察性是云原生范式的重要组成部分,我们很高兴看到围绕Prometheus社区有机出现的一些核心基础的持续融合。Cortex项目正在大力推进这项工作,我很兴奋Prometheus生态系统的Prometheus即服务分支成型。


相关文章