Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

作为承载海量数据存储的分布式文件系统,用户通常需要直观地了解整个系统的容量、文件数量、CPU 负载、磁盘 IO、缓存等指标的变化。

JuiceFS 没有重复造轮子,而是通过 Prometheus 兼容的 API 对外提供实时的状态数据,只需将其添加到用户自建的 Prometheus Server 建立时序数据,然后通过 Grafana 等工具即可轻松实现 JucieFS 文件系统的可视化监控。

快速上手

这里假设你搭建的 Prometheus Server、Grafana 与 JuiceFS 客户端都运行在相同的主机上。其中:

  • Prometheus Server:用于收集并保存各种指标的时序数据,安装方法请参考官方文档
  • Grafana:用于从 Prometheus 读取并可视化展现时序数据,安装方法请参考官方文档

Ⅰ. 获得实时数据

JuiceFS 通过 Prometheus 类型的 API 对外提供数据。文件系统挂载后,默认可以通过 http://localhost:9567/metrics 地址获得客户端输出的实时监控数据。

Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

Ⅱ. 添加 API 到 Prometheus Server

编辑 Prometheus 的配置文件,添加一个新 job 并指向 JuiceFS 的 API 地址,例如:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "juicefs"
    static_configs:
      - targets: ["localhost:9567"]

假设配置文件名为 prometheus.yml,加载该配置启动服务:

./prometheus --config.file=prometheus.yml

访问 http://localhost:9090 即可看到 Prometheus 的界面。

Ⅲ. 通过 Grafana 展现 Prometheus 的数据

如下图所示,新建 Data Source:

  • Name: 为了便于识别,可以填写文件系统的名称。
  • URL: Prometheus 的数据接口,默认为 http://localhost:9090

Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

然后,使用 grafana_template.json 创建一个仪表盘。进入新建的仪表盘即可看到文件系统的可视化图表了:

Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

收集监控指标

根据部署 JuiceFS 的方式不同可以有不同的收集监控指标的方法,下面分别介绍。

挂载点

当通过 juicefs mount 命令挂载 JuiceFS 文件系统后,可以通过 http://localhost:9567/metrics 这个地址收集监控指标,你也可以通过 --metrics 选项自定义。如:

$ juicefs mount --metrics localhost:9567 ...

你可以使用命令行工具查看这些监控指标:

$ curl http://localhost:9567/metrics

除此之外,每个 JuiceFS 文件系统的根目录还有一个叫做 .stats 的隐藏文件,通过这个文件也可以查看监控指标。例如(这里假设挂载点的路径是 /jfs):

$ cat /jfs/.stats

Kubernetes

JuiceFS CSI 驱动默认会在 mount pod 的 9567 端口提供监控指标,也可以通过在 mountOptions 中添加 metrics 选项自定义(关于如何修改 mountOptions 请参考 CSI 驱动文档),如:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: juicefs-pv
  labels:
    juicefs-name: ten-pb-fs
spec:
  ...

  mountOptions:
    - metrics=0.0.0.0:9567

新增一个抓取任务到 prometheus.yml 来收集监控指标:

scrape_configs:
  - job_name: 'juicefs'
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
      action: keep
      regex: juicefs-mount
    - source_labels: [__address__]
      action: replace
      regex: ([^:]+)(:\d+)?

      replacement: $1:9567
      target_label: __address__
    - source_labels: [__meta_kubernetes_pod_node_name]
      target_label: node
      action: replace

这里假设 Prometheus 服务运行在 Kubernetes 集群中,如果你的 Prometheus 服务运行在 Kubernetes 集群之外,请确保 Prometheus 服务可以访问 Kubernetes 节点,请参考这个 issue 添加 api_servertls_config 配置到以上文件:

scrape_configs:
  - job_name: 'juicefs'
    kubernetes_sd_configs:
    - api_server:
      role: pod
      tls_config:
        ca_file:
        cert_file:
        key_file:
        insecure_skip_verify: false
    relabel_configs:
    ...

S3 网关

JuiceFS S3 网关默认会在 http://localhost:9567/metrics 这个地址提供监控指标,你也可以通过 --metrics 选项自定义。如:

$ juicefs gateway --metrics localhost:9567 ...

如果你是在 Kubernetes 中部署 JuiceFS S3 网关,可以参考 Kubernetes 小节的 Prometheus 配置来收集监控指标(区别主要在于 __meta_kubernetes_pod_label_app_kubernetes_io_name 这个标签的正则表达式),例如:

scrape_configs:
  - job_name: 'juicefs-s3-gateway'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
        action: keep
        regex: juicefs-s3-gateway
      - source_labels: [__address__]
        action: replace
        regex: ([^:]+)(:\d+)?

        replacement: $1:9567
        target_label: __address__
      - source_labels: [__meta_kubernetes_pod_node_name]
        target_label: node
        action: replace

通过 Prometheus Operator 收集

Prometheus Operator 让用户在 Kubernetes 环境中能够快速部署和管理 Prometheus,借助 Prometheus Operator 提供的 ServiceMonitor CRD 可以自动生成抓取配置。例如(假设 JuiceFS S3 网关的 Service 部署在 kube-system 名字空间):

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: juicefs-s3-gateway
spec:
  namespaceSelector:
    matchNames:
      - kube-system
  selector:
    matchLabels:
      app.kubernetes.io/name: juicefs-s3-gateway
  endpoints:
    - port: metrics

Hadoop

JuiceFS Hadoop Java SDK 支持把监控指标上报到 Pushgateway 或者 Graphite。

Pushgateway

启用指标上报到 Pushgateway:


  juicefs.push-gateway
  host:port

同时可以通过 juicefs.push-interval 配置修改上报指标的频率,默认为 10 秒上报一次。

根据 Pushgateway 官方文档的建议,Prometheus 的抓取配置中需要设置 honor_labels: true

需要特别注意,Prometheus 从 Pushgateway 抓取的指标的时间戳不是 JuiceFS Hadoop Java SDK 上报时的时间,而是抓取时的时间,具体请参考 Pushgateway 官方文档

默认情况下 Pushgateway 只会在内存中保存指标,如果需要持久化到磁盘上,可以通过 --persistence.file 选项指定保存的文件路径以及 --persistence.interval 选项指定保存到文件的频率(默认 5 分钟保存一次)。

每一个使用 JuiceFS Hadoop Java SDK 的进程会有唯一的指标,而 Pushgateway 会一直记住所有收集到的指标,导致指标数持续积累占用过多内存,也会使得 Prometheus 抓取指标时变慢,建议定期清理 Pushgateway 上的指标。

定期使用下面的命令清理 Pushgateway 的指标数据,清空指标不影响运行中的 JuiceFS Hadoop Java SDK 持续上报数据。 注意 Pushgateway 启动时必须指定 --web.enable-admin-api 选项,同时以下命令会清空 Pushgateway 中的所有监控指标。

$ curl -X PUT http://host:9091/api/v1/admin/wipe

Graphite

启用指标上报到 Graphite:


  juicefs.push-graphite
  host:port

同时可以通过 juicefs.push-interval 配置修改上报指标的频率,默认为 10 秒上报一次。

JuiceFS Hadoop Java SDK 支持的所有配置参数请参考文档

使用 Consul 作为注册中心

JuiceFS 支持使用 Consul 作为监控指标 API 的注册中心,默认的 Consul 地址是 127.0.0.1:8500,你也可以通过 --consul 选项自定义。如:

$ juicefs mount --consul 1.2.3.4:8500 ...

当配置了 Consul 地址以后, --metrics 选项不再需要配置,JuiceFS 将会根据自身网络与端口情况自动配置监控指标 URL。如果同时设置了 --metrics,则会优先尝试监听配置的 URL。

注册到 Consul 上的每个实例,其 serviceName 都为 juicefsserviceId 的格式为 <ip>:<mount-point></mount-point></ip>,例如: 127.0.0.1:/tmp/jfs

每个 instance 的 meta 都包含了 hostnamemountpoint 两个维度,其中 mountpoints3gateway 代表该实例为 S3 网关。

可视化监控指标

Grafana 仪表盘模板

JuiceFS 提供一些 Grafana 的仪表盘模板,将模板导入以后就可以展示收集上来的监控指标。目前提供的仪表盘模板有:

模板名称 说明
grafana_template.json

用于展示自挂载点、S3 网关(非 Kubernetes 部署)及 Hadoop Java SDK 收集的指标
grafana_template_k8s.json

用于展示自 Kubernetes CSI 驱动、S3 网关(Kubernetes 部署)收集的指标

Grafana 仪表盘示例效果如下图:

Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

总结

使用 Grafana 做为宏观观测工具,当出现异常情况时可以首先观察其中是否存在异常指标,再进行进一步的分析。同时重要指标建议设置报警提示,以便实时获取系统状态异常的通知。

如有帮助的话欢迎关注我们项目 Juicedata/JuiceFS 哟! (0ᴗ0✿)

Original: https://www.cnblogs.com/JuiceData/p/16310159.html
Author: JuiceFS
Title: Grafana+Prometheus 搭建 JuiceFS 可视化监控系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611448/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ASP.NET Core 2.2 : 二十二. 多样性的配置方式

    大多数应用都离不开配置,本章将介绍ASP.NET Core中常见的几种配置方式及系统内部实现的机制。(ASP.NET Core 系列目录) 说到配置,第一印象可能就是”…

    Linux 2023年6月7日
    0117
  • 常见开发模型-敏捷开发与瀑布开发模型详解

    引言 在学习软件工程的时候接触过一些软件工程开发模型的相关概念,其中,印象比较深刻的就是瀑布模型和敏捷开发模型。这两种模型在日常的软件开发中都是非常常用的,但是它们也有比较大的区别…

    Linux 2023年6月7日
    0139
  • Centos7(非LVM)扩容根目录

    Centos7(非LVM)扩容根目录 系统安装在了VM上,so首先对虚拟机进行扩容: 1、进入VM,选择”虚拟机——>设置” 2、选择硬盘,看到扩展为…

    Linux 2023年6月8日
    0153
  • 面试必问的安卓虚拟机,你真的掌握了么?——安卓虚拟机基础知识回顾

    前言 21世纪,安卓虚拟机正在一步步的走入我们的生活,小到个人部分朋友在电脑上使用安卓虚拟机玩手游,大到安卓从业人员在虚拟机上面跑程序。不得不承认,对于每一位Androider 而…

    Linux 2023年6月13日
    0104
  • 打造一个红旗(redflag)Linux的基础镜像(base image)

    由于工作原因,想找一个红旗Linux的基础镜像(base image)。网上搜了一下,但没有现成的。起初是想找对应的centos版本来代替,但又怕有些莫名其妙的问题。 官方文档 不…

    Linux 2023年6月8日
    089
  • Python之元类详解

    一、引子 元类属于Python面向对象编程的深层魔法,99%的人都不得要领,一些自以为搞明白元类的人其实也是自圆其说,点到为止,从队元类的控制上来看就破绽百出,逻辑混乱; 二、什么…

    Linux 2023年6月14日
    099
  • redis的事件处理机制

    redis的事件处理机制 redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,”工作的工人”那么少,可那么为什么redi…

    Linux 2023年5月28日
    0114
  • CRC校验

    ​ 一:CRC概念 1.1、参考博客 参考的教程如下: 手算CRC及其实现 CRC校验算法原理分析 一文讲透CRC校验码-附赠C语言实例 CRC校验(手算与直观演示) CRC(循环…

    Linux 2023年6月13日
    090
  • 高级IPC DBus

    404. 抱歉,您访问的资源不存在。 可能是URL不正确,或者对应的内容已经被删除,或者处于隐私状态。 [En] It may be that the URL is incorre…

    Linux 2023年5月27日
    0111
  • Linux的文件结构和基本分类

    (注:此笔记默认操作系统为centOS7) Windows下的文件都是以盘符开头的,Linux中没有盘符,所有文件都在根目录下。 cd /进入根目录 ls /显示根目录下的文件查看…

    Linux 2023年6月7日
    0100
  • 如何访问github.io类的网站

    上网查找后看到有两种说法: 找到/etc/hosts文件,Windows一般在/Windows/System32/drivers/etc目录下,MAC在/private/etc目录…

    Linux 2023年6月8日
    0123
  • cpp-变量

    1.枚举类型 枚举类型是用户自定义的类型,在定义时要列举出该枚举类型所有的数值。 定义格式如下: [enum] enumName {val1, val2, val3} 其中的通常为…

    Linux 2023年6月7日
    0101
  • 记一次centos挂载ceph存储的坑

    生产有两台服务器,准备用来跑工作流,执行的资源的是放在ceph存储集群中,第一步挂载ceph 执行命令: mount -t ceph xxx:xxx -o name=admin,s…

    Linux 2023年5月27日
    0106
  • MySQL实现备份(1)

    完全备份和部分备份 冷备份、热备份、温备份 温备份适用于:myisam 热备份适用于:innodb 物理备份和逻辑备份 完全备份:备份所有数据 部分备份:只备份部分数据内容 两者第…

    Linux 2023年6月7日
    0151
  • Linux系统编程之匿名管道

    1.进程间通信介绍 1.1 进程通信的基本概念 在之前我们已经学习过进程地址空间。Linux 环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量…

    Linux 2023年6月8日
    0118
  • Chrome的强大搜索功能

    前言 前几天一个好朋友求助我,大概问题是他的电脑QQ啥都能上网,就浏览器上不了网不是IE而是chrome,我第一反应可能是dns问题。后来发甩过来一张图,好家伙把我吓得,类似于下面…

    Linux 2023年6月14日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球