监控与数据可视化
JuiceFS 提供了丰富的监控指标,本文介绍如何收集这些指标,并通过 Prometheus 和 Grafana 实现类似下图的可视化监控系统。
搭建流程大致如下:
- 配置 Prometheus 抓取 JuiceFS 监控指标
- 让 Grafana 读取 Prometheus 中的监控数据
- 用 JuiceFS 官方的 Grafana 仪表盘模板展现监控指标
本文使用开源版的 Grafana 和 Prometheus 作为例子,如果你想使用 Grafana Cloud 来构建可视化监控系统,可以参考这篇文章 「如何使用 Grafana 监控文件系统状态」。
快速上手视频
1. 配置 Prometheus 抓取 JuiceFS 监控指标
JuiceFS 挂载后,默认会通过 http://localhost:9567/metrics
地址实时输出 Prometheus 格式的指标数据。为了查看各项指标在一个时间范围内的状态变化,需要搭建 Prometheus 并配置定时抓取和保存这些指标数据。
不同挂载或访问方式(如 FUSE 挂载、CSI 驱动、S3 网关、Hadoop SDK 等)收集指标数据的方式略有区别,详见「收集监控指标」。
这里以最常见的 FUSE 挂载方式为例介绍,如果还没安装 Prometheus,可以参考官方文档。
编辑 prometheus.yml
配置文件,在抓取配置部分(scrape_configs
)添加新的任务,定义 JuiceFS 客户端输出监控指标的地址:
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 服务:
./prometheus --config.file=prometheus.yml
访问 http://localhost:9090
即可看到 Prometheus 的界面。
2. 让 Grafana 读取 Prometheus 中的监控数据
Prometheus 开始抓取 JuiceFS 的监控指标后,接下来要配置 Grafana 读取 Prometheus 中的数据。
如果还没安装 Grafana,可以参考官方文档。
在 Grafana 中新建 Prometheus 类型的数据源:
- Name:为了便于识别,可以填写文件系统的名称。
- URL:Prometheus 的数据接口,默认为
http://localhost:9090
。
3. 用 JuiceFS 官方的 Grafana 仪表盘模板展现监控指标
在 Grafana Dashboard 仓库中可以找到 JuiceFS 官方维护的仪表盘模板,可以直接在 Grafana 中通过 https://grafana.com/grafana/dashboards/20794/
链接导入,也可以通过 ID 20794
导入。
Grafana 仪表盘如下图:
收集监控指标
根据部署 JuiceFS 方式的不同可以有不同的收集监控指标的方法,下面分别介绍。
FUSE 挂载
当通过 juicefs mount
命令挂载 JuiceFS 文件系统后,可以通过 http://localhost:9567/metrics
这个地址收集监控指标,你也可以通过 --metrics
选项自定义。如:
juicefs mount --metrics localhost:9567 ...
你可以使用命令行工具查看这些监控指标:
curl http://localhost:9567/metrics
除此之外,每个 JuiceFS 文件系统的根目录还有一个叫做 .stats
的隐藏文件,通过这个文件也可以查看监控指标。例如(这里假设挂载点的路径是 /jfs
):
cat /jfs/.stats
如果想要实时查看监控指标,可以使用 juicefs stats
命令。
Kubernetes
参考 CSI 驱动文档。
S3 网关
该特性需要运行 0.17.1 及以上版本 JuiceFS 客户端
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
有关 Prometheus Operator 的更多信息,请查看官方文档。
Hadoop Java SDK
JuiceFS Hadoop Java SDK 支持把监控指标上报到 Pushgateway 或者 Graphite。
Pushgateway
启用指标上报到 Pushgateway:
<property>
<name>juicefs.push-gateway</name>
<value>host:port</value>
</property>