跳到主要内容
版本:3.1.0(预览)

监控系统如何工作

Ambari 3.1.0 采集 Linux 主机以及已接入的 Hadoop、HBase、Hive 进程指标。Server 决定采集什么,Agent 提供指标端点,VMAGENT 定时抓取,VictoriaMetrics 保存并查询历史数据。浏览器通过 Ambari 查询,无需持有 VictoriaMetrics 凭据,也无需直接连通存储服务。

一个“样本”是某项指标在某个时刻的值,例如一台主机当前的可用内存。“时序”是同一项指标在相同标签下随时间变化的记录;标签用来区分集群、主机和组件。VMAGENT 定期向端点请求新的样本,这个动作称为“抓取”。

Ambari 3.1.0 监控的配置下发、指标采集、时序存储和查询架构

采集配置与指标样本分开传递;查询通过 Ambari 返回存储中的历史指标,浏览器不直接连接 VictoriaMetrics。

配置和指标值走不同的路径:Server 向 Agent 下发主机、端点、限制及 JMX 转换规则等配置;实际组件指标在 VMAGENT 每次抓取时读取,Agent 不缓存这些指标值,也不会将它们塞进心跳消息。

每个组件负责什么

组件职责保存什么
Stack 服务定义描述读取哪个组件端点、如何转换 JMX 响应随 Stack 提供的描述符和 JMX 转换配置
Ambari Server解析配置、发布目标列表、检查查询权限、管理仪表盘元数据数据库中的管理配置、仪表盘和数据源定义
Ambari Agent读取 Linux 主机统计,按请求获取已分配组件的指标最近一次有效的采集配置,不保存指标历史
VMAGENT发现目标、抓取端点、筛选样本并添加标签、远程写入等待写入存储的样本所使用的本地发送队列
VictoriaMetrics保存历史样本并执行查询按配置保留期限保存的时序数据
VMAUTH,可选在存储写入和查询前提供认证与路由网关网关配置,不保存指标历史
React 监控页面通过 Ambari API 展示目标健康状态、查询和仪表盘仪表盘编辑通过 Ambari 持久化,不仅保存在浏览器中

Ambari Agent 和 VMAGENT 是两个不同的进程。 前者已经运行在受管主机上,负责提供指标;后者作为监控服务的一部分部署,负责请求这些指标并发送到存储。并不要求每台受管主机都单独部署一个 VMAGENT。

采集配置如何到达主机

Stack 的 telemetry.json 描述符定义监控接入方式,包括组件端点(/prom/jmx)、实际配置项、可选的高可用配置前缀、请求限制,以及带有类型和转换规则的 JMX 配置。JMX 配置明确指定读取哪些 ObjectName 和数值属性、如何转换单位和指标名称,以及最多输出多少条时序。动态 ObjectName 只有在规则明确限定来源时,才能作为标签输出,避免标签无限增长。

Ambari Server 验证描述符与 JMX 配置,读取主机实际生效的配置,选择端口和 HTTP 或 HTTPS,解析带高可用后缀的属性,并替换 Kerberos 主体中的 _HOST。Server 为每个组件端点生成稳定的路由 ID,不能用这个 ID 选择任意 URL,未知路由返回 404。目标 URL 不允许包含凭据、查询参数或片段。

每份采集配置包含组件、服务、主机、数据格式、URL、超时、响应大小与并发限制、认证配置引用,以及 JMX 配置校验值。Server 通过现有 STOMP 通道的 telemetry-v1 能力及 /telemetry 端点发送配置。Agent 只保留当前生效的配置和被引用的 JMX 配置文件,并使用文件内容的校验值识别后者。

集群配置变更、组件或主机添加与移除、Stack 升级完成后,Server 会重新生成采集配置。Agent 注册时立即比较配置校验值,之后每五分钟核对一次;即使漏掉了一次通知,也能重新获取配置,不需要重启 Server 或 Agent。

Agent 先验证整份更新,再启用新配置。配置和规则通过临时文件、fsync 及原子重命名写入,避免更新中断后用不完整文件覆盖正常配置。无效或不完整的更新不会替换最近一次有效配置;启动时还会核对引用的 JMX 配置文件校验值。

主机和组件指标如何采集

Agent 指标服务在 Linux 上默认启用,通常监听 0.0.0.0:9101,由 ambari-agent.ini[prometheus] 配置段控制。端口配置格式错误或超出范围时回退到 9101;端口绑定失败只影响指标服务线程,不会终止整个 Agent 进程。

端点返回内容
/metricsLinux 主机指标及指标服务自身的运行指标
/metrics/components/{routeId}一个已分配组件目标的指标
/-/healthy指标服务自身的健康状态

主机采集器读取 /procstatvfs,获取 CPU、内存、交换空间、负载、运行时长、启动时间、进程状态和线程总数,以及文件系统容量、inode、磁盘读写次数与吞吐量、网络流量与错误和丢包、上下文切换、中断、文件描述符、熵、OOM 终止、连接跟踪和 TCP 状态。内核没有提供的可选文件会单独跳过,不会导致所有采集失败。指标不携带每个进程、命令行、套接字、用户或容器的身份标签,以限制时序数量。

VMAGENT 调用 GET /api/v1/clusters/{cluster}/prometheus_targets 获取需要采集的目标,这就是 HTTP 服务发现。Server 为每个主机指标端点和组件路由返回独立目标组。__metrics_path__ 指定 /metrics 或组件路径;clusterhostservicecomponentambari_target 等标签以 Server 返回的身份信息为准。主机目标没有服务或组件标签。VMAGENT 随后执行 HTTP 抓取,应用允许列表和标签调整规则,再远程写入样本。

一次采集的完整过程

以运行 DataNode 的主机为例,一次采集按以下顺序进行:

  1. VMAGENT 从 Server 目标列表中取得主机端点和独立的 DataNode 端点。它们可以使用同一个 Agent 地址,但请求路径不同。
  2. VMAGENT 请求主机端点,Agent 读取当前 Linux 统计并返回主机样本。
  3. VMAGENT 单独请求已分配的 DataNode 路由,Agent 此时才读取 DataNode 的指标端点并验证响应。
  4. VMAGENT 给样本附上目标的集群和主机身份,应用配置的筛选规则,并将接受的样本放入远程写入队列。
  5. VictoriaMetrics 接收并保存样本。之后的仪表盘查询读取这段历史,而不是要求 DataNode 重新提供过去时刻的数值。

托管服务默认每 30 秒刷新目标列表、每 30 秒抓取一次,抓取超时为 10 秒。Agent 请求组件的超时是另一项限制,默认为 5 秒。Server 的 prometheus.agent.metrics.port 必须与 Agent 实际监听端口一致。

对于原生指标,Agent 验证非空 UTF-8 Prometheus 文本,保持指标名称和标签不变。对于 JMX,Agent 解析 JSON 的 beans 数组,按结构化 ObjectName 匹配规则并输出数值;缺失属性会单独跳过。JSON 无效、输出时序重复、没有匹配规则或时序数量超限,都会导致该组件路由本次采集失败。

已接入的组件

初始 BIGTOP 3.2.0 Stack 集成覆盖以下七种组件:

组件端点及默认端口Agent 处理方式
HDFS NameNode原生 /prom验证后直接传递
HDFS DataNode原生 /prom验证后直接传递
YARN ResourceManager原生 /prom验证后直接传递
YARN NodeManagerWeb UI /jmx,8042/8044按 JMX 配置转换
HBase Master/jmx,16010按 JMX 配置转换
HBase RegionServer/jmx,16030按 JMX 配置转换
HiveServer2Web UI /jmx,10002按 JMX 配置转换

Hadoop 原生指标需要启用 hadoop.prometheus.endpoint.enabled=true。这套集成特意为 NodeManager 选择稳定的 Web UI /jmx 端点。Hive 根据 hive.server2.webui.use.ssl 选择 HTTPS。每个路由独立工作,一个组件故障不会隐藏主机指标或其他组件指标。

历史指标存在哪里

两种存储方式都由 VMAGENT 负责采集。在 single 模式下,VICTORIAMETRICS_SERVER 同时接收写入、保存样本和处理查询。在 cluster 模式下,VMINSERT 分发写入,VMSTORAGE 持久保存样本,VMSELECT 根据租户执行查询。可选的 VMAUTH 可以放在写入和查询入口之前。

受 Agent 路由并发限制约束,托管 VMAGENT 最多安排两个采集成员重复抓取同一目标。这与 VictoriaMetrics 的 replication_factor 不同:后者控制样本在 VMSTORAGE 节点之间保存几份。当两个 VMAGENT 重复采集时,托管存储按采集间隔对重复样本去重。VMAGENT 本地队列可缓冲已采集、尚未成功写入的样本,但不是 Agent 对指标值的缓存。

保留期限、存储路径、副本数、租户 ID(默认为 0)和部署方式都是独立的 Stack 配置。没有显式覆盖 URL 时,Stack 根据已分配的组件生成写入和查询地址。

页面如何查询并显示指标

Ambari Server 保存按集群区分的数据源定义,并提供带请求限制的兼容 Prometheus 查询代理。React 调用 /api/v1/metrics/{datasourceId}/api/v1/queryquery_range,VictoriaMetrics 执行查询并返回已保存的样本。仪表盘和数据源定义属于 Ambari 元数据,不是 VictoriaMetrics 中的时序样本。

页面将每个面板绑定到 AppContext.clusterName。Linux 主机查询使用 Server 确定的 clusterambari_target="host" 标签。内置主机总览和主机详情仪表盘直接使用 ambari_agent_* 指标,不提供旧 Categraf 或 Telegraf 别名。计数器面板使用 rateincrease,计算时间窗口动态变化但至少为 120 秒;当前值类型的指标则直接查询。

保留的直接 JMX metrics.json 属性用于管理操作判断,不用于仪表盘或 VictoriaMetrics 存储:

组件保留的属性
NameNodeHAStateClusterIdSafemodeLastCheckpointTimeJournalTransactionInfo
JournalNodeJournalsStatus
HBase MasterIsActiveMasterliveRegionServersdeadRegionServers

这些属性继续支持高可用角色、安全模式、集群身份、检查点、日志和主节点相关操作,与 telemetry.json 定义的指标样本分开处理。

网络访问与权限

Agent 指标服务没有应用层身份验证,必须绑定到监控网络接口,或使用主机防火墙限制访问。服务发现、数据源和仪表盘读取以及指标查询要求 CLUSTER.VIEW_METRICS;保存仪表盘要求 CLUSTER.MANAGE_USER_PERSISTED_DATA;管理数据源要求 AMBARI.MANAGE_SETTINGS

Kerberos 采集配置只包含已解析的主体和本地 keytab 路径,不包含 keytab 内容或密码。Agent 的 Kerberos 辅助程序禁用重定向、检查 HTTP 错误、限制响应大小并验证 TLS;路由没有专用 CA 路径时继承 Agent 配置的 CA。浏览器指标查询通过 Ambari Server,不直接访问存储。

故障时会发生什么

故障哪些功能仍可工作检查重点
一个组件停机或返回无效指标其他组件路由和 Linux 主机指标仍可独立采集该目标的抓取状态、组件进程、端点和认证
新采集配置无效Agent 保留最近一次有效配置配置重新加载状态、Server 和 Agent 日志
Agent 指标端口无法绑定Agent 主进程继续运行,但该指标服务不可用端口冲突、绑定地址和指标服务健康状态
存储暂时不可达VMAGENT 可将已采集样本放入队列等待发送队列容量、本地磁盘、存储可用性及远程写入错误;缓冲不代表无限期保证数据不丢失
仪表盘查询失败指标采集是独立路径,可能仍在进行数据源地址与凭据、查询权限、时间范围及存储查询服务

指标服务自身健康,不代表所有组件都已抓取成功。应查看每个目标的 up 结果,以及 Agent 的路由错误、最近成功采集时间、JMX 转换失败和主机采集器健康状态。还要检查存储写入;抓取成功并不能证明远程写入也已成功。

每个路由都有独立的超时、响应大小、并发、重定向、认证和转换处理。默认超时 5 秒、响应上限 32 MiB、每个路由最多两个并发请求;允许范围分别为 1..60 秒、1 KiB..64 MiB 和 1..16。超限或失败会返回非 2xx 响应,VMAGENT 据此将该目标记录为采集失败,主机与其他组件路由不受该次失败影响。

HTTP 服务发现结果按采集配置版本缓存,并使用 ETag 核对是否变化。这只缓存配置,不缓存样本。查询代理限制表达式最长 65,536 字符、范围查询最多 11,000 个点、每批最多 64 个查询、响应最大 16 MiB、请求体最大 8 MiB、超时最多 60 秒,且不跟随重定向。

当前架构不承诺旧指标别名、Grafana 仪表盘或 Windows 主机采集。HBase 原生 /prometheus 只有在核对具体版本的输出和认证行为之后,才能替换 JMX。

操作步骤见部署查询与仪表盘服务接入迁移。实现依据为固定修订的 PR #4182 架构源码说明