ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Alluxio 监控与指标系统(Metrics System)实战指南

Alluxio 监控与指标系统(Metrics System)实战指南 存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, 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 与 SinkAlluxio 的指标系统遵循经典的 Source 生成指标、Sink 消费指标 模型Source指标源负责产生原始指标数据例如 Alluxio 的JvmSourceJVM 相关指标和OperationSystemGaugeSet操作系统指标。这些 Source 被注册到全局的MetricRegistry中见 MetricsSystem.java初始化时即注册了 JVM 的 GC、内存、类加载、线程等 Gauge。Sink指标出口决定指标最终被投递到哪里例如控制台、CSV 文件、JMX、Graphite 或 HTTP Servlet。Polling轮询指标系统周期性轮询 Source将指标记录批量传递给各个 Sink。在MetricsSystem中Sink 通过反射加载Class.forName(classPath)并实例化后启动见 MetricsSystem.java。指标实例InstanceAlluxio 的指标按组件划分为不同的 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.enabledtrue该属性定义于 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.filexxx否则默认从${ALLUXIO_HOME}/conf目录自动加载。配置文件语法metrics.properties使用以下语法定义 Sinksink.[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.enabledtrueFUSE 进程才会提供 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.enabledtrue 并启动独立 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.classalluxio.metrics.sink.PrometheusMetricsServlet集群部署时该文件需分发到所有节点修改配置后需重启 Alluxio 服务若要在独立 FUSE 进程上启用 Prometheus Sink同样需在${ALLUXIO_HOME}/conf/alluxio-site.properties中设置alluxio.fuse.web.enabledtrue后再启动 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 客户端来抓取端点这种方式特别推荐用于对接 Grafanascrape_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.classalluxio.metrics.sink.CsvSink # CsvSink 的轮询周期 sink.csv.period1 sink.csv.unitseconds # 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.BytesReadDomainLocal Alluxio (Domain Socket) WriteCluster.BytesWrittenDomainLocal Alluxio (Short-circuit) ReadCluster.BytesReadLocalLocal Alluxio (Short-circuit) WriteCluster.BytesWrittenLocalRemote Alluxio ReadCluster.BytesReadRemoteRemote Alluxio WriteCluster.BytesWrittenRemoteUnder Filesystem ReadCluster.BytesReadUfsAllUnder 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 UIGrafana 是常用的时序数据可视化与分析软件可更直观地展示 Alluxio 收集的内存、存储与已完成操作等各类指标变化。Grafana 支持读取 Prometheus 数据按以下步骤即可快速搭建基于 Grafana Prometheus 的 Alluxio 监控按 Grafana 官方安装指南安装 Grafana下载 Alluxio 的 Grafana 模板 JSON 文件Dashboard ID13467导入模板 JSON 文件创建 Dashboard参考官方 Dashboard 导入文档为 Grafana 添加 Prometheus 数据源自定义名称如prometheus-alluxio按照 Dashboard 设置说明修改变量并保存Dashboard变量值alluxio_datasource你的 Prometheus 数据源名称如步骤 4 中的prometheus-alluxiomastersprometheus.yml中配置的 Masterjob_name如alluxio masterworkersprometheus.yml中配置的 Workerjob_name如alluxio workeralluxio_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 UIDatadog 同样是类似 Grafana 的指标分析与可视化软件支持读取 Prometheus 数据。按以下步骤即可快速搭建基于 Datadog Prometheus 的 Alluxio 监控按 Datadog 官方文档安装并运行 Datadog Agent修改conf.d/openmetrics.d/conf.yaml文件该文件位置可在 Agent 配置目录文档中查找。示例conf.yamlinit_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 ]重启 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.jar8080: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.javaPrometheus / Grafana / OpenTelemetry 的容器化配套参考 integration/metrics。赞分享存储分布式文件系统缓存大数据【免费下载链接】alluxioAlluxio, data orchestration for analytics and machine learning in the cloud项目地址https://gitcode.com/gh_mirrors/al/alluxio点击查看免费下载相关推荐Alluxio 度量指标系统Metrics System完全指南从 Sink 配置到集群监控实战Alluxio 度量指标系统Metrics System完全指南从 Sink 配置到集群监控实战 导读 Alluxio 内置一套基于 Coda Hale存储分布式文件系统缓存大数据Docker4Drupal核心组件解析Nginx、MariaDB与PHP容器配置实战Docker4Drupal核心组件解析Nginx、MariaDB与PHP容器配置实战 Docker4Drupal是一套基于Docker的Drupal开发环境解10分钟搭建Alluxio Metrics监控体系PrometheusGrafana可视化实践指南你是否还在为分布式存储系统的性能调优和问题排查而烦恼本文将带你快速搭建Alluxio Metrics监控体系通过Prometheus收集指标并使用Grafa存储分布式文件系统缓存大数据上一篇Onekey终极指南3分钟解锁Steam游戏DLC的完整方案下一篇5个维度深度掌握SQLyog解锁高效MySQL数据库管理新境界创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表