使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

这篇具有很好参考价值的文章主要介绍了使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


作者:SRE运维博客

博客地址:https://www.cnsre.cn/

文章地址:https://www.cnsre.cn/posts/221205544069/

相关话题:https://www.cnsre.cn/tags/aws/文章来源地址https://www.toymoban.com/news/detail-438702.html


躺了好久,诈尸了。因为换了工作,所以比较忙一直没有时间去更新博客的内容(主要还是因为懒🤔)

使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

话不多说 直接上干货。

需求背景

最近在看费用的时候发现有很大一部分费用都是 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 桶权限文档链接

<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">

创建 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/


到了这里,关于使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文详细介绍查看和启用nginx日志(access.log和error.log),nginx错误日志的安全级别,自定义访问日志中的格式

    我们在实际工作中,经常使用到日志。 日志在一个系统中是非常重要的,它可以监控一个应用程序的活动,因为它们为你提供有用的调试信息,并使你能够分析一个 Web服务器 的所有方面。 像其他软件应用程序一样, Nginx 也会将诸如网站访问者、遇到的问题等事件保

    2024年02月09日
    浏览(63)
  • Python中的Lambda函数

    Python中的Lambda函数是一种小型匿名函数,它是通过 lambda 来定义的。Lambda函数可以接受任意数量的参数,但只能有一个表达式。 Lambda函数的语法非常简单,基本形式如下: 这里的 arguments 是函数的参数,可以有多个,用逗号分隔。 expression 是一个关于参数的表达式,这

    2024年02月21日
    浏览(38)
  • copy archived log from ASM 异地恢复归档

    NOTE:  In 11g, you can use RMAN to copy the files across the network. See Note 1909235.1 Copy database file directly across network using RMAN in 11g including Primary and Standby Please use the rman scripts below to backup missing archive log files from the primary site and restore to the standby site. RMAN run { allocate channel c1 type disk; backup arc

    2024年02月09日
    浏览(36)
  • 探索Python中的函数式编程:Lambda表达式与函数式工具【第135篇—Lambda表达式】

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在Python编程世界中,函数式编程逐渐成为了一种流行的范式,特别是在处理数据和编写简洁、高效代码时。函数式编程的核心思想是将计算视

    2024年04月08日
    浏览(83)
  • 第六章(7):Python中的函数—lambda表达式

    是一种匿名函数的定义方式,它可以替代函数定义的方式,使代码更加简洁和易读。Lambda表达式的语法形式为:lambda 参数列表: 表达式,其中参数列表和表达式都是可选的,但是在大多数情况下都需要用到它们。Lambda表达式通常被用在需要传递函数对象作为参数的函数中,也

    2024年02月08日
    浏览(52)
  • 【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式

    委托是一种类型,它可以存储对一个或多个方法的引用。它类似于C/C++中的函数指针,允许您将方法作为参数传递、存储和调用。 写法: delegate return_type delegate_name( ); return_type :表示委托所引用方法的返回类型。 delegate_name :表示委托的名称。 parameters :表示委托所引用方法

    2024年02月06日
    浏览(56)
  • aws对象存储s3基于lambda实现图片裁剪

    存储桶名称:wmmzz 1.存储桶策略设置 2. 创建lambda函数 点击跳转到IAM控制台,创建自定义角色,选择服务类型lambda,创建策略 输入策略下一步取名resize-policy,回到创建角色页面,搜索刚才创建的策略选中,再搜索AmazonS3FullAccess选中 点击下一步,输入角色名称resize-role,点击“创建角色

    2024年02月11日
    浏览(46)
  • oracle 清理归档日志

    1. 相关日志 2.  linux定时删除7天前文件  

    2024年02月04日
    浏览(32)
  • Oracle 的归档日志文件

    归档是将联机重做日志以文件的形式保存到硬盘,联机日志归档的前提条件是数据库要处于归档模式。当数据库处于 ARCHIVELOG 模式并进行日志切换时,后台进程 ARCH 会将联机重做日志的内容保存到归档日志中,当数据库出现介质故障时,使用数据文件备份、归档日志和联机重

    2024年02月11日
    浏览(37)
  • Oracle——清理归档日志

    有时候oracle的归档日志满了,导致登录不了oracle。 解决办法,删除归档日志即可。 1、首先使用df -h 查看磁盘使用情况。 查看服务器的磁盘空间: 2、进入oracle的日志目录,清理日志文件, cd /home/oracle19c/dbs/ rm -rf arch*  注:只是清理了文件不能释放空间所以需要使用rman释放

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包