一文搞懂 Grafana Mimir

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Hello folks,我是 Luga,今天我们来分享一下与 Grafana 有关的观测性话题- Grafana Mimir。 作为一个开源软件项目,Grafana Mimir 主要为 Prometheus 提供可扩展的长期存储功能支撑。

    Hello folks,我是 Luga,今天我们来分享一下与 Grafana 有关的观测性话题- Grafana Mimir。 作为一个开源软件项目,Grafana Mimir 主要为 Prometheus 提供可扩展的长期存储功能支撑。

01

什么是 Grafana Mimir ?


    作为一个开源的、水平可扩展的、高可用的、多租户的开源项目,Grafana Mimir 主要应用于流行的开源监控和告警系统 Prometheus 提供可扩展的长期存储。

   基于 AGPLv3 许可下发布,Grafana Mimir 始于 Grafana Labs,并于 2022 年宣布,使其成为最具可扩展性、性能最高的开源指标时间序列数据库。同时,凭借其易于安装和维护、大规模可扩展性、全局指标视图、廉价和耐用的存储、高可用性以及本地多租户特性优势,使得 Grafana Mimir 成为 Prometheus 生态中最为有力的强大后勤补充。

02

Grafana Mimir 核心优势

    1、易维护性

   Grafana Mimir 的核心优势之一便是易于“安装和维护”。该项目的大量文档、教程和部署工具使其入门起来既快速又简单。Grafana Mimir 的整体模式允许只使用一个二进制文件,不需要额外的依赖项。此外,与 Grafana Mimir 一起打包的最佳实践仪表板、警报和运行手册可以轻松监控系统的健康状况并保持其平稳运行。

    2、可扩展性

   同时,Grafana Mimir 的水平可扩展架构使其能够处理大量时间序列数据。内部测试表明,该系统可以处理多达 10 亿个活动时间序列,从而实现大规模的可扩展性。这意味着 Grafana Mimir 可以跨多台机器运行,从而能够处理比单个 Prometheus 实例多几个数量级的时间序列。

    3、全局视图

    除此之外,Grafana Mimir 的另一个关键优势是它能够提供全局的指标视图。该系统使用户能够运行聚合来自多个 Prometheus 实例的系列的查询,从而提供所有系统的全面视图。查询引擎还广泛并行化查询执行,即使是最高基数的查询也能以极快的速度执行。

    4、数据持久性

    Grafana Mimir 使用对象存储来进行长期数据存储,利用了这种无处不在的、高性价比、高耐久性的技术。该系统与多个对象存储实现兼容,包括 AWS S3、谷歌云存储、Azure Blob 存储、OpenStack Swift 以及任何与 S3 兼容的对象存储。这为用户提供了一种廉价、耐用的方式来存储用于长期分析的指标。

    5、通过复制实现高可用性

    高可用性是 Grafana Mimir 的另一个关键特性。系统复制传入的指标,确保在机器发生故障时不会丢失任何数据。其水平可扩展架构还意味着它可以在零停机的情况下重启、升级或降级,确保指标摄取或查询不会中断。

    6、原生多租户

    最后,Grafana Mimir 的原生多租户允许独立团队或业务部门的数据和查询隔离,使这些组可以共享同一个集群。高级限制和服务质量控制确保容量在租户之间公平共享,使其成为拥有多个团队和部门的大型组织的绝佳选择。


03

Grafana Mimir 分布式架构


    Grafana Mimir 的分布式架构可参考如下示意图:

    针对架构中的不同组件功能解析,大家可以参考如下文件以及源码进行探究,具体如下:


serviceMonitor:
  enabled: true
# disabled, external ruler is used
ruler:
  enabled: false
# disabled, external alertmanager is used
alertmanager:
  enabled: false
# disabled, blocks_storage is used
minio:
  enabled: false
compactor:
  nodeSelector:
    app: mimir
  tolerations:
    - key: app
      value: compactor
      operator: Equal
      effect: NoSchedule
  persistentVolume:
    storageClass: standard-rwo
    size: 50Gi
  resources:
    limits:
      cpu: 1200m
      memory: 2Gi
    requests:
      cpu: 1200m
      memory: 2Gi
distributor:
  extraArgs:
    distributor.ingestion-rate-limit: "10000000000000"
  replicas: 5
  nodeSelector:
    app: mimir
  tolerations:
    - key: app
      value: distributor
      operator: Equal
      effect: NoSchedule
  resources:
    limits:
      memory: 4Gi
      cpu: 2
    requests:
      memory: 4Gi
      cpu: 2
ingester:
  extraArgs:
    ingester.max-global-series-per-user: "0"
    ingester.max-global-series-per-metric: "0"
  nodeSelector:
    app: mimir
  tolerations:
    - key: app
      value: ingester
      operator: Equal
      effect: NoSchedule
  persistentVolume:
    size: 150Gi
    storageClass: standard-rwo
  replicas: 5
  resources:
    limits:
      memory: 25Gi
      cpu: 4
    requests:
      memory: 25Gi
      cpu: 4
chunks-cache:
  nodeSelector:
    app: mimir
  enabled: true
  replicas: 2
index-cache:
  nodeSelector:
    app: mimir
  enabled: true
  replicas: 3
metadata-cache:
  nodeSelector:
    app: mimir
  enabled: true
results-cache:
  nodeSelector:
    app: mimir
  enabled: true
overrides_exporter:
  nodeSelector:
    app: mimir
  replicas: 1
  resources:
    limits:
      memory: 256Mi
    requests:
      cpu: 100m
      memory: 128Mi
querier:
  extraArgs:
    querier.max-fetched-chunks-per-query: "8000000"
  replicas: 4
  nodeSelector:
    app: mimir
  tolerations:
    - key: app
      operator: Equal
      value: querier
      effect: NoSchedule
  resources:
    limits:
      memory: 24Gi
      cpu: 2
    requests:
      memory: 24Gi
      cpu: 2
query_frontend:
  replicas: 1
  nodeSelector:
    app: mimir
  tolerations:
    - key: app
      operator: Equal
      value: query-frontend
      effect: NoSchedule
  resources:
    limits:
      memory: 6Gi
      cpu: 2
    requests:
      memory: 6Gi
      cpu: 2
store_gateway:
  persistentVolume:
    size: 50Gi
  replicas: 1
  nodeSelector:
    app: mimir
  tolerations:
    - key: app
      operator: Equal
      value: store-gateway
      effect: NoSchedule
  resources:
    limits:
      cpu: 1
      memory: 6Gi
    requests:
      cpu: 1
      memory: 6Gi
mimir:
  structuredConfig:
    limits:
      out_of_order_time_window: 1h
    blocks_storage:
      backend: gcs
      gcs:
        bucket_name: <bucket_name>
        service_account: |
          {<secret>}
metaMonitoring:
  serviceMonitor:
    enabled: true

04

Grafana Mimir 安装部署

   

基于 Docker 部署

    首先,我们借助 Git 命令行 获取 Grafana Mimir 存储库分支,具体如下所示:


[leonli@Leon ~ ] % git clone https://github.com/grafana/mimir.git
Cloning into 'mimir'...
remote: Enumerating objects: 155741, done.
remote: Counting objects: 100% (387/387), done.
remote: Compressing objects: 100% (199/199), done.
eceiving objects:   3% (5177/155741), 3.01 MiB | 51.00 KiB/s 
...

    然后,进行 mimir 目录对应的子目录“play-with-grafana-mimir/”下执行 Docker 命令行启动,具体如下所示:


[leonli@Leon ~ ] % docker-compose up -d

    至此, Grafana Mimir 容器已正常启动,此时,我们在本地主机上打开 Grafana http://localhost:9000 并查看显示 Grafana Mimir 集群状态和健康状况的仪表板。并基于仪表板查看 Grafana Mimir 显示的相关指标集信息。

    基于上述命令行所展现,Grafana Mimir 拓扑参考结构示意图如下所示,我们可根据实际情况进行配置操作。

    基于上述拓扑结构,我们大概可以看出,对于整个启动命令所涉及的相关组件,具体如下:

    1、Grafana Mimir

    单体模式 Mimir 的三个实例以提供高可用性,同时,启用多租户(租户 ID 为 Demo)。

    2、Minio

  •     用于块、规则和警报的 S3 兼容持久存储。

  •     3、Prometheus

  •     抓取 Grafana Mimir 指标,然后将它们写回 Grafana Mimir 以确保摄取指标的可用性。

  •     4、Grafana

  •     包括一个预安装的数据源来查询 Grafana Mimir 以及用于监控 Grafana Mimir 的预装仪表板。

  •     5、Load balancer

  •     一个简单的基于 NGINX 的负载均衡器,在主机上暴露 Grafana Mimir 端点。


基于 Helm 部署

    通常,我们在生产环境部署 Grafana Mimir 集群,建议需要满足如下环境要求,具体:

    1、硬件要求:


    具有至少 4 个内核和 16GiB RAM 的单个 Kubernetes 节点


    2、软件要求:


    Kubernetes 1.20 或更高版本以及 Helm v3 +

 

    具体安装操作如下所示:

    1、创建 ns,例如,将其命名为“mimir-devops”,具体如下:


[leonli@Leon ~ ] % kubectl create namespace mimir-devops

   2、设置 Helm 存储库,具体如下:


[leonli@Leon ~ ] % helm repo add grafana https://grafana.github.io/helm-charts && helm repo update

    3、配置访问入口,入口使得我们能够从外部访问 Kubernetes Cluster。具体如下所示:


[leonli@Leon ~ ] % vi custom.yaml
nginx:
  ingress:
    enabled: true
    ingressClassName: nginx
    hosts:
      - host: <ingress-host>
        paths:
          - path: /
            pathType: Prefix
    tls:
      # empty, disabled.

    注意:

    要查看 Helm chart 安装的所有可配置参数,可使用如下命令行进行。


[leonli@Leon ~ ] % helm show values grafana/mimir-distributed.

    4、安装 Grafana Mimir


[leonli@Leon ~ ] % helm -n mimir-devops install mimir grafana/mimir-distributed -f custom.yaml

    至此,Grafana Mimir 已安装完成,大家可根据实际情况进行部署配置。

    总的来说,Grafana Mimir 是一个强大的多功能系统,为 Prometheus 提供了可扩展的长期存储解决方案。基于其强大特性,可以帮助组织轻松监控和分析他们的系统表现。

    关于 Grafana Mimir 更多内容,大家可参考 https://grafana.com/

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
4月前
|
消息中间件 存储 Prometheus
Grafana Mimir:支持乱序的指标采集
Grafana Mimir:支持乱序的指标采集
75 4
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
260 3
|
2天前
|
存储 数据采集 Prometheus
Grafana Prometheus Altermanager 监控系统
Grafana、Prometheus 和 Alertmanager 是一套强大的开源监控系统组合。Prometheus 负责数据采集与存储,Alertmanager 处理告警通知,Grafana 提供可视化界面。本文简要介绍了这套系统的安装配置流程,包括各组件的下载、安装、服务配置及开机自启设置,并提供了访问地址和重启命令。适用于希望快速搭建高效监控平台的用户。
47 20
|
5天前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
46 3
|
5天前
|
Prometheus 监控 前端开发
Grafana 安装配置教程,让你的 Prometheus 监控数据变得更美观
《Grafana安装配置教程,让你的Prometheus监控数据变得更美观》简介: Grafana是一个开源的度量分析与可视化工具,支持多种数据源(如Prometheus),提供丰富的可视化功能和警报机制。本文详细介绍了Grafana的安装、汉化方法及模板使用,帮助用户轻松创建美观、灵活的数据面板,并实现数据的协作与共享。通过Docker镜像、配置文件修改或替换前端页面等方式实现汉化,让用户更便捷地使用中文界面。此外,还提供了导入JSON格式模板的具体步骤,方便快速搭建仪表盘。
22 2
|
5天前
|
Prometheus Cloud Native Linux
Prometheus+Grafana新手友好教程:从零开始搭建轻松掌握强大的警报系统
本文介绍了使用 Prometheus 和 Grafana 实现邮件报警的方案,包括三种主要方法:1) 使用 Prometheus 的 Alertmanager 组件;2) 使用 Grafana 的内置告警通知功能;3) 使用第三方告警组件如 OneAlert。同时,详细描述了环境准备、Grafana 安装配置及预警设置的步骤,确保用户能够成功搭建并测试邮件报警功能。通过这些配置,用户可以在系统或应用出现异常时及时收到邮件通知,保障系统的稳定运行。
28 1
|
1月前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
105 2
|
6月前
|
Prometheus 监控 Cloud Native
基于Prometheus和Grafana的监控平台 - 环境搭建
基于Prometheus和Grafana的监控平台 - 环境搭建
|
1月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
218 0
|
4月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之Grafana安装与配置
prometheus学习笔记之Grafana安装与配置