0

我们有大量的 EC2 实例在 AWS 中运行了大约 1 年。现在我们正在尝试根据我们启动实例所使用的用户名对未使用的实例执行清理活动。

我尝试从 S3 Bucket 下载 cloudtrail 日志并尝试过滤用户名和“RunInstances”事件,以便我可以找到启动实例的用户以及实例详细信息。

以下是我用来将所有 cloudtrail 日志下载到单个文件夹中的脚本,解压缩它们并通过“RunInstances”事件过滤实例并给出实例计数。

我需要帮助从每个带有“RunInstances”事件的日志中检索用户名并停止实例。

我的脚本:

#!bin/sh

s3url="s3://S3bucket/AWSCloudtrailLogs/<accountno>/CloudTrail/region/2016/" 

for (( i=1; i<=12; i++ ))
do
   for (( j=1; j<=31; j++ ))
   do
        if [[ $i -le 9 && $j -le 9 ]]
        then
           aws s3 cp $s3url/0$i/0$j/ ~/test/ --recursive
        elif [[ $i -le 9 && $j -ge 10 ]]
        then
           aws s3 cp $s3url/0$i/$j/ ~/test/ --recursive
        elif [[ $i -ge 10 && $j -le 9 ]]
        then
           aws s3 cp $s3url/$i/0$j/ ~/test/ --recursive
        elif [[ $i -ge 10 && $j -ge 10 ]]
        then
           aws s3 cp $s3url/$i/$j/ ~/test/ --recursive
        fi
   done
done

for v in `ls ~/test/` ; do gunzip $v ; done

for v in `ls ~/test/` ; do cat ~/test/$v | grep RunInstances >> ~/test/result.txt; done

grep -o 'RunInstances' ~/test/result.txt | wc -l

无论如何我可以在不下载 zip 文件并直接从 s3 存储桶本身获取信息的情况下做到这一点吗?因为这需要很多时间,因为我们有大约 100 万个日志文件。

我需要一种方法来使用任何编程语言或脚本来解决这个问题。

谢谢你的支持。

4

2 回答 2

1

你是什​​么意思directly get info from s3 bucket itself?S3 是存储资源而不是计算资源。您可以避免下载到磁盘文件。相反,您可以在内存中处理它而不保存到文件中,但仍然必须下载它。

建议:

  • 不要下载全年所有地区的所有轨迹。这将需要很长时间
  • 一次处理一个地区的一个月数据。重复其他月份/地区
  • 使用 Python/Boto3,它具有许多方便的功能来处理跟踪日志并提取您想要的信息

我每天都这样做(仅针对前一天的日志),但我就是不能给出代码。

于 2016-08-24T14:42:54.183 回答
0

与其下载所有 s3 日志然后查询它,为什么不使用 Athena 之类的东西!这将节省您的时间并大大减少您的工作量。Cloudtrail 确实提供了有关谁启动了实例及其 sdk 可用的足够信息;你可以使用 boto3 编写一个 python 脚本,也可以设置一个 cron 作业来每天运行它。

于 2019-06-29T10:51:45.797 回答