共计 3747 个字符,预计需要花费 10 分钟才能阅读完成。
作者:SRE 运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/221205544069/
相干话题:https://www.cnsre.cn/tags/aws/
躺了良久,诈尸了。因为换了工作,所以比较忙始终没有工夫去更新博客的内容(次要还是因为懒🤔)
话不多说 间接上干货。
需要背景
最近在看费用的时候发现有很大一部分费用都是 cloudwatch log 中存储了大量的数据,是因为 ec2 将日志传输到了存储到了 cloudwatch 中。这个存储的多的查问日志的时候免费特地的高。另外一个是因为数据分析用处,大数据分析的共事如果想那到数据的话,还是存储在 S3 中是比拟划算和不便的,一个是拿取数据比拟不便,另外一个是 S3 能够最归档存储,前面的大量数据能够分层贮存,以此来升高费用。
如果你也想将你的 cloudwatch 中日志组中的日志存储到 S3 中的话能够参考下这篇文章。
前置条件
- 创立 一个 S3 桶,并批改权限
- 创立 lambda 函数
- 有一个 Cloudwatch 日志组并且有一天以上的日志
- 给 lambda 调配所需的权限
创立 S3 桶并批改权限
{{< tabs 国内 S3 桶权限配置 国外 S3 桶权限配置 >}}
{{< tab >}}
国内 S3 桶权限配置
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {"Service": "logs.cn-north-1.amazonaws.com.cn"},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws-cn:s3:::<bucket name>"
},
{
"Effect": "Allow",
"Principal": {"Service": "logs.cn-north-1.amazonaws.com.cn"},
"Action": "s3:PutObject",
"Resource": "arn:aws-cn:s3:::<bucket name>/*",
"Condition": {
"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}
}
}
]
}
{{< /tab >}}
{{< tab >}}
国外 S3 桶权限配置
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "s3:GetBucketAcl",
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket name>",
"Principal": {"Service": "logs.us-west-2.amazonaws.com"}
},
{
"Action": "s3:PutObject" ,
"Effect": "Allow",
"Resource": "arn:aws:s3:::<bucket name>*",
"Condition": {"StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control"} },
"Principal": {"Service": "logs.us-west-2.amazonaws.com"}
}
]
}
{{< /tab >}}
{{< /tabs >}}
S3 桶权限文档链接
<script async src=”https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4855142804875926″
crossorigin="anonymous"></script>
<ins class=”adsbygoogle”
style="display:block; text-align:center;"
data-ad-layout="in-article"
data-ad-format="fluid"
data-ad-client="ca-pub-4855142804875926"
data-ad-slot="5670838583"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
创立 lambda 函数
创立 lambda
import boto3
import logging
import time
import datetime
import json
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def export_s3_logs(bucket_name, log_group_name, log_stream_name, days_of_logs=1, timeout=1000):
'''
today = datetime.datetime.combine(datetime.datetime.utcnow(), datetime.datetime.min.time())
day_end = today
day_start = today - datetime.timedelta(days=days_of_logs)
'''
today = datetime.datetime.combine(datetime.datetime.utcnow() + datetime.timedelta(hours=8),
datetime.datetime.min.time()) # UTC+8
day_end = today - datetime.timedelta(hours=8) # UTC
day_start = today - datetime.timedelta(days=days_of_logs, hours=8) # UTC
#print(day_start)
ts_start = '{0:.0f}'.format(((day_start - datetime.datetime(1970, 1, 1)).total_seconds())*1000)
ts_end = '{0:.0f}'.format(((day_end - datetime.datetime(1970, 1, 1)).total_seconds())*1000)
the_date = '/'.join([str(today.year), '0'+str(today.month)[-2:], '0'+str(today.day)[-2:]])
#folder_name = '/'.join([log_group_name, log_stream_name, the_date])
folder_name = '/'.join([log_group_name,the_date])
client = boto3.client('logs')
#print (ts_start, ts_end)#, day_start, day_end,the_date
task_id = client.create_export_task(
logGroupName=log_group_name,
#logStreamNamePrefix=log_stream_name,
fromTime=int(ts_start),
to=int(ts_end),
destination=bucket_name,
destinationPrefix=folder_name
)['taskId']
i = 1
while i<timeout:
response = client.describe_export_tasks(taskId=task_id)
status = response['exportTasks'][0]['status']
if status == 'COMPLETED':
result = True
break
elif status != 'RUNNING':
result = False
break
i += 1
time.sleep(interval)
return result
def lambda_handler(event, context):
region = 'cn-northwest-1' # 日志组所在区域
bucket_name = '<bucket name>' #同区域内的 S3 桶名称
log_group_name = '<log group name>' #日志组名称
log_stream_name = '1' #默认即可
log_export_days = 1 #默认即可
export_s3_logs(bucket_name, log_group_name, log_stream_name, log_export_days)
给 lambda 调配权限
- AmazonS3 的读写权限
- CloudWatchLogsFullAccess
验证桶内的文件
最初会以日期的目录将日志归档起来,以不便日后对归档文件进行梳理。
作者:SRE 运维博客
博客地址:https://www.cnsre.cn/
文章地址:https://www.cnsre.cn/posts/221205544069/
相干话题:https://www.cnsre.cn/tags/aws/