☰
Alluxio 监控与指标系统(Metrics System)实战指南
2026/10/7 2:26:50 网站建设 项目流程
  • 存储
  • 分布式文件系统
  • 缓存
  • 大数据

【免费下载链接】alluxio

Alluxio, data orchestration for analytics and machine learning in the cloud

项目地址:https://gitcode.com/gh_mirrors/al/alluxio
点击查看免费下载

Alluxio 内置了一套基于 Coda Hale Metrics 库的可配置指标系统(Metrics System),用于采集集群运行状态、诊断性能问题、评估缓存命中效果与 UFS 访问成本。本文以官方 Metrics-System 文档为骨架,深入讲解 Alluxio 指标系统的架构、配置方式、各类 Sink 的使用方法,并结合源码剖析其实现原理,帮助你快速搭建属于自己的 Alluxio 监控体系。

指标系统概述

核心概念:Source 与 Sink

Alluxio 的指标系统遵循经典的 "Source 生成指标、Sink 消费指标" 模型:

  • Source(指标源):负责产生原始指标数据,例如 Alluxio 的JvmSource(JVM 相关指标)和OperationSystemGaugeSet(操作系统指标)。这些 Source 被注册到全局的MetricRegistry中(见 MetricsSystem.java,初始化时即注册了 JVM 的 GC、内存、类加载、线程等 Gauge)。
  • Sink(指标出口):决定指标最终被投递到哪里,例如控制台、CSV 文件、JMX、Graphite 或 HTTP Servlet。
  • Polling(轮询):指标系统周期性轮询 Source,将指标记录批量传递给各个 Sink。在MetricsSystem中,Sink 通过反射加载(Class.forName(classPath))并实例化后启动,见 MetricsSystem.java。

指标实例(Instance)

Alluxio 的指标按组件划分为不同的 Instance,每个 Instance 可以独立配置一组 Sink。目前支持以下实例:

实例说明
MasterAlluxio Master 进程
WorkerAlluxio Worker 进程
Client任何嵌入 Alluxio 客户端库的进程(如 Spark、MapReduce 作业)

从源码看,MetricsSystem.InstanceType枚举还定义了更多实例类型(JOB_MASTER、JOB_WORKER、PROXY、FUSE、CLUSTER、PROCESS等),见 MetricsSystem.java,也就是说 Job Master/Job Worker、Proxy、FUSE 等进程也都可以上报指标。

注意(HA 模式):当集群以高可用(High Availability)模式运行时,默认情况下Standby Master 不提供指标服务。如需让 Standby Master 也提供指标,需要在配置中设置:

alluxio.standby.master.metrics.sink.enabled=true

该属性定义于 PropertyKey.java。

指标类型(Metric Types)

每个指标都属于以下四种类型之一:

类型含义
Gauge记录一个瞬时值,例如当前已用内存大小
Meter衡量事件随时间发生的速率,例如"每秒请求数"
Counter衡量事件累计发生的次数,例如 RPC 调用总数
Timer同时衡量事件的调用速率和耗时分布

四种类型均由 Coda Hale Metrics 库提供。从源码可见,MetricsSystem提供了counter()、meter()、timer()、histogram()、registerGaugeIfAbsent()等工厂方法,并支持带标签(Tags)的版本counterWithTags()/meterWithTags()(见 MetricsSystem.java),标签用于区分不同 UFS、不同挂载点的指标。

指标 Sink 配置

支持的 Sink 类型

Sink说明
PrometheusMetricsServlet在 Web UI 中添加 Servlet,以 Prometheus 格式提供指标数据
ConsoleSink将指标值输出到控制台
CsvSink定期将指标数据导出为 CSV 文件
JmxSink注册指标,供 JMX 控制台查看
GraphiteSink将指标发送到 Graphite 服务器
MetricsServlet在 Web UI 中添加 Servlet,以 JSON 格式提供指标数据
Slf4jSink将指标写入 SLF4J 日志(模板中亦列出)

配置文件位置

指标系统通过配置文件进行配置,Alluxio 默认期望该文件位于:

${ALLUXIO_HOME}/conf/metrics.properties

如果希望使用自定义路径,可以通过配置属性指定:

alluxio.metrics.conf.file=/path/to/your/metrics.properties

该属性在 PropertyKey.java 中定义。若配置了该属性,Alluxio 会将配置文件作为 Java 属性加载(-Dalluxio.metrics.conf.file=xxx),否则默认从${ALLUXIO_HOME}/conf目录自动加载。

配置文件语法

metrics.properties使用以下语法定义 Sink:

sink.[name].[options]=[value]

即sink.<sink名称>.<属性名>=<属性值>。其中:

  • class属性指定 Sink 的全限定类名(必填)
  • 其余属性为对应 Sink 的可选配置(如轮询周期、单位、目录等)

MetricsConfig通过正则^sink\.(.+)\.(.+)解析配置,将同一名称下的所有属性分组(见 MetricsConfig.java)。同时,为保证向后兼容,配置解析时会自动移除master./worker./*.这类实例前缀(见 MetricsConfig.java),因此旧格式配置master.sink.console.class=...依然可用。

模板文件 conf/metrics.properties.template 中列出了全部可用 Sink 及其默认属性,要点如下:

Sink属性默认值说明
ConsoleSinkperiod10轮询周期
unitseconds轮询周期单位
CsvSinkperiod10轮询周期
unitseconds轮询周期单位
directory/tmpCSV 文件存储目录
MetricsServletpath/metrics/jsonWeb 服务根路径下的路径前缀
PrometheusMetricsServletpath/metrics/prometheusWeb 服务根路径下的路径前缀
GraphiteSinkhost无Graphite 服务器主机名
port无Graphite 服务器端口
period10轮询周期
unitseconds轮询周期单位
prefix空字符串指标名前缀
Slf4jSinkperiod10轮询周期
unitseconds轮询周期单位
filter-classnull指标过滤器类
filter-regexnull指标过滤正则

注意:涉及轮询周期的 Sink,最小允许轮询周期为1 秒,MetricsSystem.checkMinimalPollingPeriod()会校验该限制(见 MetricsSystem.java)。

集群部署提示:如果 Alluxio 部署在集群中,metrics.properties需要分发到所有节点。修改配置后需重启 Alluxio 服务才能生效。

Kubernetes 部署:在 Kubernetes 上配置指标系统,请参考 Metrics On Kubernetes。

此外,Alluxio 的Leading Master 不仅会输出自身的实例指标,还会输出一份集群级聚合指标汇总(如Cluster.BytesReadLocal等,见下文 Web UI 章节),用于从集群视角观察整体运行状况。

默认 HTTP JSON Sink

前提条件

  • Alluxio Leading Master 和 Worker:无需任何额外配置,默认已启用。
  • Alluxio 独立部署的 FUSE 进程:需在启动独立 FUSE 进程前,于${ALLUXIO_HOME}/conf/alluxio-site.properties中设置alluxio.fuse.web.enabled=true,FUSE 进程才会提供 Web 端点(含指标服务)。

使用方法

向目标 Alluxio 进程的/metrics/json/端点发送 HTTP 请求,即可获得全部指标的 JSON 快照:

# 从 Alluxio Leading Master 或 Worker 获取 JSON 格式指标 $ curl <LEADING_MASTER_HOSTNAME>:<MASTER_WEB_PORT>/metrics/json/ $ curl <WORKER_HOSTNAME>:<WORKER_WEB_PORT>/metrics/json/ # 示例:获取本机 Master 指标(默认 Web 端口 19999) $ curl 127.0.0.1:19999/metrics/json/ # 示例:获取本机 Worker 指标(默认 Web 端口 30000) $ curl 127.0.0.1:30000/metrics/json/ # 示例:获取本机 Job Master 指标(默认 Web 端口 20002) $ curl 127.0.0.1:20002/metrics/json/ # 示例:获取本机 Job Worker 指标(默认 Web 端口 30003) $ curl 127.0.0.1:30003/metrics/json/ # 设置 alluxio.fuse.web.enabled=true 并启动独立 FUSE 进程后, # 使用其默认 Web 端口获取指标 $ curl <FUSE_WEB_HOSTNAME>:<FUSE_WEB_PORT>/metrics/json/ $ curl 127.0.0.1:49999/metrics/json/

从源码看,MetricsServlet是默认启用的 Sink(定义于 MetricsServlet.java),它通过 Jetty Servlet 将MetricRegistry中的全部指标序列化为 JSON 输出。MetricsSystem.allMetrics()方法会遍历注册表中的所有指标,按 Gauge/Counter/Meter/Timer 类型分别取值并返回(见 MetricsSystem.java),对名称中的转义路径(如 UFS 地址中的/与.)也会做反转义处理,便于阅读。

Prometheus Sink 搭建

Prometheus 是一套流行的监控工具,非常适合用来监控 Alluxio 指标的变化趋势。

前提条件

在指标属性文件(默认为$ALLUXIO_HOME/conf/metrics.properties)中添加以下属性:

# 启用 PrometheusMetricsServlet sink.prometheus.class=alluxio.metrics.sink.PrometheusMetricsServlet
  • 集群部署时,该文件需分发到所有节点;
  • 修改配置后需重启 Alluxio 服务;
  • 若要在独立 FUSE 进程上启用 Prometheus Sink,同样需在${ALLUXIO_HOME}/conf/alluxio-site.properties中设置alluxio.fuse.web.enabled=true后再启动 FUSE 进程。

从源码看,PrometheusMetricsServlet通过DropwizardExports将 Coda Hale 的MetricRegistry桥接导出为 Prometheus 格式,Servlet 路径固定为/metrics/prometheus(见 PrometheusMetricsServlet.java)。

使用方法

向目标进程的/metrics/prometheus/端点发送 HTTP 请求,即可获得 Prometheus 格式的指标快照:

# 从 Alluxio Leading Master / Worker / Job Service / 独立 FUSE 获取 Prometheus 格式指标 $ curl <LEADING_MASTER_HOSTNAME>:<MASTER_WEB_PORT>/metrics/prometheus/ $ curl <WORKER_HOSTNAME>:<WORKER_WEB_PORT>/metrics/prometheus/ $ curl <LEADING_JOB_MASTER_HOSTNAME>:<JOB_MASTER_WEB_PORT>/metrics/prometheus/ $ curl <JOB_WORKER_HOSTNAME>:<JOB_WORKER_WEB_PORT>/metrics/prometheus/ $ curl <FUSE_WEB_HOSTNAME>:<FUSE_WEB_PORT>/metrics/prometheus/ # 示例:本机 Master 指标(默认 Web 端口 19999) $ curl 127.0.0.1:19999/metrics/prometheus/ # 示例:本机 Worker 指标(默认 Web 端口 30000) $ curl 127.0.0.1:30000/metrics/prometheus/ # 示例:本机 Job Master 指标(默认 Web 端口 20002) $ curl 127.0.0.1:20002/metrics/prometheus/ # 示例:本机 Job Worker 指标(默认 Web 端口 30003) $ curl 127.0.0.1:30003/metrics/prometheus/ # 示例:本机独立 FUSE 进程指标(默认 Web 端口 49999) $ curl 127.0.0.1:49999/metrics/prometheus/

现在你可以让 Grafana、Datadog 等平台直接对接这些 HTTP 端点,读取 Prometheus 格式的指标。

也可以使用下面的示例prometheus.yml配置 Prometheus 客户端来抓取端点,这种方式特别推荐用于对接 Grafana:

scrape_configs: - job_name: "alluxio master" metrics_path: '/metrics/prometheus/' static_configs: - targets: [ '<LEADING_MASTER_HOSTNAME>:<MASTER_WEB_PORT>' ] - job_name: "alluxio worker" metrics_path: '/metrics/prometheus/' static_configs: - targets: [ '<WORKER_HOSTNAME>:<WORKER_WEB_PORT>' ] - job_name: "alluxio job master" metrics_path: '/metrics/prometheus/' static_configs: - targets: [ '<LEADING_JOB_MASTER_HOSTNAME>:<JOB_MASTER_WEB_PORT>' ] - job_name: "alluxio job worker" metrics_path: '/metrics/prometheus/' static_configs: - targets: [ '<JOB_WORKER_HOSTNAME>:<JOB_WORKER_WEB_PORT>' ] - job_name: "alluxio standalone fuse" metrics_path: '/metrics/prometheus/' static_configs: - targets: [ '<FUSE_WEB_HOSTNAME>:<FUSE_WEB_PORT>' ]

⚠️ 谨慎选择要轮询的指标:Prometheus 在加工指标名时会改写名称,通常会将.替换为_,有时还会追加文本。建议先用上述curl命令查看 Prometheus 转换后的实际指标名,再据此配置抓取与告警规则。

CSV Sink 搭建

本节演示如何将采集到的指标写入 CSV 文件。

前提条件

先创建CsvSink的轮询输出目录(若尚未存在):

$ mkdir /tmp/alluxio-metrics

然后在指标属性文件(默认为$ALLUXIO_HOME/conf/metrics.properties)中添加以下属性:

# 启用 CsvSink sink.csv.class=alluxio.metrics.sink.CsvSink # CsvSink 的轮询周期 sink.csv.period=1 sink.csv.unit=seconds # CsvSink 的输出目录,请确保该目录已存在! sink.csv.directory=/tmp/alluxio-metrics

集群部署时该文件需分发到所有节点,并重启 Alluxio 服务使配置生效。

使用方法

启动 Alluxio 后,包含指标数据的 CSV 文件将出现在sink.csv.directory目录中,文件名与指标名一一对应(例如名为Master.RpcCalls的指标会生成Master.RpcCalls.csv文件,内容按轮询周期逐行追加采样值)。

Web UI 监控

Master Web UI 指标页

除了通过 metrics servlet 或自定义指标配置查看原始指标外,还可以在 Alluxio Leading Master 的 Web 界面中以更易读的方式追踪关键集群性能指标:

http://<leading_master_host>:19999/metrics

该页面包含以下信息:

  • Alluxio 空间与根 UFS 空间百分比使用率的时序数据
  • 集群聚合吞吐量的时序数据,这是评估 Alluxio 缓存有效性的关键指标
  • 集群累计执行的 RPC 调用与操作次数
  • 每个挂载点累计服务的 API 调用次数,可用来量化 Alluxio 命名空间虚拟化带来的延迟降低与潜在成本节省

页面上的昵称(Nick Name)与原始指标名的对应关系如下:

昵称原始指标名
Local Alluxio (Domain Socket) ReadCluster.BytesReadDomain
Local Alluxio (Domain Socket) WriteCluster.BytesWrittenDomain
Local Alluxio (Short-circuit) ReadCluster.BytesReadLocal
Local Alluxio (Short-circuit) WriteCluster.BytesWrittenLocal
Remote Alluxio ReadCluster.BytesReadRemote
Remote Alluxio WriteCluster.BytesWrittenRemote
Under Filesystem ReadCluster.BytesReadUfsAll
Under Filesystem WriteCluster.BytesWrittenUfsAll

这些指标的详细说明见 集群指标文档。

其余栏目说明:

  • Mounted Under FileSystem Read/Mounted Under FileSystem Write:分别展示每个 Alluxio UFS 的Cluster.BytesReadPerUfs.UFS:<UFS_ADDRESS>与Cluster.BytesWrittenPerUfs.UFS:<UFS_ADDRESS>指标;
  • Logical Operations与RPC Invocations:展示 Master 指标 的一部分;
  • Saved Under FileSystem Operations:展示由 Alluxio 命名空间直接完成、未访问 UFS的操作数量。当目标 UFS 为远程或响应缓慢时,性能提升可能非常显著;若底层存储按请求计费,还可节省成本。

基于 Prometheus 的 Grafana Web UI

Grafana 是常用的时序数据可视化与分析软件,可更直观地展示 Alluxio 收集的内存、存储与已完成操作等各类指标变化。Grafana 支持读取 Prometheus 数据,按以下步骤即可快速搭建基于 Grafana + Prometheus 的 Alluxio 监控:

  1. 按 Grafana 官方安装指南安装 Grafana;
  2. 下载 Alluxio 的 Grafana 模板 JSON 文件(Dashboard ID:13467);
  3. 导入模板 JSON 文件创建 Dashboard(参考官方 Dashboard 导入文档);
  4. 为 Grafana 添加 Prometheus 数据源,自定义名称如prometheus-alluxio;
  5. 按照 Dashboard 设置说明修改变量并保存Dashboard:
变量值
alluxio_datasource你的 Prometheus 数据源名称(如步骤 4 中的prometheus-alluxio)
mastersprometheus.yml中配置的 Masterjob_name(如alluxio master)
workersprometheus.yml中配置的 Workerjob_name(如alluxio worker)
alluxio_user启动 Alluxio 所用的用户(如alluxio)

如果 Grafana Dashboard 显示效果如上图,说明监控已成功搭建。当然,你也可以直接修改 JSON 文件或在 Dashboard 上操作,自定义你的监控视图。

仓库的 integration/metrics 目录提供了 Prometheus、OpenTelemetry Collector、Grafana 相关的docker-compose-master.yaml、docker-compose-worker.yaml、prometheus.yaml、otel-agent-config.yaml等配套文件,可作为快速上手的参考模板。

基于 Prometheus 的 Datadog Web UI

Datadog 同样是类似 Grafana 的指标分析与可视化软件,支持读取 Prometheus 数据。按以下步骤即可快速搭建基于 Datadog + Prometheus 的 Alluxio 监控:

  1. 按 Datadog 官方文档安装并运行 Datadog Agent;
  2. 修改conf.d/openmetrics.d/conf.yaml文件(该文件位置可在 Agent 配置目录文档中查找)。示例conf.yaml:
    init_config: instances: - prometheus_url: 'http://<LEADING_MASTER_HOSTNAME>:<MASTER_WEB_PORT>/metrics/prometheus/' namespace: 'alluxioMaster' metrics: [ "<Master metric 1>", "<Master metric 2>" ] - prometheus_url: 'http://<WORKER_HOSTNAME>:<WORKER_WEB_PORT>/metrics/prometheus/' namespace: 'alluxioWorker' metrics: [ "<Worker metric 1>", "<Worker metric 2>" ]
  3. 重启 Datadog Agent。

之后 Alluxio 输出的指标就会显示在 Datadog 的 Web 界面中。

JVM 指标采集

如需获取 JVM 相关指标(如堆内存、GC、线程状态等),可以使用jmx_exporter作为 Java Agent 运行:

下载jmx_prometheus_javaagent-0.16.0.jar(可从 Maven 中央仓库获取),然后以如下方式启动你的 Java 程序:

java -javaagent:./jmx_prometheus_javaagent-0.16.0.jar=8080:config.yaml -jar yourJar.jar

启动后,指标即可通过http://localhost:8080/metrics访问。

config.yaml提供 jmx_exporter 的配置。空文件即可快速开始使用;如需自定义(如过滤 MBean 或重命名指标),请参考 jmx_exporter 官方文档。

补充说明:Alluxio 自身也在MetricRegistry初始化时注册了 JVM 指标集,包括JvmAttributeGaugeSet、GarbageCollectorMetricSet、MemoryUsageGaugeSet、ClassLoadingGaugeSet、CachedThreadStatesGaugeSet以及OperationSystemGaugeSet(见 MetricsSystem.java),这些 JVM 指标会随进程自身的 metrics servlet 一并输出,可配合 jmx_exporter 一起使用。

参考与进一步阅读

  • 详细的 Alluxio 指标清单见 Metrics-List 文档;
  • 存储在 Leading Master 上的指标可通过fsadmin report metrics命令查看;
  • 全部 Sink 的完整配置项参考 conf/metrics.properties.template;
  • 指标系统核心实现参考 MetricsSystem.java 与 MetricsConfig.java;
  • Prometheus / Grafana / OpenTelemetry 的容器化配套参考 integration/metrics。
  • 存储
  • 分布式文件系统
  • 缓存
  • 大数据

【免费下载链接】alluxio

Alluxio, data orchestration for analytics and machine learning in the cloud

项目地址:https://gitcode.com/gh_mirrors/al/alluxio
点击查看免费下载

相关推荐

上一篇:Onekey终极指南:3分钟解锁Steam游戏DLC的完整方案
下一篇:5个维度深度掌握SQLyog:解锁高效MySQL数据库管理新境界

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询