
存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载导读本文聚焦于 Alluxio 以 Kubernetes 方式部署时的指标Metrics采集与监控配置系统讲解两类主流 SinkHTTP JSON Sink 与 Prometheus Sink在集群环境中的启用方法如何通过kubectl exec直接抓取各组件指标快照、如何借助 Helm Chart 一次性开启 Prometheus 指标暴露端点以及如何编写prometheus.yml的 Kubernetes 服务发现规则完成对 Master、Worker、Job Master、Job Worker 与 Fuse 进程的分组件采集。读完本文你将掌握在 Kubernetes Pod 内定位各组件 Web 端口、验证指标端点、并让 Prometheus 自动发现并抓取 Alluxio 指标的一套可落地操作流程。本文以仓库文档 Metrics-On-Kubernetes.md 为主体并结合 Metrics-System.md、Helm Chart 模板与核心源码如 PrometheusMetricsServlet.java、WebServer.java进行深度佐证。Alluxio 指标系统在 Kubernetes 上的基本认知Alluxio 的指标系统基于 Coda Hale Metrics Library 构建source 产生指标sink 消费指标系统周期性地把指标记录投递给已配置的 sink。指标按组件划分为不同实例在 Kubernetes 场景下我们关心的是运行在 Pod 中的各类进程MasterAlluxio master 进程含 Job Master 进程WorkerAlluxio worker 进程含 Job Worker 进程Fuse独立的 Alluxio Fuse 进程若单独部署。每个实例都可以配置多个 sink本仓库支持的 sink 包括PrometheusMetricsServlet、ConsoleSink、CsvSink、JmxSink、GraphiteSink、MetricsServletJSON等完整的 sink 清单与配置模板见 conf/metrics.properties.template。在深入具体 Sink 之前建议先通读 Metrics-System.md 了解指标类型Gauge、Meter、Counter、Timer与通用配置方式部署 Alluxio 到 Kubernetes 的完整步骤见 Running-Alluxio-On-Kubernetes.md。在 Kubernetes 环境中指标配置的载体与传统裸机部署不同裸机下我们直接编辑${ALLUXIO_HOME}/conf/metrics.properties而 Helm Chart 部署时则通过values.yaml中的metrics段生成 metrics 配置文件并挂载进各组件容器。下面分别介绍两种 Sink 的落地方式。HTTP JSON Sink开箱即用的指标快照端口开启前置条件HTTP JSON Sink 依靠各组件自带的 Web 服务暴露指标核心前提只有一个——Web 端口可用Alluxio master 与 worker 的 Web 端口默认开启无需额外配置Alluxio 独立 Fuse 进程的 Web 端口默认不开启需要先在alluxio-site.properties或 Helm 的properties配置中设置alluxio.fuse.web.enabledtrue再启动 Fuse 进程。从源码可以印证这一设计WebServer.java 中默认挂载了MetricsServlet对应/metrics/json路径与PrometheusMetricsServlet对应/metrics/prometheus路径而 Fuse 的 Web 端口开关则对应配置项alluxio.fuse.web.enabled见 PropertyKey.java 中的FUSE_WEB_ENABLED定义。通过 kubectl exec 获取 JSON 指标快照在 Pod 内直接向本进程的 Web 端口发起 HTTP 请求即可拿到一份 JSON 格式的完整指标快照。通用命令模板$ kubectl exec COMPONENT_HOSTNAME -c CONTAINER_NAME -- curl 127.0.0.1:COMPONENT_WEB_PORT/metrics/json/各组件对应的容器名、默认 Web 端口与请求示例如下注意同一 Pod 内可能同时运行多个容器需要用-c指定组件Pod / 容器示例默认 Web 端口请求路径主 Masteralluxio-master-x/alluxio-master19999/metrics/json/Workeralluxio-worker-xxxxx/alluxio-worker30000/metrics/json/Job Masteralluxio-master-x/alluxio-job-master20002/metrics/json/Job Workeralluxio-worker-xxxxx/alluxio-job-worker30003/metrics/json/Fusealluxio-fuse-xxxxx49999/metrics/json/# 获取主 master 的指标默认 Web 端口 19999 $ kubectl exec alluxio-master-x -c alluxio-master -- curl 127.0.0.1:19999/metrics/json/ # 获取 worker 的指标默认 Web 端口 30000 $ kubectl exec alluxio-worker-xxxxx -c alluxio-worker -- curl 127.0.0.1:30000/metrics/json/ # 获取 job master 的指标默认 Web 端口 20002 $ kubectl exec alluxio-master-x -c alluxio-job-master -- curl 127.0.0.1:20002/metrics/json/ # 获取 job worker 的指标默认 Web 端口 30003 $ kubectl exec alluxio-worker-xxxxx -c alluxio-job-worker -- curl 127.0.0.1:30003/metrics/json/ # 获取 fuse 进程的指标默认 Web 端口 49999需已开启 fuse Web $ kubectl exec alluxio-fuse-xxxxx -- curl 127.0.0.1:49999/metrics/json/各默认端口均可在源码中得到佐证例如 master Web 端口在 PropertyKey.java 中MASTER_WEB_PORT的默认值为19999。源码视角/metrics/json 端点从何而来从实现上看MetricsServlet 同目录下的alluxio.metrics.sink.MetricsServlet负责将MetricsSystem.METRIC_REGISTRY中的指标以 JSON 形式序列化输出在 WebServer.java 中该 Servlet 的 handler 与主 ServletContextHandler 一并注册进 Jetty 的 Handler 链从而对外提供/metrics/json路径。也就是说只要组件 Web 服务在运行JSON 指标端点就天然可用无需任何 metrics 配置文件。Master Web UI 可视化把原始指标变成可读趋势除了通过 servlet 或自定义 metrics 配置拿到原始指标还可以在 Alluxio 主 master 的 Web 界面中以更直观的图表方式跟踪集群关键性能指标。该页面对应文档中的screenshot_generalMetrics.png展示的核心内容包括Alluxio 空间与根 UFS 空间百分比使用情况的时间序列集群聚合吞吐量的时间序列是判断 Alluxio 缓存有效性的关键指标集群累计的 RPC 调用次数与操作数按挂载点统计的累计 API 调用次数可用于量化命名空间虚拟化带来的延迟与成本收益。其中“Local Alluxio (Short-circuit) Read/Write”“Remote Alluxio Read/Write”“Under Filesystem Read/Write”等图表分别对应Cluster.BytesReadLocal、Cluster.BytesWrittenLocal、Cluster.BytesReadRemote、Cluster.BytesWrittenRemote、Cluster.BytesReadUfsAll、Cluster.BytesWrittenUfsAll等原始指标完整的指标释义可查阅 Metrics-List.md。访问 Web UIkubectl port-forwardPod 内的端口默认不对集群外部开放需要先把物理机端口转发到 master 的 Web 端口。假设主 master 运行在 Podalluxio-master-0中希望在节点master-node-1上用 8080 端口对外提供 master Web UI可在控制平面执行$ kubectl port-forward CONTROL_PLANE_HOSTNAME pods/alluxio-master-0 8080:19999转发完成后即可在浏览器访问http://leading_master_node_hostname:forwared_port/metrics例如http://master-node-1:8080/metrics。关于 Web UI 访问的更详细说明参见 Running-Alluxio-On-Kubernetes.md 的 “Access the Web UI” 一节。Prometheus Sink将 Alluxio 接入标准监控体系Prometheus 是广泛使用的监控与告警工具通过抓取scrapeHTTP 端点来持续采集指标变化。相比 JSON 快照的一次性查看Prometheus 接入适合长期、自动化的集群监控。第一步Helm Chart 中开启 Prometheus 指标Prometheus 格式的指标输出依赖PrometheusMetricsServlet被启用。在 Helm Chart 的value.yaml即 values.yaml中通过metrics段配置metrics: enabled: true PrometheusMetricsServlet: true podAnnotations: prometheus.io/scrape: true prometheus.io/masterWebPort: MASTER_WEB_PORT prometheus.io/jobMasterWebPort: JOB_MASTER_WEB_PORT prometheus.io/workerWebPort: WORKER_WEB_PORT prometheus.io/jobWorkerWebPort: JOB_WORKER_WEB_PORT prometheus.io/fuseWebPort: FUSE_WEB_PORT prometheus.io/path: /metrics/prometheus/其中MASTER_WEB_PORT、WORKER_WEB_PORT等占位符应替换为实际端口如 19999、30000并保持与 values.yaml 中注释示例prometheus.io/port: 19999、prometheus.io/jobPort: 20002、prometheus.io/workerPort: 30000、prometheus.io/path: /metrics/prometheus/一致。与 HTTP JSON Sink 相同若需要采集Fuse进程的 Prometheus 指标同样必须先把alluxio.fuse.web.enabled设置为true打开 Fuse Web 端口。Helm 模板如何把配置落到 Pod从 Chart 模板可以看出这套配置的完整流转链路alluxio-metrics.yaml当metrics.enabledtrue时生成名为release-metrics的 ConfigMap其metrics.properties数据段中PrometheusMetricsServlet.enabled为 true 时会写入sink.prometheus.classalluxio.metrics.sink.PrometheusMetricsServlet其他如 ConsoleSink、CsvSink、JmxSink、GraphiteSink、Slf4jSink 也在此按开关生成对应配置行alluxio-conf.yaml当metrics.enabledtrue时向 JVM 启动参数追加-Dalluxio.metrics.conf.file/config/metrics/metrics.properties让组件读取上述 metrics 配置文件statefulset.yaml 与 daemonset.yaml将-metrics-volume挂载到容器/config/metrics路径并把metrics.podAnnotations合并进 Pod 注解。注意 values.yaml 中metrics.enabled默认是false即默认不启用任何指标采集需要显式开启。源码视角PrometheusMetricsServlet 的实现PrometheusMetricsServlet.java 的实现非常直接常量SERVLET_PATH /metrics/prometheus定义了暴露路径构造函数将 Alluxio 的MetricRegistry通过DropwizardExports注册到 Prometheus 的CollectorRegistry从而把 Dropwizard 指标转换为 Prometheus 格式getHandler()返回一个 JettyServletContextHandler其 context path 为/metrics/prometheus并挂载 Prometheus 官方的MetricsServlet处理抓取请求。在 WebServer.java 中PrometheusMetricsServlet的 handler 与MetricsServletJSON、主 ServletContextHandler 一起被设置进 Jetty 的 Handler 链这就是各组件同时支持/metrics/json/与/metrics/prometheus/两个端点的原因。第二步配置 Prometheus 客户端prometheus.yml开启PrometheusMetricsServlet只解决了“端点可用”的问题要让 Prometheus 服务器真正抓取指标还需要在客户端配置prometheus.yml。Kubernetes 部署通常使用Pod 角色role: pod的服务发现配合注解与 relabel 规则筛选目标。下面是读取 master 指标的标准配置scrape_configs: - job_name: alluxio master kubernetes_sd_configs: - role: pod namespaces: names: - alluxio # Only look at pods in namespace named alluxio relabel_configs: # Only check the pods with role alluxio-master - source_labels: [__meta_kubernetes_pod_label_role] action: keep regex: alluxio-master # Only check the pods with annotation prometheus.io/scrape is true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true # Use the value of prometheus.io/path in podAnnotation for endpoint - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.) # Use the value of prometheus.io/masterWebPort in podAnnotation for port - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_masterWebPort] action: replace regex: ([^:])(?::\d)?;(\d) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: node - source_labels: [__meta_kubernetes_pod_label_release] action: replace target_label: cluster_name这段配置的 relabel 逻辑值得逐条理解筛选目标先按 Pod 标签rolealluxio-masterkeepregex: alluxio-master只保留 master Pod再按注解prometheus.io/scrapetrue过滤掉未开启采集的 Pod。Pod 上的role标签来自 Chart 模板——例如 statefulset.yaml 中 master 的标签是role: alluxio-masterdaemonset.yaml 中 worker 的标签是role: alluxio-worker改写抓取地址用 Pod 注解中的prometheus.io/path覆盖默认的__metrics_path__即/metrics/prometheus/并用prometheus.io/masterWebPort注解中的端口号拼接到__address__上regex: ([^:])(?::\d)?;(\d)、replacement: $1:$2将 “地址;端口” 重组为 “地址:端口”附加标签把 Pod 标签、命名空间、Pod 名、节点名、release 标签分别映射为namespace、pod_name、node、cluster_name等标签便于后续在 Prometheus/Grafana 中按维度聚合。Worker 指标配置读取 worker 指标时只需把role标签改为alluxio-worker端口注解改为prometheus.io/workerWebPortscrape_configs: - job_name: alluxio worker kubernetes_sd_configs: - role: pod namespaces: names: - alluxio # Only look at pods in namespace named alluxio relabel_configs: # Only look at the pods with role alluxio-worker - source_labels: [__meta_kubernetes_pod_label_role] action: keep regex: alluxio-worker # Only check the pods with annotation prometheus.io/scrape is true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true # Use the value of prometheus.io/path in podAnnotation for endpoint - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.) # Use the value of prometheus.io/workerWebPort in podAnnotation for port - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_workerWebPort] action: replace regex: ([^:])(?::\d)?;(\d) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: node - source_labels: [__meta_kubernetes_pod_label_release] action: replace target_label: cluster_nameJob Master 指标配置Job Master 进程与 Master 进程运行在同一个 master Pod 内因此按rolealluxio-master筛选但端口使用prometheus.io/jobMasterWebPort注解默认 20002scrape_configs: - job_name: alluxio job master kubernetes_sd_configs: - role: pod namespaces: names: - alluxio # Only look at pods in namespace named alluxio relabel_configs: # Only look at the pods with role alluxio-master - source_labels: [__meta_kubernetes_pod_label_role] action: keep regex: alluxio-master # Only check the pods with annotation prometheus.io/scrape is true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true # Use the value of prometheus.io/path in podAnnotation for endpoint - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.) # Use the value of prometheus.io/jobMasterWebPort in podAnnotation for port - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_jobMasterWebPort] action: replace regex: ([^:])(?::\d)?;(\d) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: node - source_labels: [__meta_kubernetes_pod_label_release] action: replace target_label: cluster_nameJob Worker 指标配置Job Worker 进程与 Worker 进程运行在同一个 worker Pod 内因此按rolealluxio-worker筛选但端口使用prometheus.io/jobWorkerWebPort注解默认 30003scrape_configs: - job_name: alluxio job worker kubernetes_sd_configs: - role: pod namespaces: names: - alluxio # Only look at pods in namespace named alluxio relabel_configs: # Only look at the pods with role alluxio-worker - source_labels: [__meta_kubernetes_pod_label_role] action: keep regex: alluxio-worker # Only check the pods with annotation prometheus.io/scrape is true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true # Use the value of prometheus.io/path in podAnnotation for endpoint - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.) # Use the value of prometheus.io/jobWorkerWebPort in podAnnotation for port - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_jobWorkerWebPort] action: replace regex: ([^:])(?::\d)?;(\d) replacement: $1:$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.) - source_labels: [__meta_kubernetes_namespace] action: replace target_label: namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: node - source_labels: [__meta_kubernetes_pod_label_release] action: replace target_label: cluster_name读取其他组件指标时只需要相应地替换role 标签值与Web 端口注解名如masterWebPort、workerWebPort、jobMasterWebPort、jobWorkerWebPort、fuseWebPort其余 relabel 规则可完全复用。第三步验证 Prometheus 端点快照配置完成后可在 Pod 内直接向 Prometheus 端点发起请求验证指标是否以 Prometheus 文本格式正常输出$ kubectl exec COMPONENT_HOSTNAME -c CONTAINER_NAME -- curl 127.0.0.1:COMPONEMT_WEB_PORT/metrics/prometheus/ # 例如获取主 master 的 Prometheus 格式指标默认 Web 端口 19999 $ kubectl exec alluxio-master-x -c alluxio-master -- curl 127.0.0.1:19999/metrics/prometheus/ # 获取 worker 的指标默认 Web 端口 30000 $ kubectl exec alluxio-worker-xxxxx -c alluxio-worker -- curl 127.0.0.1:30000/metrics/prometheus/ # 获取 job master 的指标默认 Web 端口 20002 $ kubectl exec alluxio-master-x -c alluxio-job-master -- curl 127.0.0.1:20002/metrics/prometheus/ # 获取 job worker 的指标默认 Web 端口 30003 $ kubectl exec alluxio-worker-xxxxx -c alluxio-job-worker -- curl 127.0.0.1:30003/metrics/prometheus/ # 获取 fuse 进程的指标默认 Web 端口 49999 $ kubectl exec alluxio-fuse-xxxxx -- curl 127.0.0.1:49999/metrics/prometheus/端点验证通过后即可在 Grafana、Datadog 等可视化平台中将这些端点配置为 Prometheus 数据源非 Kubernetes 环境下的静态 targets 配置方式可参考 Metrics-System.md 中的prometheus.yml示例metrics_path: /metrics/prometheus/static_configs。实践要点与注意事项Fuse 端口默认关闭无论 JSON 还是 Prometheus 方式采集 Fuse 指标都必须先设置alluxio.fuse.web.enabledtrue。这一约束在 PropertyKey.java 的FUSE_WEB_ENABLED与 Metrics-System.md 中均有明确说明。master 与 job master 共用 Pod二者通过-c指定不同容器alluxio-master/alluxio-job-master来区分Prometheus 抓取时则依靠不同端口注解masterWebPort/jobMasterWebPort区分因为两者的 Pod role 标签相同。指标名的变形Prometheus 处理指标名时会做转换通常把.替换为_有时还会追加后缀。建议先用上面的curl命令查看端点输出的原始指标名再在 Prometheus/Grafana 中引用避免因名称变形而查询不到。HA 集群的备 master默认情况下备 master 不提供指标服务如需备 master 也输出指标可在配置中启用alluxio.standby.master.metrics.sink.enabledtrue详见 Metrics-System.md。版本适用前提以上配置针对当前仓库对应版本编写端口默认值master 19999、job master 20002、worker 30000、job worker 30003、fuse 49999来自本文关联文档与 PropertyKey.java如使用其他版本请以实际部署版本的默认配置为准。通过以上步骤你可以在 Kubernetes 集群中同时拥有两种监控手段用 JSON 端点做临时排障的快照查看用 Prometheus 端点做持续采集与可视化并借助 Helm Chart 的metrics配置把整套指标体系随集群一起部署。更多 Alluxio 指标项的完整释义可查阅 Metrics-List.md。赞分享存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载相关推荐Kubeshark Worker 指标Metrics监控指南Prometheus 采集配置与完整指标解读Kubeshark Worker 指标Metrics监控指南Prometheus 采集配置与完整指标解读 Kubeshark 是一款基于 eBPF 的 K可观测性云原生网络MCP 服务Alluxio项目在Kubernetes上运行Spark作业的完整指南Alluxio项目在Kubernetes上运行Spark作业的完整指南 前言 Alluxio作为内存加速的虚拟分布式文件系统能够显著提升大数据处理框架的性能存储分布式文件系统缓存大数据Hermes WebUI实战完全指南5个高效故障解决方案深度解析Hermes WebUI实战完全指南5个高效故障解决方案深度解析 Hermes WebUI是连接Hermes Agent与用户界面的核心桥梁为开发者提供了强人工智能AI 应用AI Agent交互助手MCP 服务前端上一篇Design OS数据模型设计指南构建健壮产品架构的关键步骤下一篇Volume²能否完全取代Windows原生音量控制高级音量管理工具深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考