从所有流中获取日志事件

时间:2016-12-10 06:09:06

标签: java amazon-web-services aws-sdk amazon-cloudwatchlogs

我正在使用AWS Java SDK。

有没有办法从日志组中获取日志事件而不指定日志流名称。

我的用例是我想要获取VPC Flow Logs,因为Log Streams是以动态方式创建的,我很难管理与VPC Flow日志,Log Group相关联的Log Streams。

我想要一些我只指定日志组名称并从该日志组获取所有日志事件的东西。

谢谢。

2 个答案:

答案 0 :(得分:5)

FilterLogEvents适用于此用例。只要请求中未指定以下值,您就可以使用FilterLogEvents列出指定日志组中的所有日志事件:

  • 过滤模式(withFilterPattern)
  • 时间范围(withStartTime,withEndTime)
  • 一个或多个日志流(withLogStreamNames)

这些值用于过滤日志集,因此如果您不想过滤任何日志,则不要指定它们。

如果您打算检索此组中的所有日志,则可能需要使用分页。在您收到的第一个回复中,使用getNextToken()使用withNextToken()在下一个请求中设置'NextToken'。对每个后续请求执行此操作直到完成。

签名:

public FilterLogEventsResult filterLogEvents(FilterLogEventsRequest filterLogEventsRequest)

<强>资源:

答案 1 :(得分:-1)

ClientConfiguration clientConfig = getClientConfig();

AWSLogsClientBuilder builder = AWSLogsClientBuilder.standard();

AWSLogs logsClient= builder.withCredentials(new AWSStaticCredentialsProvider(new ProfileCredentialsProvider(profile).getCredentials())).withRegion(Regions.AP_SOUTHEAST_2).withClientConfiguration(clientConfig).build();

GetLogEventsRequest request = new GetLogEventsRequest()
        .withStartTime(1531231200000L)
        .withEndTime(1531576800000L)
        .withLogGroupName("FlowLogs_GroupName")
        .withLogStreamName("eni-xxxxx");
GetLogEventsResult result = logsClient.getLogEvents(request);

result.getEvents().forEach(outputLogEvent -> {
    System.out.println(outputLogEvent.getMessage());
});