使用信息中心监控弹性事件

如果您对 Gemini Enterprise Agent Platform 训练集群感兴趣,请与您的销售代表联系以获取访问权限。

训练集群会对节点运行 自动健康检查 ,并在检查失败时进行干预。例如,在识别出致命的 XID 错误后,它可能会排空节点、将受影响的 Slurm 作业重新排队,并重新创建节点。这些干预措施中的每一项都会作为弹性事件写入项目的日志。

本页面将向您介绍如何构建自定义 Cloud Monitoring 信息中心,该信息中心会在计算节点的 Slurm 状态旁边绘制这些 弹性事件的图表,以便您 了解服务采取了哪些恢复操作以及这些操作与集群 状态之间的关联。该信息中心包含两个图表:

  • Slurm 节点状态:每个 Slurm 状态的节点数随时间的变化情况, 取自 hypercomputecluster.googleapis.com/slurm/node_state 指标。
  • 弹性事件:弹性事件的计数,按事件 类型细分,取自您在下一部分中创建的基于日志的指标。
一个包含两个图表的信息中心:每个 Slurm 状态下的节点随时间的变化,以及按事件类型统计的弹性事件堆叠条形图。
图 1.将这两个图表结合起来解读,可以显示恢复的效果:空闲节点的计数会下降,而服务会替换未通过序言健康检查的节点,并且导致该节点失败的事件会显示在下方。

准备工作

安装并初始化 Google Cloud CLI,然后设置包含训练集群的项目:

gcloud auth login
gcloud config set project PROJECT_ID

PROJECT_ID 替换为您的项目 ID。

所需角色

如需获得创建基于日志的指标和信息中心所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色具有 创建基于日志的指标和信息中心所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建基于日志的指标和信息中心,需要具备以下权限:

  • 创建基于日志的指标: logging.logMetrics.create
  • 创建信息中心: monitoring.dashboards.create

您也可以使用自定义角色或其他预定义角色来获取这些权限。

创建基于日志的指标

弹性事件会记录在项目的日志中,其中每个事件都带有以 RESILIENCE_EVENT_TYPE_ 为前缀的 event_type 标签。如需在 Logs Explorer 中查看原始事件,请使用以下查询:

labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"

Cloud Monitoring 无法直接绘制日志条目的图表,因此您首先需要将此 查询转换为基于日志的指标

  1. 将以下配置保存到名为 resilience_metric.yaml 的文件中:

    name: training_cluster_resilience_events
    description: "Resilience events on training cluster nodes (VM instances)."
    filter: 'resource.type="gce_instance" AND labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"'
    metricDescriptor:
      metricKind: DELTA
      valueType: INT64
      unit: "1"
      labels:
        - key: cluster_id
          valueType: STRING
          description: "The ID of the training cluster."
        - key: event_type
          valueType: STRING
          description: "The type of resilience event."
        - key: slurm_job_name
          valueType: STRING
          description: "The name of the Slurm job that triggered the resilience event, if applicable."
        - key: slurm_job_id
          valueType: STRING
          description: "The ID of the Slurm job that triggered the resilience event, if applicable."
        - key: slurm_job_partition
          valueType: STRING
          description: "The partition that the resilience event acts on."
    labelExtractors:
      cluster_id: "EXTRACT(labels.cluster_id)"
      event_type: "EXTRACT(labels.event_type)"
      slurm_job_name: "EXTRACT(labels.slurm_job_name)"
      slurm_job_id: "EXTRACT(labels.slurm_job_id)"
      slurm_job_partition: "EXTRACT(labels.slurm_job_partition)"
    

    labelExtractors 字段会将每个日志条目的标签复制到指标中,这样您就可以按事件类型、集群或 Slurm 作业细分图表。

  2. 创建指标:

    gcloud logging metrics create training_cluster_resilience_events \
        --config-from-file=resilience_metric.yaml
    
  3. 验证指标是否存在:

    gcloud logging metrics describe training_cluster_resilience_events
    

    您还可以在 Google Cloud 控制台的 **基于日志的指标** 页面中确认该指标。

创建信息中心

  1. 将以下配置保存到名为 resilience_dashboard.json 的文件中:

    {
      "displayName": "Training Clusters Resilience Dashboard",
      "mosaicLayout": {
        "columns": 48,
        "tiles": [
          {
            "height": 16,
            "width": 24,
            "widget": {
              "title": "Slurm node states",
              "xyChart": {
                "chartOptions": {
                  "mode": "COLOR"
                },
                "dataSets": [
                  {
                    "minAlignmentPeriod": "60s",
                    "plotType": "LINE",
                    "targetAxis": "Y1",
                    "timeSeriesQuery": {
                      "timeSeriesFilter": {
                        "aggregation": {
                          "alignmentPeriod": "60s",
                          "crossSeriesReducer": "REDUCE_SUM",
                          "groupByFields": [
                            "metric.label.\"state\""
                          ],
                          "perSeriesAligner": "ALIGN_MEAN"
                        },
                        "filter": "metric.type=\"hypercomputecluster.googleapis.com/slurm/node_state\" resource.type=\"gce_instance\""
                      }
                    }
                  }
                ],
                "yAxis": {
                  "scale": "LINEAR"
                }
              }
            }
          },
          {
            "yPos": 16,
            "height": 16,
            "width": 24,
            "widget": {
              "title": "Resilience events",
              "xyChart": {
                "chartOptions": {
                  "mode": "COLOR"
                },
                "dataSets": [
                  {
                    "minAlignmentPeriod": "60s",
                    "plotType": "STACKED_BAR",
                    "targetAxis": "Y1",
                    "timeSeriesQuery": {
                      "timeSeriesFilter": {
                        "aggregation": {
                          "alignmentPeriod": "60s",
                          "crossSeriesReducer": "REDUCE_COUNT",
                          "groupByFields": [
                            "metric.label.\"event_type\""
                          ],
                          "perSeriesAligner": "ALIGN_COUNT"
                        },
                        "filter": "metric.type=\"logging.googleapis.com/user/training_cluster_resilience_events\" resource.type=\"gce_instance\""
                      }
                    }
                  }
                ],
                "yAxis": {
                  "scale": "LINEAR"
                }
              }
            }
          }
        ]
      }
    }
    

    如果您在上一个部分中为基于日志的指标指定了其他名称,请更改 logging.googleapis.com/user/ 过滤器以进行匹配。

  2. 创建信息中心:

    gcloud monitoring dashboards create \
        --config-from-file=resilience_dashboard.json
    
  3. 在 Google Cloud 控制台中,前往 信息中心 页面,然后在 我的信息中心下,打开 训练集群弹性信息中心。信息中心可能需要大约一分钟才能显示。

问题排查

以下部分介绍了在创建指标和信息中心后最有可能遇到的问题。

“弹性事件”图表为空

基于日志的指标不会回填。它只会统计在您创建指标后到达的日志条目。 基于日志的指标概览 中所述,指标不会以追溯方式填充来自 Cloud Logging 中已有日志条目的数据。

如果您在创建指标后发生了弹性事件,但图表仍然为空,请运行创建基于日志的指标中的查询,确认这些事件是否显示在 Logs Explorer 中。

“Slurm 节点状态”图表缺少一些集群

hypercomputecluster.googleapis.com/slurm/node_state 指标仅由运行足够新版本的集群软件的集群报告。如果图表中缺少某个 集群, 请更新该集群 然后再次检查图表。

“Slurm 节点状态”图表不显示登录节点

这是正常现象。登录节点没有 Slurm 状态(例如 idlemixed),因此它们不会报告 slurm/node_state 指标。

“弹性事件”图表中的事件计数过高

Cloud Logging 至少会处理每个日志条目一次,因此,暂时性内部错误可能会导致条目被多次计数。如需了解详情, 请参阅 排查基于日志的指标问题

日志条目本身是可信来源。如需获取某个时间范围内的确切计数,请在 Logs Explorer 中查询事件,而不是从图表中读取事件。

后续步骤