viva
  • 主页
  • 开发
    • IDE环境
      • Vim
      • VSCode
        • code-server
        • theia
    • Golang手册
    • Ansible
    • SaltStack
      • salt-api
    • Python
      • Q&A
      • Hello,world!
      • 类型
        • 数字
        • 字符串
        • 列表
        • 元组
        • 集合
        • 字典
      • 语法
        • 流程控制
        • 循环
      • 工具
        • pip
        • pyenv
        • selenium
      • 示例
    • Shell
    • Vue
      • ant-design
      • vue-material
    • Java
  • 随笔
    • WSL2
    • Git
    • Markdown
      • mermaid
    • Linux
      • 时钟同步
      • 账号
      • 文件
      • SSH
      • systemd
      • TLS加密
        • Openssl
      • 存储
        • rsync
        • NFS
      • 路由
      • 日志采集
        • Journalctl
        • Fluentd
          • 根据字段匹配对日志进行结构化
        • Logstash
    • 虚拟化
      • Hyper-V
      • PXE
    • 命令行工具
      • zsh
    • Nexus3
    • 堡垒机
      • JumpServer
    • 测试工具
      • ioping
      • apache bench
      • dd
      • postman
    • 开源项目管理
      • Github
    • 软件包管理
    • 网络镜像源
    • 网关
      • Nginx
  • 存储
    • Ceph
      • 安装
      • 故障处理
    • Etcd
    • Mysql
  • 网络
    • Overlay网络
    • IPVS
    • 网络工具
      • tshark
      • tcpdump
    • 防火墙
      • nftables
      • firewalld
      • iptables
    • 域名解析
      • dig
      • nslookup
      • dnsmasq
    • 代理
      • Clash
      • Redsocks
      • Redsocks2
      • COW
      • Proxfier
  • 云原生
    • 容器
      • Docker
        • Dockerfile
        • docker-compose
      • Podman
      • 原理
        • Chroot
        • Namespace
        • Cgroup
    • 镜像仓库
      • Harbor
    • Kubernetes
      • 部署
        • Kind
        • Minikube
        • kubespray
      • CNI
        • Flannel
        • OVS
        • Calico
      • Operator
        • OperatorSDK
      • StorageClass
      • Q&A
    • Openshift
      • 集群部署
      • 快速使用
    • Prometheus
      • prometheus-operator
      • kube-prometheus
      • Thanos
        • 组件
          • Bucket
          • Check
          • Compact
          • Querier
          • Receiver
          • Ruler
          • Sidecar
          • Store
        • 参考资料
      • Cortex
        • 组件
          • Alertmanager
          • Config
          • Distributor
          • Ingester
          • Querier
          • Query Frontend
          • Ruler
        • 参考资料
      • Thanos与Cortex方案对比
      • 参考资料
      • Q&A
    • Skywalking
    • Rook
    • Helm
    • Istio
    • 应用部署
      • Nexus
      • RabbitMQ
    • 参考资料
  • DevOps
    • 开源DevOps平台
    • CICD
      • Jenkins
    • 参考资料
  • 机器学习
    • Kubeflow
      • 示例
由 GitBook 提供支持
在本页
  • 项目简介
  • 官方网站
  • 项目地址
  • 架构图
  • 组件介绍
  • 工作机制
  • 数据写入
  • 数据查询
  • 告警发送
  • 优势特性
  • 缺点
  1. 云原生
  2. Prometheus

Cortex

上一页参考资料下一页组件

最后更新于5年前

项目简介

Cortex是基于Proemtheus实现的集群监控方案,具有水平拓展,高可用,多租户,长期存储等特点。

项目由Tom Wilkie和Julius Volz创建于2016年2月份。在2018年8月成为CNCF沙盒项目。项目维护成员主要来自于Weavework。

官方网站

项目地址

架构图

组件介绍

  • Distributor。用于接收并分发各个租户的写入请求,接收来自prometheus的remote write API写入数据。对写入的数据进行过滤和去重,将结果存入ingester。

  • Ingester。用于存储短期的指标数据,并定期将数据刷写到后端存储中。同时提供了用于查询短期指标数据的查询接口。

  • Querier。实现了与prometheus相同的查询接口,处理来自外部的查询请求。对TSDB的index和chunks进行缓存以加速查询。在部署了Query Frontend的情况下则作为处理子查询的工作节点。

  • Query Frontend(可选)。实现了与prometheus相同的查询接口,处理来自外部的查询请求。将单个大查询拆分为多个子查询并放入查询队列,交由querier完成查询后进行汇聚,同时也会对查询结果进行缓存用以加速查询。

  • Config(可选)。作为租户的alertmanager配置,规则和模板的配置接口。

  • Ruler(可选)。用以评估每个租户的recording和alerting规则。将recording结果写入ingester,将告警消息发送到alertmanager。

  • Alertmanager(可选)。向租户发送告警通知,基于prometheus的alertmanager做的进一步拓展,支持多租户。

工作机制

数据写入

  1. Prometheus将采集到的指标数据推送到Cortex网关,由网关将请求代理到Distributor上。

  2. Distributor对写入的内容进行格式校验,包括指标的名称格式,标签格式,标签数量和时间戳范围。

  3. Distributor对数据以集群标签为分组,副本标签为依据进行去重,保证来自于同一个Prometheus集群的数据只保留一个副本。

  4. Distributor根据副本因子(表示写多少个副本的数据)通过哈希计算将写入请求分批次,以副本因子数分发给多个Ingester实例。

  5. Ingester首先将写入请求记录到WAL中,再按顺序消费记录到chunks中,在生成一个chunks(12小时)之后,将chunks和index分别写入到后端存储中,同时进行缓存更新。

数据查询

  1. 用户向Cortex网关发起查询请求,由网关将请求代理到QueryFrontend。

  2. QueryFrontend首先从缓存中查询是否有满足查询条件的内容,根据缓存中缺少的时间段补齐生成多个子查询放入查询队列中。

  3. Querier向Query Frontend消费查询队列,获取子查询。

  4. Querier根据子查询从缓存中尝试读取满足条件的index和chunks,缺失的时间段如果在12小时内则向Ingester查询,确实的时间段如果在12小时外则向后端存储查询。

  5. Querier将查询结果返回给Query Frontend,并缓存index和chunks。

  6. Query Frontend对Query的返回结果进行汇聚和对其,返回查询结果并将结果更新到结果缓存中。

告警发送

  1. 租户根据自身需要将alertmanager配置,recording规则,alerting规则和告警消息模板配置发送到Cortex网关,由网关代理到Config上。

  2. Config将配置写入到PostgresSQL。

  3. Ruler从Config读取到各个租户的配置规则,生成对应的recording规则和alerting规则进行评估。

  4. Ruler将告警消息发送至Alertmanager发出告警。

  5. Ruler将规则评估结果写入Ingester。

优势特性

  • 全局查询。基于租户级别的全局查询。

  • 水平拓展。各个组件都支持水平拓展,可以提升整体的写入和查询性能。

  • 长期存储。Ingester做为长期数据写入的唯一入口,每当本地生成12小时长的chunks时,会将该chunks以及对应的index上传到存储后端,需要注意的是index和chunks分开存储。

  • 多租户。租户间的查询,配置写入都是隔离的,互相不可见。所有的Cortex组件在发送的请求中都会携带一个Header X-Scope-OrgID,表示租户ID。当Ingester在写入数据时发现有一个新的租户ID时,则认为这是一个新的租户,当Querier在读取数据时,会请求中的租户ID是否已经存在。创建新租户的过程是随着指标数据的写入自动完成的,不存在租户的创建或删除接口,也不存在租户的鉴权和认证,这些需要在入口网关中实现。

缺点

  1. 需要依赖多种第三方中间件,提升了运维的难度

  2. 官方文档中部分组件的介绍不够完整甚至没有介绍

CortexCortex
GitHub - cortexproject/cortex: A horizontally scalable, highly available, multi-tenant, long term Prometheus.GitHub
Logo
Logo