5
votes

Comment obtenir les journaux AWS Cloudwatch en utilisant Java

Nous travaillons sur les journaux AWS Lambda et Cloudwatch. Maintenant, je veux récupérer tous les événements du journal à partir des journaux Cloudwatch sans utiliser logStreamName par Java.

Puisque nous générons le flux de journaux de manière dynamique, je ne sais pas comment récupérer tous les journaux du groupe de journaux Cloudwatch. P >

Je sais, si nous avons le nom du flux de connexion, nous pouvons utiliser le code ci-dessous

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());
}); 

Puisque je suis nouveau sur cet AWS, quelqu'un peut-il m'aider avec du code échantillons?


0 commentaires

3 Réponses :


2
votes

Vous pouvez utiliser DescribeLogStreamsRequest pour obtenir le nom du flux de journal. J'espère que cela aiderait

  public static void main( String[] args )
        {
            ClientConfiguration clientConfig = new ClientConfiguration();

            AWSLogsClientBuilder builder = AWSLogsClientBuilder.standard();

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

            DescribeLogStreamsRequest describeLogStreamsRequest = new DescribeLogStreamsRequest().withLogGroupName( "FlowLogs_GroupName"  );
            DescribeLogStreamsResult describeLogStreamsResult = logsClient.describeLogStreams( describeLogStreamsRequest );

            for ( LogStream logStream : describeLogStreamsResult.getLogStreams() )
            {
                GetLogEventsRequest getLogEventsRequest = new GetLogEventsRequest()
                        .withStartTime( 1531231200000L )
                        .withEndTime( 1531576800000L )
                        .withLogGroupName( "FlowLogs_GroupName" )
                        .withLogStreamName( logStream.getLogStreamName() );

                GetLogEventsResult result = logsClient.getLogEvents( getLogEventsRequest );

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

            }
        }


0 commentaires

0
votes

Tous les préfixes / suffixes de flux de journaux sont générés dynamiquement et stockés dans la tâche ECS Cluster-> Service-> Vous pouvez utiliser le morceau de code ci-dessous pour obtenir le préfixe / suffixe et l'utiliser ultérieurement dans le nom de votre flux de journal

AmazonECS ECSclient = AmazonECSClientBuilder.standard().withClientConfiguration(clientConfig).withRegion(Regions.AP_SOUTHEAST_2).build();
        ListTasksRequest request = new ListTasksRequest().withCluster("YourClusterName").withServiceName("YourServiceName");
        ListTasksResult response = ECSclient.listTasks(request);
String taskSuffix = response.getTaskArns().get(0)

Utilisez ce taskSuffix dans le nom de logStream p>

J'espère que cela vous aidera.


0 commentaires

0
votes

Vous pouvez créer le fichier resources / log4j2.xml dans le package principal et créer le contenu de sl4j2.xml comme suit le lien. https://docs.aws.amazon.com/lambda/ dernier / dg / java-logging.html Utilisez ensuite l'objet logger comme suit.

LambdaLogger logger = context.getLogger();
logger.log("This should be log")

Ou bien utilisez un objet de LambdaLogger comme suit le code que vous pouvez voir.

private static final Logger logger = LoggerFactory.getLogger(Handler.class);


0 commentaires