首页 > 解决方案 > 无法过滤 aws lambda 函数的 boto3 日志的日志流

问题描述

我无法使用带有过滤器或过滤器的boto3 API过滤掉lambda函数的logStreams'endtime''logStreamNamePrefix'

这有效:

client = boto3.client('logs',
                      aws_access_key_id=aws_account['access_key'],
                      aws_secret_access_key=aws_account['secret_key'],
                      region_name=region)
logGroupName = '/aws/lambda/' + function_name
response = client.filter_log_events(
    logGroupName=logGroupName,
    startTime=int((datetime(2020, 1, 15)- datetime(1970, 1, 1)).total_seconds()),   # epoch_time        
)

但这些不:

1.

response = client.filter_log_events(
    logGroupName=logGroupName,
    startTime=int((datetime(2020, 1, 15)- datetime(1970, 1, 1)).total_seconds()),   # epoch_time    
    endTime=int((datetime(2020, 1, 31)- datetime(1970, 1, 1)).total_seconds())       
)

错误:返回空列表,尽管日志数据在指定的时间范围内存在

2.

response = client.filter_log_events(
    logGroupName=logGroupName,
    startTime=int((datetime(2020, 1, 15)- datetime(1970, 1, 1)).total_seconds()),   # epoch_time    
    logStreamNamePrefix='^2020/01'  # logs starting with this prefix        
)

错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Unknown parameter in input: "logStreamNamePrefix", must be one of: logGroupName, logStreamNames, startTime, endTime, filterPattern, nextToken, limit, interleaved

标签: pythonamazon-web-servicesaws-lambdaboto3amazon-cloudwatchlogs

解决方案


作为临时修复,我正在轮询所有响应,然后显式过滤它。

response = client.filter_log_events(
    logGroupName=logGroupName,
    startTime=int((datetime(2020, 1, 15)- datetime(1970, 1, 1)).total_seconds()),   # epoch_time
)

filtered_response = list(filter(lambda x: x['logStreamName'].startswith('2020/01'), response['events']))

推荐阅读