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

如何生成EC2服务器正常运行时间月度报告及相关方案咨询

生成EC2服务器正常运行时间月度报告的实现方案

一、触发实例状态变更时自动生成报告

你已经配置了CloudWatch实例检查告警,要在实例重启、停止、启动时自动生成报告,可以通过EventBridge(原CloudWatch Events)+ Lambda的组合实现:

  • 配置EventBridge规则:匹配ec2:InstanceStateChange事件,筛选状态从running到stopped、stopped到running等关键变更场景,覆盖重启(本质是停止+启动)、停止、启动动作。
  • 触发Lambda函数:编写Lambda逻辑完成以下操作:
    1. 调用CloudWatch Metrics API(get_metric_statistics),拉取目标实例的Uptime指标,或通过实例启动时间计算运行时长;同时可关联你已配置的实例检查失败告警数据。
    2. 将数据整理为CSV、JSON或HTML格式的月度报告(可按实例ID、名称分组汇总)。
    3. 直接将报告文件上传至指定S3桶。

二、是否需要创建日志组才能推送报告至S3?

不需要。日志组是用于存储CloudWatch Logs(比如Lambda执行日志、EC2系统日志)的服务,和报告生成、推送至S3没有强制关联。Lambda可以直接通过AWS SDK将生成的报告文件上传到S3,无需依赖日志组。当然,如果你需要排查报告生成过程中的错误,创建日志组记录Lambda的执行日志是个推荐的最佳实践,但不是必要条件。

三、其他下载EC2正常运行时间报告的方式

  • AWS CLI手动导出:通过命令行拉取CloudWatch指标数据,本地生成报告:

    aws cloudwatch get-metric-statistics \
      --namespace AWS/EC2 \
      --metric-name Uptime \
      --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
      --start-time $(date -d '30 days ago' +%Y-%m-%dT%H:%M:%SZ) \
      --end-time $(date +%Y-%m-%dT%H:%M:%SZ) \
      --period 86400 \
      --statistics Average \
      --output csv > ec2_uptime_monthly.csv
    

    批量处理所有实例时,可结合aws ec2 describe-instances获取实例ID列表,循环执行上述命令。

  • CloudWatch仪表盘导出:在CloudWatch中创建Metric Insights查询,筛选所有EC2实例的运行时间数据(示例查询如下),保存为仪表盘后,可手动导出CSV/PDF到本地,或通过API/Lambda定期自动导出到S3:

    SELECT AVG(Uptime) BY INSTANCE_ID, INSTANCE_NAME
    WHERE NAMESPACE = 'AWS/EC2'
    PERIOD 2592000  -- 30天对应的秒数
    
  • Systems Manager自动化文档:创建自动化文档,定义收集EC2运行时间数据、生成报告、存储到S3的流程,可设置按计划执行(比如每月末),或手动触发。

  • 实例内部脚本汇总:在EC2实例上部署定时脚本(比如用cron),通过uptime或last reboot命令记录本地运行时间,将日志上传到S3后,用Athena查询汇总生成月度报告。这种方式适合需要实例内部更细粒度运行数据的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:18:39