教程简介
本文介绍如何使用腾讯云的云函数功能,创建两个函数,实现定时将CDN的日志存储到COS中。
主要步骤
本教程将介绍如何创建“存储”函数和“任务分发”函数,二者组合在一起并配置定制器触发,即可实现定时将CDN的日志存储到COS中。
主要分为四个大步骤:
A、准备云API的访问密钥和对象存储COS的相关信息
B、创建CDN日志转存函数(cdn-save-log-into-cos)
C、配置定时器
D、常见问题
教程正文
A、在创建云函数之前,你需要准备好以下资源
1、对象存储COS的存储桶Bucket。
请前往对象存储管理页面 ,进入【存储通列表】,查询或新建一个存储桶,进入存储桶查看【基本信息】,并记录下:
l存储桶空间名称 BucketName,例如 examples-1251002854
l存储桶所属地域 Region,例如 ap-chengdu
B、创建CDN日志转存函数(cdn-save-log-into-cos)
1、进入云服务函数的管理页面 https://console.cloud.tencent.com/scf,点击【新建】;
2、选择基于【模板函数】,并搜索关键字“CDN”,选择“CDN日志转存COS”模板;
3、函数名称填写【cdn-save-log-into-cos】,并点击下一步;
4、接着进行函数的信息配置:
- 地域:请根据你的COS的地域,选择就近的区域;
- 超时时间:根据你的业务情况,配置合适的超时时间;(例如日志文件非常大,那么建议配置更长的超时时间)
- 异步执行:务必开启异步执行的选项。避免日志过多和过大,导致函数执行超时。
5、修改『函数代码』,填写COS和CDN配置信息:
6、函数创建完毕。
C、配置定时器
上述两个函数创建完毕后,跳转至函数的配置信息页面。
1、点击左侧菜单中的【触发管理】,并点击『创建触发器』;
2、选择触发方式为【定时触发】,填写任务名称(随意),触发周期为【每1小时】,并保存。
D、常见问题:
1、上面函数配置完毕后,效果是怎样的?
上传函数和触发器配置完毕后,会『每1小时』触发一次日志转存操作。由于CDN日志默认是12小时才稳定,未避免执行时差影响,因此会下载13小时前的日志文件,存储到COS中。
例如,触发时间为5月17日10:00,那么代码判断5月16日20:00~21:00(13个小时前)的CDN日志文件已经收集完毕,不再更新;因此下载该日志文件,存储到COS中。例如,域名 demo.qq.com 的日志存储路径为:
/20210516/20/2021051620-demo.qq.com.gz
2、我希望转存更多的日志,该怎么配置?
在代码文件index.py的第59和60行,有两个配置项,用来控制函数每次执行时下载多少日志。
CDN_LOG_STABLE_HOURS = 12+1
CDN_LOG_SAVE_HOURS = 1
如果:想一次性保存过去30天的日志,该怎么配置?
将CDN_LOG_SAVE_HOURS调大即可,例如调整为720 (即24小时x30天)。但是请注意,保存大量的日志,会导致执行时间非常长,因此在函数创建时,必须开启『异步执行』选项,并设置更大的超时时间。如果真的执行超时了,也不要慌张,请再次执行即可。代码里有检测逻辑,对于已经上传了COS的日志包,会跳过;只上传新的日志包。
如果:业务上想更快获取最近的日志文件,不想等12个小时,该怎么配置?
将CDN_LOG_STABLE_HOURS调小即可,例如调整为 2 。效果示例是,在10:00这一刻执行代码,下载7:00~8:00的日志文件。
首先说明下,CDN日志是尽力快速收集日志的,但是受到各个地域节点的网络影响,无法100%立刻收集完毕,最长收集时间为12小时。当缩小该配置项,务必不要小于1,否则可能会导致日志文件非常不准(代码只上传1次,不会更新覆盖)。
如果设置为0,会怎样 ?那么,假设触发时间为5月17日10:00,那么代码判断5月17日9:00~10:00(即刚刚过去的这个小时)的CDN日志文件已经收集完毕;因此下载该日志文件,存储到COS中。但是在10:00这一刻,9:55~9:59的日志一般是还没收集到的,因此就会缺失这部分的日志内容。
以上步骤,全部配置完毕后,即完成了本教程的任务目标。