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

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

快速上手

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

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

Ⅰ. 获得实时数据

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

Ⅱ. 添加 API 到 Prometheus Server

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

  1. global:
  2. scrape_interval: 15s
  3. evaluation_interval: 15s
  4. alerting:
  5. alertmanagers:
  6. - static_configs:
  7. - targets:
  8. # - alertmanager:9093
  9. rule_files:
  10. # - "first_rules.yml"
  11. # - "second_rules.yml"
  12. scrape_configs:
  13. - job_name: "prometheus"
  14. static_configs:
  15. - targets: ["localhost:9090"]
  16. - job_name: "juicefs" static_configs: - targets: ["localhost:9567"]

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

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

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

Ⅲ. 通过 Grafana 展现 Prometheus 的数据

如下图所示,新建 Data Source:

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

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

收集监控指标

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

挂载点

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

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

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

  1. $ curl http://localhost:9567/metrics

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

  1. $ cat /jfs/.stats

Kubernetes

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

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: juicefs-pv
  5. labels:
  6. juicefs-name: ten-pb-fs
  7. spec:
  8. ...
  9. mountOptions:
  10. - metrics=0.0.0.0:9567

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

  1. scrape_configs:
  2. - job_name: 'juicefs'
  3. kubernetes_sd_configs:
  4. - role: pod
  5. relabel_configs:
  6. - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
  7. action: keep
  8. regex: juicefs-mount
  9. - source_labels: [__address__]
  10. action: replace
  11. regex: ([^:]+)(:\d+)?
  12. replacement: $1:9567
  13. target_label: __address__
  14. - source_labels: [__meta_kubernetes_pod_node_name]
  15. target_label: node
  16. action: replace

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

  1. scrape_configs:
  2. - job_name: 'juicefs'
  3. kubernetes_sd_configs:
  4. - api_server: <Kubernetes API Server>
  5. role: pod
  6. tls_config:
  7. ca_file: <...>
  8. cert_file: <...>
  9. key_file: <...>
  10. insecure_skip_verify: false
  11. relabel_configs:
  12. ...

S3 网关

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

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

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

  1. scrape_configs:
  2. - job_name: 'juicefs-s3-gateway'
  3. kubernetes_sd_configs:
  4. - role: pod
  5. relabel_configs:
  6. - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
  7. action: keep
  8. regex: juicefs-s3-gateway
  9. - source_labels: [__address__]
  10. action: replace
  11. regex: ([^:]+)(:\d+)?
  12. replacement: $1:9567
  13. target_label: __address__
  14. - source_labels: [__meta_kubernetes_pod_node_name]
  15. target_label: node
  16. action: replace

通过 Prometheus Operator 收集

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

  1. apiVersion: monitoring.coreos.com/v1
  2. kind: ServiceMonitor
  3. metadata:
  4. name: juicefs-s3-gateway
  5. spec:
  6. namespaceSelector:
  7. matchNames:
  8. - kube-system
  9. selector:
  10. matchLabels:
  11. app.kubernetes.io/name: juicefs-s3-gateway
  12. endpoints:
  13. - port: metrics

Hadoop

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

Pushgateway

启用指标上报到 Pushgateway:

  1. <property>
  2. <name>juicefs.push-gateway</name>
  3. <value>host:port</value>
  4. </property>

同时可以通过 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 中的所有监控指标。

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

Graphite

启用指标上报到 Graphite:

  1. <property>
  2. <name>juicefs.push-graphite</name>
  3. <value>host:port</value>
  4. </property>

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

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

使用 Consul 作为注册中心

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

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

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

注册到 Consul 上的每个实例,其 serviceName 都为 juicefsserviceId 的格式为 <IP>:<mount-point>,例如: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 做为宏观观测工具,当出现异常情况时可以首先观察其中是否存在异常指标,再进行进一步的分析。同时重要指标建议设置报警提示,以便实时获取系统状态异常的通知。

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

Grafana+Prometheus 搭建 JuiceFS 可视化监控系统的更多相关文章

  1. Grafana+Prometheus打造全方位立体监控系统

    前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控.下面两张图分别是两台服务器监控信息: 服务器A 服务器B 概述 Promet ...

  2. 基于 HTML5 WebGL 的计量站三维可视化监控系统 Web 组态工控应用

    得益于 HTML5 WebGL 技术的成熟,从技术上对工控管理的可视化,数据可视化变得简单易行!完成对工控设备的管理效率,资源管理,风险管理等的大幅度提高,同时也对国家工业4.0计划作出有力响应! 如 ...

  3. window平台基于influxdb + grafana + jmeter 搭建性能测试实时监控平台

    一.influxdb 安装与配置 1.1 influxdb下载并安装 官网无需翻墙,但是下载跳出的界面需要翻墙,我这里提供下载链接:https://dl.influxdata.com/influxdb ...

  4. 手把手教你从安装CentOS7.4镜像开始,搭建IoT视频监控系统

    摘要:在CentOS7.4服务器版本的环境下安装nginx服务器.配置文件服务器.流媒体服务器. 本文分享自华为云社区<华为云ECS服务器安装CentOS7.4镜像,部署GINX服务器.搭建物联 ...

  5. 微服务监控之三:Prometheus + Grafana Spring Boot 应用可视化监控

    一.Springboot增加Prometheus 1.Spring Boot 应用暴露监控指标,添加如下依赖 <dependency> <groupId>org.springf ...

  6. Prometheus+Grafana+Alertmanager搭建全方位的监控告警系统

    prometheus安装和配置 prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据. 2.Client Library: 客户端库,检测应用程序代码,当 ...

  7. 快速构建ceph可视化监控系统-转载

    前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_exp ...

  8. 搭建Lepus数据库监控系统-记录

    一.  安装环境 系统环境:centos6.5 IP:192.168.30.242 hostname:vpn.org 软件:LAMP均已安装.(请确保这些正常安装,并能使用). 系统核心包:(摘自官方 ...

  9. 搭建Lepus数据库监控系统

    一.  安装环境 系统环境:centos6.5 IP:192.168.30.242 hostname:vpn.org 软件:LAMP均已安装.(请确保这些正常安装,并能使用). 系统核心包:(摘自官方 ...

随机推荐

  1. 微信分享报错config:invalid url domain

    错误类型:invalid url domain 调试返回参数: { "errMsg": "config:invalid url domain" } 截图: 环境 ...

  2. uni-app中实现图片左滑的效果

    template: 1 <view class="my-reg"> 2 <view class="my-regs"> 3 <ima ...

  3. RTSP可用网络流

    推荐个音视频学习的网站 https://www.zzsin.com,里面有音视频学习资料和测试视频提供下载B站搜乔红 rtsp://wowzaec2demo.streamlock.net/vod/mp ...

  4. RPC及Dubbo和ZooKeeper的安装

    RPC及Dubbo和ZooKeeper的安装 RPC 通信有两种方式:HTTP(无状态协议,通信协议),RPC(远程过程调用) 它两的本质没有区别,只是功能有点不一样 官方解释: RPC是指远程过程调 ...

  5. 1.Java基础

    1.注释 单行注释 // 多行注释 /*回车 文档注释(注解)./**回车 2.标识符 (1)Java所有组成部分都需要名字,类名,变量名以及方法名都称为标识符 (2)且标识符只能以字母.$或者_ 开 ...

  6. 高精度加法(C++实现)

    高精度加法 简介 用于计算含有超过一般变量存放不下的非负整数 高精度加法这个过程是模拟的小学竖式加法计算 步骤 以下有顺序之分 数组清零 输入 获取长度 逆置 字符型数字转成对应的整型数字 计算并输出 ...

  7. AWS - Basic 1

    之前由于公司 Training 考取了 AWS-SAP 的证书,更多理解的是概念和理论上的知识,并未实操.但对于学习一门技术来说,实践是加深理解和掌握该技术的必经之路,强调知行合一.所以最近打算重新熟 ...

  8. Java学习day33

    线程池: 背景:经常创建和销毁.使用量特别大的资源,比如并发情况下的线程,对性能影响很大 思路:提前创建好多个线程.实现重复利用. 好处:提高响应速度,减少了创建新线程的时间:降低资源消耗,重复利用线 ...

  9. Java语言学习day25--7月31日

    今日内容介绍1.final 关键字2.static 关键字3.匿名对象4.内部类5.包的声明与访问6.访问修饰符7.代码块 ###01final关键字概念 * A: 概述 继承的出现提高了代码的复用性 ...

  10. docker入门_docker安装

    docker入门_docker安装 ubuntu 安装 curl -sSL https://get.daocloud.io/docker | sh # 官方安装脚本自动安装 systemctl ena ...