You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何记录AWS Glue任务执行时间到CloudWatch并查询AWS执行时间计算逻辑

AWS Glue任务执行时间采集与CloudWatch指标配置方案

无需修改任务代码的批量采集方案(适合200+任务批量落地)

  • Glue任务状态变更会自动发送事件到EventBridge,事件里包含jobName、jobRunId、startedOn、completedOn等核心时间字段,你可以配置EventBridge规则匹配所有Glue任务运行成功/失败/超时的事件,触发Lambda函数做指标计算。
  • Lambda处理逻辑:从事件参数中提取startedOn和completedOn的时间戳,差值就是任务执行时长(单位秒/毫秒可自定义),再调用CloudWatch的put_metric_data接口,把执行时间作为自定义指标上报,维度可添加任务名称、任务运行状态、任务类型等方便筛选。
  • 批量配置可以用CloudFormation/Terraform一次性完成规则、Lambda、IAM权限的部署,不需要逐个修改现有Glue任务代码。

任务代码内埋点采集方案(精度更高)

如果需要更细粒度的执行时间(比如Spark作业内各阶段的执行时间),可以在Glue代码里加入埋点逻辑,Spark 2版本的Glue运行环境已内置boto3依赖无需额外安装:

import sys
import time
import boto3
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
cw = boto3.client('cloudwatch')
start_time = time.time()

try:
    # 原有Glue任务逻辑
    # ...
    # 计算执行时间并上报成功指标
    execution_time = time.time() - start_time
    cw.put_metric_data(
        Namespace='Glue/CustomMetrics',
        MetricData=[
            {
                'MetricName': 'JobExecutionTime',
                'Dimensions': [
                    {'Name': 'JobName', 'Value': args['JOB_NAME']},
                    {'Name': 'Status', 'Value': 'Success'}
                ],
                'Value': execution_time,
                'Unit': 'Seconds'
            }
        ]
    )
except Exception as e:
    # 异常场景也上报执行时间
    execution_time = time.time() - start_time
    cw.put_metric_data(
        Namespace='Glue/CustomMetrics',
        MetricData=[
            {
                'MetricName': 'JobExecutionTime',
                'Dimensions': [
                    {'Name': 'JobName', 'Value': args['JOB_NAME']},
                    {'Name': 'Status', 'Value': 'Failed'}
                ],
                'Value': execution_time,
                'Unit': 'Seconds'
            }
        ]
    )
    raise e

注意需要给Glue任务的执行角色加上cloudwatch:PutMetricData权限。

AWS Glue控制台历史执行时间的计算逻辑

AWS Glue控制台任务历史里展示的执行时间,计算方式是任务运行结束时间(completedOn)减去任务启动时间(startedOn),不包含任务排队等待资源的时间:

  • startedOn是Glue服务实际为该任务分配计算资源、开始执行作业代码的时间,不是任务触发时间(触发到启动之间的等待时长是队列时间,不会计入执行时间)
  • completedOn是作业所有逻辑执行完成、资源开始释放的时间,无论任务最终是成功、失败还是被手动终止,都会用这个时间减去startedOn得到展示的执行时长。
  • 如果你需要统计端到端的任务耗时(包含排队时间),可以用任务触发请求的时间减去completedOn来计算。

内容的提问来源于stack exchange,提问作者Huy Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:39:03