AWS Lambda函数Boto 3 filter_log_events无法使用endTime参数

问题描述 投票:0回答:1

我正在尝试从Cloudwatch日志中提取信息,以根据指标从警报中发送更多自定义的电子邮件。我正在创建一个lambda函数,以尝试在指定的时间范围内提取信息。但是,当我指定startTime和endTime时,响应中什么也没回来。我看过Boto3的文档,但并没有说太多。我对python和AWS相对较新,因此任何帮助都会很棒。可以在下面看到代码示例:

import boto3
import json
import time
from datetime import datetime
from calendar import timegm

# Create CloudWatch client
clw = boto3.client('logs')


def lambda_handler(event, context):

    # User defined for testing purposes
    name = 'Error Log Metric'
    namespace = 'User Defined Metrics'

    response = clw.describe_metric_filters(metricName=name,
            metricNamespace=namespace)

    LogGroupName = response['metricFilters'][0]['logGroupName']
    FilterPattern = response['metricFilters'][0]['filterPattern']

    StartTime = timegm(time.strptime('2020-06-15T00:00:00.000Z',
                       '%Y-%m-%dT%H:%M:%S.%fZ'))
    EndTime = timegm(time.strptime('2020-06-16T23:59:59.000Z',
                     '%Y-%m-%dT%H:%M:%S.%fZ'))

    filteredLogs = clw.filter_log_events(logGroupName=LogGroupName,
            filterPattern=FilterPattern,
            logStreamNamePrefix='TEST_PREFIX_NAME',
            startTime=StartTime, endTime=EndTime)

    print(filteredLogs)

响应

Response:
null

Request ID:
"610a2849-3fef-46b2-b75e-450c4f37ec25"

Function Logs:
START RequestId: 610a2849-3fef-46b2-b75e-450c4f37ec25 Version: $LATEST
{'events': [], 'searchedLogStreams': [], 'ResponseMetadata': {'RequestId': '04d59cfe-9069-4bb4-ad3b-7135a649d2e6', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '04d59cfe-9069-4bb4-ad3b-7135a649d2e6', 'content-type': 'application/x-amz-json-1.1', 'content-length': '121', 'date': 'Tue, 16 Jun 2020 00:42:23 GMT'}, 'RetryAttempts': 0}}
END RequestId: 610a2849-3fef-46b2-b75e-450c4f37ec25
REPORT RequestId: 610a2849-3fef-46b2-b75e-450c4f37ec25  Duration: 299.88 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 71 MB  Init Duration: 315.90 ms
python-3.x amazon-web-services aws-lambda boto3 amazon-cloudwatchlogs
1个回答
0
投票

我认为问题是timegm返回的时间戳记是seconds,而不是filter_log_events要求的milliseconds >>。

假设其他所有内容都是正确的(所有日志流名称,日期,前缀),快速修复方法可能是:

    filteredLogs = clw.filter_log_events(logGroupName=LogGroupName,
            filterPattern=FilterPattern,
            logStreamNamePrefix='TEST_PREFIX_NAME',
            startTime=StartTime*1000, endTime=EndTime*1000)
    
© www.soinside.com 2019 - 2024. All rights reserved.