Получить журнал событий из всех потоков
Я использую AWS Java SDK.
Есть ли способ получить события журнала из группы журналов без указания имени потока журнала.
Мой пример использования - я хочу получить журналы потока VPC, поскольку потоки журналов создаются динамически, мне трудно управлять потоками журналов, связанными с журналом потоков VPC, группой журналов.
Я хочу кое-что, где я укажу только имя группы журналов и получу все события журнала из этой группы журналов.
Спасибо.
2 ответа
FilterLogEvents будет работать для этого варианта использования. Вы можете использовать FilterLogEvents для вывода списка всех событий журнала из указанной группы журналов, если в запросе не указаны следующие значения:
- шаблон фильтра (withFilterPattern)
- временной диапазон (withStartTime, withEndTime)
- один или несколько потоков журнала (withLogStreamNames)
Эти значения используются для фильтрации набора журналов, поэтому, если вы не хотите фильтровать журналы, просто не указывайте их.
Возможно, вам придется использовать подкачку страниц, если вы хотите получить все журналы в этой группе. При первом ответе, который вы получите назад, используйте getNextToken(), чтобы установить "NextToken" в следующем запросе, используя withNextToken (). Делайте это для каждого последующего запроса до завершения.
Подпись:
public FilterLogEventsResult filterLogEvents(FilterLogEventsRequest filterLogEventsRequest)
Ресурсы:
- Документация AWS SDK для Java: клиент журналов AWS - filterLogEvents()
- Запрос: FilterLogEventsRequest
- Результат: FilterLogEventsResult
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());
});