如何统计交互式模式下terraform apply命令的实际执行时长?
统计交互式
terraform apply实际执行时长的方法 下面是3种可落地的实现方案:
- 方案1:通过expect脚本捕获确认时机,精准统计
可以用expect工具监听命令输出,当用户完成确认后立刻记录起始时间,命令执行结束后计算时间差,完全排除确认页的等待时长,示例脚本如下:
#!/usr/bin/expect -f set timeout -1 # 启动terraform apply命令 spawn terraform apply # 匹配确认提示 expect "Do you want to execute?" # 等待用户输入确认,用户输入回车后记录起始时间 interact "\r" { send "\r" set start_time [clock milliseconds] } # 等待命令完全执行结束 expect eof set end_time [clock milliseconds] # 计算并输出耗时,单位秒 set run_duration [expr ($end_time - $start_time)/1000.0] send_user "实际执行时长:$run_duration 秒\n"
给脚本加可执行权限后直接运行即可,无需修改原有Terraform配置。
- 方案2:利用Terraform日志时间戳统计
开启带时间戳的Terraform日志,执行完成后通过日志时间差计算实际执行时长:
- 执行命令前配置日志输出:
export TF_LOG=INFO export TF_LOG_PATH=./tf_apply.log export TF_LOG_TIMESTAMP=1
- 正常执行
terraform apply完成交互式操作 - 从日志中过滤用户确认后第一条资源操作日志的时间,以及最后一条执行结果日志的时间,两者的差值就是实际执行时长,误差可控制在毫秒级。
- 方案3:拆分计划与执行步骤简化统计
先执行terraform plan -out=tfplan生成固定的执行计划,再执行terraform apply tfplan,此时你可以在用户输入确认后再启动计时,命令结束后直接计算时间差即可,不需要额外依赖其他工具。
注意:如果你的配置中存在确认提示触发前就会执行的前置逻辑(比如外部数据源拉取),可以根据自己的统计需求决定是否要把这部分耗时纳入统计范围。
内容的提问来源于stack exchange,提问作者Comfortably Numb
相关产品推荐
相关产品推荐

