我正在使用Python 3.6和boto3 == 1.7.84。我试图通过AWS的boto3来获取CloudWatch日志,但是发现返回的事件数比CloudWatch见解页面中看到的少得多。我以为
import boto3
client = boto3.client('logs')
response = client.filter_log_events(
logGroupName='/aws/batch/job',
startTime=1572520000000,
endTime=1572570000000,
filterPattern='exceptions',
)
将返回所有事件,包括“例外”,无论作业流名称如何。但是它什么也没返回。但是,如果我这样指定logStreamNames
import boto3
client = boto3.client('logs')
response = client.filter_log_events(
logGroupName='/aws/batch/job',
logStreamNames=['training/default/[ASpecificID]'],
startTime=1572520000000,
endTime=1572570000000,
filterPattern='exceptions',
)
它确实返回了包含带有logStreamNames=['training/default/[ASpecificID]']
的字符串'exceptions'的日志。
另一个奇怪的是,当我这样做的时候
import boto3
client = boto3.client('logs')
response = client.filter_log_events(
logGroupName='/aws/batch/job',
logStreamNamePrefix='training/default',
startTime=1572520000000,
endTime=1572570000000,
filterPattern='exceptions',
)
未返回包含带有logStreamNames=['training/default/[ASpecificID]']
的字符串'exceptions'的日志。确实显示了一些带有logStreamNamePrefix='training/'
的日志,但不是全部。返回的事件数量远远少于我所做的事情
fields @timestamp, @message, @logStream
| filter @logStream like /training\/default/
| filter @message like /exceptions/
| limit 10000
使用CloudWatch logs insights query syntax在CloudWatch见解页面中。我对boto3做任何错误,导致这种差异吗?
答案 0 :(得分:0)
期望从boto3 documentation开始。
logStreamNames(列表)-将结果过滤为仅来自此列表中日志流的日志。
如果您同时为logStreamNamePrefix和logStreamNames指定一个值,则该操作将返回InvalidParameterException错误。
logStreamNames不是必填字段,但它将返回此值的结果,并且仅接受列表值。
对于您logStreamNamePrefix
的怪异行为,最后将需要/
,但我不确定。
logStreamNamePrefix(字符串)- 过滤结果以仅包括名称以该前缀开头的日志流中的事件。
如果您同时为logStreamNamePrefix和logStreamNames指定一个值,但是logStreamNamePrefix的值与logStreamNames中指定的任何日志流名称都不匹配,则该操作将返回InvalidParameterException错误。
答案 1 :(得分:0)
您是否检查过下一次令牌返回? 这不是 boto 文件,但我认为原因是一样的。 https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_FilterLogEvents.html
据说
<块引用>此操作可能会返回空结果,同时通过令牌有更多可用的日志事件。
我认为结果只是部分的。您将需要使用收到的“下一个令牌”再次调用 API。