python - 无法过滤 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
解决方案
作为临时修复,我正在轮询所有响应,然后显式过滤它。
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']))
推荐阅读
- hyperledger-fabric - Docker swarm 链码容器随机不会在主机重启时启动
- c - 返回值不返回
- python - 为什么 Python 一直告诉我缺少位置参数,即使参数已经有位置参数?
- java - 在创建具有引用变量的对象类型的对象实例时,可以调用哪些方法?
- html - W3.CSS - 响应式布局 - w3-cell-row
- html - 如何计算这个html的高度
- html - HTML 输入类型编号不适用于 maxlength
- php - route:cache 仍然无法使用已清除的 api/routes
- postman - "message": "不支持请求方法 'GET'",
- ios - leftBarButtonItem 不显示图像,但动作有效