
# Volcano调度指标采集及Grafana仪表盘搭建
#### 应用场景
Volcano插件中提供了各种监控指标采集，能够全面监控volcano调度工作负载情况，具体请参见[Volcano默认监控指标说明]。您可以基于Volcano监控指标构建不同维度的监控看板，以便及时了解集群相关信息。
当前云原生监控插件暂不支持自动采集这些指标。若需在Grafana仪表盘中查看，需手动配置云原生监控插件采集相关数据，并构建相应的仪表盘。本文将介绍如何进行Volcano监控指标的采集以及相关仪表盘的搭建。
#### 前提条件
- 集群中已安装Volcano插件，具体安装步骤请参见[Volcano调度器](https://support.huaweicloud.com/usermanual-cce/cce_10_0193.html)。
- 集群中已安装云原生监控插件和Grafana插件，并且Grafana插件已启用"公网访问"，具体安装步骤请参见[云原生监控插件](https://support.huaweicloud.com/usermanual-cce/cce_10_0406.html)和[安装Grafana](https://support.huaweicloud.com/usermanual-cce/cce_10_0828.html)。
  - 如果您需[使用AOM数据源]，请在云原生监控插件中启用"监控数据上报至AOM服务"，并在Grafana插件中启用"数据源对接AOM"，同时**确保两者选择的AOM实例一致**。
  
  - 如果您需[使用Prometheus数据源]，请在云原生监控插件中开启"本地存储模式"。
   
 
#### 步骤一：采集Volcano监控指标
当前云原生监控插件暂不支持自动采集Volcano监控指标。如果您需要通过监控中心查看Volcano监控指标，需要手动配置云原生监控插件以采集相关指标。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中，单击"集群 \> 配置中心"。在右侧页面中，切换至"监控运维配置"页签。在"监控配置 \> 采集配置 \> PodMonitor"中，单击"管理"，并在出现的对话框中搜索"volcano-scheduler"，并启用此采集开关。 
   图1启用采集开关   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002554250303.png "点击放大")
   
   
   
3. 开启后，请在当前页面的"监控配置 \> 指标配置"中单击"立即刷新"获取数据。刷新后，在"监控配置 \> 采集配置 \> Targets"中，单击"查看详情"，能找到volcano-scheduler的采集记录为正常状态即可。 
   图2查看采集记录   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002554293999.png "点击放大")
   
   
   
 
 #### 步骤二：配置Grafana数据源
Grafana支持配置AOM数据源或Prometheus数据源：
- 使用AOM数据源：Grafana将自动生成"prometheus-aom"数据源，需确保其与Grafana的连通性正常。
- 使用Prometheus数据源：可直接使用Grafana自带的"prometheus"数据源，此时也需确保该数据源与Grafana的连通性正常。
 
- [使用AOM数据源]
  
  如果需要AOM数据源，请确保当前集群中的云原生监控插件已开启"监控数据上报至AOM服务"，Grafana插件已启用"数据源对接AOM"，并且两个插件对接同一个AOM实例。Grafana插件开启"数据源对接AOM"后，Grafana可视化界面将自动生成"prometheus-aom"数据源。请确保该数据源的连通性，连通测试通过即可正常使用AOM数据源。
  1. 在集群左侧导航栏中，单击"集群 \> 插件"。在右侧插件列表中，在Grafana插件模块单击"访问"，进入Grafana可视化界面。
  
  2. 首次访问Grafana可视化界面，需要输入用户名和密码，默认用户名与密码均为admin。输入用户名和密码后，您需要根据界面提示重置密码。
  
  3. 在Grafana可视化界面左上角单击![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002226836237.png "点击放大")，单击"Connections"左侧的![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002191237762.png) ，单击"Data sources"，进入Data sources界面。
  
  4. 在数据源列表中，单击"prometheus-aom"。在"prometheus-aom"数据源页面底部单击"Save\&test"，测试数据源是否连通。若提示"Successfully queried the Prometheus API"，则说明连通测试通过。 
     图3连通测试通过   
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002226863349.png "点击放大")
     
     
   
- [使用Prometheus数据源]
  
  使用Prometheus数据源时，需确保已开启云原生监控插件的"本地存储模式"。Grafana自带的"prometheus"数据源可以直接对接本地存储模式的Prometheus数据源，请确保数据源的连通性，连通性测试通过后即可正常使用。
  1. 在集群左侧导航栏中，单击"集群 \> 插件"。在右侧插件列表中，查找Grafana插件并在该插件模块中单击"访问"，进入Grafana可视化界面。
  
  2. 首次访问Grafana可视化界面，需要输入用户名和密码，默认用户名与密码均为admin。输入用户名和密码后，您需要根据界面提示重置密码。
  
  3. 在Grafana可视化界面左上角单击![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002226836237.png "点击放大")，单击"Connections"左侧的![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002191237762.png) ，单击"Data sources"，进入Data sources界面。
  
  4. 在数据源列表中，单击"prometheus"。在"prometheus"数据源页面底部单击"Save\&test"，测试数据源是否连通。若提示"Successfully queried the Prometheus API"，则说明连通测试通过。 
     图4连通测试通过   
     ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002193227954.png "点击放大")
     
     
   
#### 步骤三：配置Grafana Dashboard
Grafana Dashboard是一个用于集中监控和可视化数据的仪表盘工具，支持多种数据源，您可以通过图表、图形和告警功能实时掌握系统状态和业务指标。基于Volcano监控指标，Grafana可以搭建调度性能相关监控仪表盘。
Volcano根据一些常用场景提供了Grafana Dashboard配置JSON文件，您可以直接复制后导入，本文以"[volcano-scheduler-internal-dashboard](https://github.com/volcano-sh/volcano/blob/master/installer/helm/chart/volcano/templates/grafana.yaml#L67)"为例向您介绍如何配置Grafana Dashboard，如需要其他JSON配置请参见<https://github.com/volcano-sh/volcano/blob/8aba772412bed8bdd9c20b599f97ff7835e8f422/installer/volcano-monitoring.yaml#L499-L508>。
1. 导入Volcano的Grafana Dashboard，用于展示Volcano监控指标。 
   1. 在Grafana可视化界面单击![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002533794385.png "点击放大")，打开左侧菜单栏。单击"Dashboards"。在"Dashboards"页面右上角，单击"New"，下拉菜单中单击"Import"。
      图5创建New dashboard   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002503703798.png "点击放大") 
   
   2. 将[volcano-scheduler-internal-dashboard](https://github.com/volcano-sh/volcano/blob/master/installer/helm/chart/volcano/templates/grafana.yaml#L67)的JSON内容复制到dashboard框中，单击"Load"，然后再单击"Import"进行导入。
      图6复制JSON   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002503703960.png "点击放大") 
   
   
   
   
2. 完成后跳转到Volcano监控面板页面，根据[步骤二：配置Grafana数据源]中配置的Grafana数据源选择对应的Prometheus或AOM数据源。
   
   图7选择数据源   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535424629.png)
   观察到面板数据如下：
   图8观察面板   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535424735.png "点击放大")
   
   
3. 编辑具体的面板，调整普罗语句查询，这里以"E2E Job Scheduling Duration By JobName"示例，进入Edit Panel页面。 
   图9编辑面板   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535545357.png "点击放大")
   可以查看到当前面板的PromQL，此语句可根据情况调整：
   图10查看PromQL语句   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535425373.png "点击放大")
   如修改为根据队列名称计算：*avg by (queue) (volcano_e2e_job_scheduling_duration)*，然后单击"Run queries"。
   图11修改PromQL语句   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002503545596.png "点击放大")
   若需要保存修改则单击面板右上角的"Save"和"Apply"。
   图12保存修改   
   ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535425429.png "点击放大")
   
   
4. 在当前面板内新增可视化面板。 
   1. 右侧单击"Add"，并在下拉菜单中单击"Visualization"，创建一个新面板。
      图13新增面板   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002503725322.png "点击放大") 
   
   2. 在"Edit panel"页面左下方"Query"页签中，"Data source"选择[步骤二：配置Grafana数据源]中配置的数据源。单击"A"左侧![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002503740774.png)，在展开内容的右侧单击"Code"，并在"Metrics browser"中输入对应的PromQL语句，用于收集数据。
      图14编辑面板参数   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002503565520.png "点击放大") 
   
   3. 在"Edit panel"页面右上方切换面板类型至"Table"，并在"Panel options \> Title"中设置面板标题，本示例标题设置为"Task Latency P95"，您可以根据需求自定义。
      图15设置面板标题   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535565363.png "点击放大") 
   
   4. 在右上角单击"Save"，在弹出的"Save dashboard"页面中再次单击"Save"，保存面板配置。在右上角单击"Apply"，返回Dashboard页面，此时新面板已创建。
      图16保存面板   
      ![](https://support.huaweicloud.com/bestpractice-cce/zh-cn_image_0000002535565395.png "点击放大") 
   
   
   
   
 
 #### Volcano默认监控指标说明
| 指标名                                                     | 类型           | 说明                                                  |
|:---|:---|:---|
| ``` volcano_e2e_scheduling_latency_milliseconds ```     | Histogram    | 端到端调度器总调度耗时（包含调度算法 + 绑定 Pod）单位 ms                   |
| ``` volcano_e2e_job_scheduling_latency_milliseconds ``` | Histogram    | 每个 Job 的调度延迟，单位 ms                                  |
| ``` volcano_e2e_job_scheduling_duration ```             | GaugeVec     | 某 Job 的调度总耗时（单位：ms），含 job_name, queue, namespace 标签 |
| ``` volcano_e2e_job_scheduling_start_time ```           | GaugeVec     | Job 开始调度的时间（Unix 时间戳）                               |
| ``` volcano_e2e_job_scheduling_last_time ```            | GaugeVec     | Job 最后一次调度尝试的时间                                     |
| ``` volcano_plugin_scheduling_latency_milliseconds ```  | HistogramVec | 各个 Plugin 的调度耗时，标签：plugin, OnSession（阶段）            |
| ``` volcano_action_scheduling_latency_milliseconds ```  | HistogramVec | 各个调度阶段 Action 的耗时，标签：action                         |
| ``` volcano_task_scheduling_latency_milliseconds ```    | Histogram    | 单个 Task 的调度耗时（ms）                                   |
| ``` volcano_pod_preemption_victims ```                  | Gauge        | 被抢占的 Pod 数量（调度器为了优先级抢占资源）                           |
| ``` volcano_total_preemption_attempts ```               | Counter      | 累计的抢占尝试次数                                           |
| ``` volcano_unschedule_task_count ```                   | GaugeVec     | 当前无法调度的 task 数量（标签：job_id）                          |
| ``` volcano_unschedule_job_count ```                    | Gauge        | 当前无法调度的 job 总数                                      |
   
#### Volcano指标相关PromQL语句
**性能相关指标**
- 调度整体时延（E2E）：
  
  | 监控面板名称                                   | PromQL 语句                                                                                                   | 指标说明                                                           |
  |:---|:---|:---|
  | Scheduler E2E Scheduling Latency P95     | ``` histogram_quantile(0.95, sum(rate(volcano_e2e_scheduling_latency_milliseconds_bucket[5m])) by (le)) ``` | Volcano Scheduler从Job进入调度到完成一次完整调度决策的端到端调度耗时P95，反映整体调度性能是否出现长尾 |
  | Scheduler E2E Scheduling Latency Heatmap | ``` sum(rate(volcano_e2e_scheduling_latency_milliseconds_bucket[5m])) by (le) ```                           | E2E调度延迟的直方图分布，用于观察延迟分布是否出现抖动或长尾扩散                              |
     
  
- Job 级调度时延：
  
  | 监控面板名称                                          | PromQL 语句                                                                             | 指标说明                                                     |
  |:---|:---|:---|
  | E2E Job Scheduling Duration By JobName (Latest) | ``` avg by (job_name) (volcano_e2e_job_scheduling_duration) ```                       | 按Job维度统计的平均调度耗时，用于定位具体慢Job，也可修改为其他维度如queue、job_namespace |
  | E2E Job Scheduling Latency Heatmap (Latest)     | ``` sum(rate(volcano_e2e_job_scheduling_latency_milliseconds_bucket[5m])) by (le) ``` | Job级调度延迟分布热力图，用于观察Job调度是否存在整体延迟上升                        |
     
  
- 抢占（Preemption）相关指标：
  
  | 监控面板名称                     | PromQL 语句                                           | 指标说明                                       |
  |:---|:---|:---|
  | Preemption Attempts Rate   | ``` rate(volcano_total_preemption_attempts[5m]) ``` | 单位时间内Volcano触发的抢占尝试次数，数值升高通常意味着资源紧张或队列竞争激烈 |
  | Current Preemption Victims | ``` volcano_pod_preemption_victims ```              | 当前被标记为抢占者（Victim） 的Pod数量，反映抢占影响面           |
     
  
- Plugin 级调度耗时：
  
  | 监控面板名称                                              | PromQL 语句                                                                                                                         | 指标说明                                                    |
  |:---|:---|:---|
  | Plugin Scheduling Latency P95 By Plugin / OnSession | ``` histogram_quantile(0.95, sum(rate(volcano_plugin_scheduling_latency_milliseconds_bucket[5m])) by (le, plugin, OnSession)) ``` | 按Plugin + OnSession维度统计的调度插件执行耗时P95，用于定位慢插件或Session阶段异常 |
     
  
- Action 级调度耗时：
  
  | 监控面板名称                                  | PromQL 语句                                                                                                              | 指标说明                                                        |
  |:---|:---|:---|
  | Action Scheduling Latency P95 By Action | ``` histogram_quantile(0.95, sum(rate(volcano_action_scheduling_latency_milliseconds_bucket[5m])) by (le, action)) ``` | 各个调度Action（allocate/preempt/reclaim等） 的执行耗时P95，是定位调度慢因的核心指标 |
     
  
- 集群中作业调度情况：
  
  | 监控面板名称 | PromQL 语句                             | 指标说明             |
  |:---|:---|:---|
  | -      | ``` volcano_unschedule_job_count ```  | 集群内未调度成功的vcjob数量 |
  | -      | ``` volcano_unschedule_task_count ``` | 集群内未调度的Pod数量     |
     
  
**队列相关指标（开启capacity插件后才可采集到）**
- Queue CPU：Request / Allocated / Deserved
  
  | 监控面板名称              | PromQL 语句                                 | 指标说明                    |
  |:---|:---|:---|
  | Queue CPU Request   | ``` volcano_queue_request_milli_cpu ```   | Queue中所有Pod申请的CPU总量（毫核） |
  | Queue CPU Allocated | ``` volcano_queue_allocated_milli_cpu ``` | Queue当前已经分配并使用的CPU资源量   |
  | Queue CPU Deserved  | ``` volcano_queue_deserved_milli_cpu ```  | Queue配置的CPU应得量          |
     
  
- Queue Memory：Request / Allocated / Deserved
  
  | 监控面板名称                 | PromQL 语句                                    | 指标说明               |
  |:---|:---|:---|
  | Queue Memory Request   | ``` volcano_queue_request_memory_bytes ```   | Queue中所有Pod申请的内存总量 |
  | Queue Memory Allocated | ``` volcano_queue_allocated_memory_bytes ``` | Queue已分配并使用的内存     |
  | Queue Memory Deserved  | ``` volcano_queue_deserved_memory_bytes ```  | Queue配置的内存应得量      |
     
  
- Queue Scalar（扩展资源，以GPU为例）：Request / Allocated / Deserved
  
  | 监控面板名称           | PromQL 语句                                                                   | 指标说明               |
  |:---|:---|:---|
  | Scalar Request   | ``` volcano_queue_request_scalar_resources{resource="nvidia.com/gpu"} ```   | Queue中所有Pod申请的GPU数 |
  | Scalar Allocated | ``` volcano_queue_allocated_scalar_resources{resource="nvidia.com/gpu"} ``` | Queue已分配使用的GPU数量   |
  | Scalar Deserved  | ``` volcano_queue_deserved_scalar_resources{resource="nvidia.com/gpu"} ```  | Queue配置的GPU应得量     |
     
  
- Queue Capacity vs Real Capacity（CPU）
  
  | 监控面板名称            | PromQL 语句                                     | 指标说明             |
  |:---|:---|:---|
  | CPU Capacity      | ``` volcano_queue_capacity_milli_cpu ```      | Queue理论上配置的CPU上限 |
  | CPU Real Capacity | ``` volcano_queue_real_capacity_milli_cpu ``` | 实际可用的CPU上限       |
     
  
- Queue Capacity vs Real Capacity（Memory）
  
  | 监控面板名称               | PromQL 语句                                        | 指标说明            |
  |:---|:---|:---|
  | Memory Capacity      | ``` volcano_queue_capacity_memory_bytes ```      | Queue理论上配置的内存上限 |
  | Memory Real Capacity | ``` volcano_queue_real_capacity_memory_bytes ``` | 实际可用内存上限        |
     
  
- Queue Capacity vs Real Capacity（Scalar , 以GPU为例）
  
  | 监控面板名称               | PromQL 语句                                                                       | 指标说明             |
  |:---|:---|:---|
  | Scalar Capacity      | ``` volcano_queue_capacity_scalar_resources{resource="nvidia.com/gpu"} ```      | Queue理论上配置的GPU上限 |
  | Scalar Real Capacity | ``` volcano_queue_real_capacity_scalar_resources{resource="nvidia.com/gpu"} ``` | 实际可用GPU上限        |
     
  
- Queue Share
  
  | 监控面板名称      | PromQL 语句                   | 指标说明                                                     |
  |:---|:---|:---|
  | Queue Share | ``` volcano_queue_share ``` | Queue的实际使用率（allocated/deserved），未配置deserved的队列share值始终为1 |
     
  
 
