使用 Lambda 函數(shù)將 CloudWatch Log 中的日志歸檔到 S3 桶中


作者:SRE運維博客

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

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

相關話題:https://www.cnsre.cn/tags/aws/


躺了好久赃蛛,詐尸了。因為換了工作偿曙,所以比較忙一直沒有時間去更新博客的內(nèi)容(主要還是因為懶??)

[圖片上傳失敗...(image-a02099-1683777934037)]

話不多說 直接上干貨经磅。

需求背景

最近在看費用的時候發(fā)現(xiàn)有很大一部分費用都是 cloudwatch log中存儲了大量的數(shù)據(jù)胸竞,是因為ec2 將日志傳輸?shù)搅舜鎯Φ搅薱loudwatch中掉房。這個存儲的多的查詢?nèi)罩镜臅r候收費特別的高。另外一個是因為數(shù)據(jù)分析用途,大數(shù)據(jù)分析的同事如果想那到數(shù)據(jù)的話颤绕,還是存儲在 S3 中是比較劃算和方便的,一個是拿取數(shù)據(jù)比較方便祟身,另外一個是S3 可以最歸檔存儲奥务,后面的大量數(shù)據(jù)可以分層儲存,以此來降低費用袜硫。

如果你也想將你的cloudwatch 中日志組中的日志存儲到S3中的話可以參考下這篇文章氯葬。

前置條件

  • 創(chuàng)建 一個 S3 桶,并修改權限

  • 創(chuàng)建 lambda 函數(shù)

  • 有一個Cloudwatch 日志組并且有一天以上的日志

  • 給 lambda分配所需的權限

創(chuàng)建 S3 桶并修改權限

[圖片上傳失敗...(image-7178d5-1683777934037)]

{{< tabs 國內(nèi)S3桶權限配置 國外S3桶權限配置 >}}

{{< tab >}}

國內(nèi)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>

創(chuàng)建 lambda 函數(shù)

創(chuàng)建 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'  # 日志組所在區(qū)域

bucket_name = '<bucket name>'  #同區(qū)域內(nèi)的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

驗證桶內(nèi)的文件

最后會以日期的目錄將日志歸檔起來婉陷,以方便日后對歸檔文件進行梳理溢谤。

[圖片上傳失敗...(image-744049-1683777934037)]


作者:SRE運維博客

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

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

相關話題:https://www.cnsre.cn/tags/aws/


?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憨攒,隨后出現(xiàn)的幾起案子世杀,更是在濱河造成了極大的恐慌,老刑警劉巖肝集,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞻坝,死亡現(xiàn)場離奇詭異,居然都是意外死亡杏瞻,警方通過查閱死者的電腦和手機所刀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捞挥,“玉大人浮创,你說我怎么就攤上這事∑龊” “怎么了斩披?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長讹俊。 經(jīng)常有香客問我垦沉,道長,這世上最難降的妖魔是什么仍劈? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任厕倍,我火速辦了婚禮,結(jié)果婚禮上贩疙,老公的妹妹穿的比我還像新娘讹弯。我一直安慰自己况既,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布组民。 她就那樣靜靜地躺著棒仍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邪乍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天对竣,我揣著相機與錄音庇楞,去河邊找鬼。 笑死否纬,一個胖子當著我的面吹牛吕晌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播临燃,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼睛驳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了膜廊?” 一聲冷哼從身側(cè)響起乏沸,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爪瓜,沒想到半個月后蹬跃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡铆铆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年蝶缀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薄货。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡翁都,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谅猾,到底是詐尸還是另有隱情柄慰,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布税娜,位于F島的核電站先煎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏巧涧。R本人自食惡果不足惜薯蝎,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谤绳。 院中可真熱鬧占锯,春花似錦袒哥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艺演,卻和暖如春却紧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胎撤。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工晓殊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伤提。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓巫俺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肿男。 傳聞我的和親對象是個殘疾皇子介汹,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容