crotex是一个为了支持prometheus扩展的服务,支持水平扩展,高可用,多租户,长期存储。主要开发者也是promehteus的开发者

架构

组件

  • Distributor

    Distributor就是负责接收promtheus发送过来的数据,然后将数据分发给lngester。

    Distributor只要和lngester进行交互,使用的是grpc

    Distributor使用一致性hash来将数据分发给哪个lngester实例,consistent hash ring is stored in Consul

    建议使用负载均衡来运行多个distributors实例。

  • lngester

    lngester组件主要是接受Distributor发来的数据,然后发送到后段的数据库存储

  • ruler

    ruler组件主要是负责处理alertmanager产生的告警

  • Query frontend

    Query frontend组件主要是接受http请求,把他们按着tenant ID排列,并且重试一些返回错误的请求,比如large query

  • Querier

    Querier组件主要是处理promql

  • Chunk store

    Chunk store组件就是长期存储

原理

就是我们常用的集群架构:聚合,将所有数据都发送到一个节点,用于存储+查询

安装使用

编译启动

$ go build ./cmd/cortex
$ ./cortex -config.file=./docs/single-process-config.yaml

配置prometheus的远程写,将prometheus数据写入到cortex中去

remote_write:
- url: http://localhost:9009/api/prom/push

启动脚本

nohup /opt/promes/cortex/cortex -config.file=/opt/promes/cortex/config/single-process-config.yaml -distributor.ingestion-rate-limit=100000 -ring.store=consul -consul.hostname=10.47.182.224:9996 -distributor.replication-factor=2 >>/opt/promes/cortex/logs/start.log 2>&1 &
  • -distributor.ingestion-rate-limit=100000:限制数据量为100000,其实达不到这个量,prometheus默认remote_write的10000个并发,每个包含100个数据,这个时候会大量出错,所以在写入性能上达不到这个量,测试最大每个包含25个数据可以处理,同样的机器上victoria-metrics可以达到10000个数据而不出错。
  • -ring.store=consul -consul.hostname=10.47.182.224:9996:一个令牌存储在consul上,用我们现有的consul
  • -distributor.replication-factor=2:集群节点的数量,这边主要是高可用,两个节点互相复制,完成一致性哈希

目前没有看到cortex的可扩展的优秀的方面,可能是社区开发还没有完成,等release。