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。