训练集群会对节点运行 自动健康检查 ,并在检查失败时进行干预。例如,在识别出致命的 XID 错误后,它可能会排空节点、将受影响的 Slurm 作业重新排队,并重新创建节点。这些干预措施中的每一项都会作为弹性事件写入项目的日志。
本页面将向您介绍如何构建自定义 Cloud Monitoring 信息中心,该信息中心会在计算节点的 Slurm 状态旁边绘制这些 弹性事件的图表,以便您 了解服务采取了哪些恢复操作以及这些操作与集群 状态之间的关联。该信息中心包含两个图表:
- Slurm 节点状态:每个 Slurm 状态的节点数随时间的变化情况,
取自
hypercomputecluster.googleapis.com/slurm/node_state指标。 - 弹性事件:弹性事件的计数,按事件 类型细分,取自您在下一部分中创建的基于日志的指标。
准备工作
安装并初始化 Google Cloud CLI,然后设置包含训练集群的项目:
gcloud auth login gcloud config set project PROJECT_ID
将 PROJECT_ID 替换为您的项目 ID。
所需角色
如需获得创建基于日志的指标和信息中心所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:
-
创建基于日志的指标:
Logs Configuration Writer (
roles/logging.configWriter) -
创建信息中心:
Monitoring Dashboard Configuration Editor (
roles/monitoring.dashboardEditor)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色具有 创建基于日志的指标和信息中心所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需创建基于日志的指标和信息中心,需要具备以下权限:
-
创建基于日志的指标:
logging.logMetrics.create -
创建信息中心:
monitoring.dashboards.create
创建基于日志的指标
弹性事件会记录在项目的日志中,其中每个事件都带有以 RESILIENCE_EVENT_TYPE_ 为前缀的 event_type
标签。如需在 Logs Explorer 中查看原始事件,请使用以下查询:
labels.event_type=~"RESILIENCE_EVENT_TYPE_.*"
Cloud Monitoring 无法直接绘制日志条目的图表,因此您首先需要将此 查询转换为基于日志的指标。
将以下配置保存到名为
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 作业细分图表。创建指标:
gcloud logging metrics create training_cluster_resilience_events \ --config-from-file=resilience_metric.yaml验证指标是否存在:
gcloud logging metrics describe training_cluster_resilience_events您还可以在 Google Cloud 控制台的 **基于日志的指标** 页面中确认该指标。
创建信息中心
将以下配置保存到名为
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/过滤器以进行匹配。创建信息中心:
gcloud monitoring dashboards create \ --config-from-file=resilience_dashboard.json在 Google Cloud 控制台中,前往 信息中心 页面,然后在 我的信息中心下,打开 训练集群弹性信息中心。信息中心可能需要大约一分钟才能显示。
问题排查
以下部分介绍了在创建指标和信息中心后最有可能遇到的问题。
“弹性事件”图表为空
基于日志的指标不会回填。它只会统计在您创建指标后到达的日志条目。 如 基于日志的指标概览 中所述,指标不会以追溯方式填充来自 Cloud Logging 中已有日志条目的数据。
如果您在创建指标后发生了弹性事件,但图表仍然为空,请运行创建基于日志的指标中的查询,确认这些事件是否显示在 Logs Explorer 中。
“Slurm 节点状态”图表缺少一些集群
hypercomputecluster.googleapis.com/slurm/node_state
指标仅由运行足够新版本的集群软件的集群报告。如果图表中缺少某个
集群,
请更新该集群
然后再次检查图表。
“Slurm 节点状态”图表不显示登录节点
这是正常现象。登录节点没有 Slurm 状态(例如 idle 或 mixed),因此它们不会报告
slurm/node_state 指标。
“弹性事件”图表中的事件计数过高
Cloud Logging 至少会处理每个日志条目一次,因此,暂时性内部错误可能会导致条目被多次计数。如需了解详情, 请参阅 排查基于日志的指标问题。
日志条目本身是可信来源。如需获取某个时间范围内的确切计数,请在 Logs Explorer 中查询事件,而不是从图表中读取事件。