Невозможно отфильтровать потоки журналов для журналов boto3 с функцией aws лямбда - PullRequest
1 голос
/ 18 февраля 2020

Я не могу отфильтровать logStreams для функции lambda , используя API boto3 , с фильтром '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

1 Ответ

1 голос
/ 18 февраля 2020

В качестве временного исправления я опрашиваю все ответы, а затем отфильтровываю их эксплицитно.

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']))
...