我正在构建一个无服务器的Web跟踪系统,该系统使用AWS API Gateway为其跟踪像素提供服务,每当跟踪请求到达时,它就会调用Lambda函数,以将跟踪事件写入Kinesis流。
Lambda函数本身并没有做任何花哨的事情。它只是接受传入的事件(它自己的参数)并将其写入流中。本质上,它只是:
import boto3 kinesis_client = boto3.client("kinesis") kinesis_stream = "my_stream_name" def return_tracking_pixel(event, context): ... new_record = ...(event) kinesis_client.put_record( StreamName=kinesis_stream, Data=new_record, PartitionKey=... ) return ...
有时,我会在Lambda执行期间遇到一个怪异的高峰,这导致我的某些Lambda函数调用超时,并且跟踪请求丢失了。
这是在受影响的时间段内Lambda函数的1分钟调用计数的图表:
在20:50和23:10之间,我突然看到许多调用错误(错误计数为1分钟):
这显然是由Lambda执行超时(每1分钟间隔中的最长持续时间)引起的:
我的Kinesis流(数据输入,放置记录数,put_record成功计数等,都看起来很正常)和我的API GW(调用数均与API GW调用数相对应)都没有任何异常在API GW的限制内)。
是什么原因导致Lambda函数执行持续时间突然(看似随机发生)?
编辑:既不限制lambda函数,这是我的第一个想法。