Publicación de métricas del SDK de aplicaciones de ejecución prolongada mediante AWS SDK for Java 2.x - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Publicación de métricas del SDK de aplicaciones de ejecución prolongada mediante AWS SDK for Java 2.x

Dado que la implementación de CloudWatchMetricPublisher agrega y carga periódicamente métricas a Amazon CloudWatch con retraso, su uso es más adecuado para aplicaciones de ejecución prolongada.

La configuración predeterminada del publicador de métricas tiene por objeto minimizar el uso de memoria y el costo de CloudWatch y, al mismo tiempo, proporcionar una cantidad útil de información sobre los datos de las métricas.

Configuración

Para poder habilitar y utilizar métricas utilizando CloudWatchMetricPublisher, siga estos pasos.

Paso 1: agregación de dependencia requerida

Configure las dependencias de su proyecto (por ejemplo, en su archivo pom.xml o build.gradle) para usar la versión 2.14.0 o posterior del AWS SDK for Java.

Incluya el artifactId cloudwatch-metric-publisher con el número de versión 2.14.0 o posterior en las dependencias del proyecto.

Por ejemplo:

<project> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.30.11</version> <!-- Navigate the link to see the latest version. --> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>cloudwatch-metric-publisher</artifactId> </dependency> </dependencies> </project>

Paso 2: configuración de permisos requeridos

Habilite los permisos de cloudwatch:PutMetricData para la identidad de IAM utilizada por el publicador de métricas con el fin de permitir que el SDK para Java escriba métricas.

Habilitar métricas para una solicitud específica

En la siguiente clase se muestra cómo habilitar el publicador de métricas de CloudWatch para una solicitud a Amazon DynamoDB. Utiliza la configuración predeterminada del publicador de métricas.

import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.metrics.publishers.cloudwatch.CloudWatchMetricPublisher; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.ListTablesRequest; public class DefaultConfigForRequest { // Use one MetricPublisher for your application. It can be used with requests or service clients. static MetricPublisher metricsPub = CloudWatchMetricPublisher.create(); public static void main(String[] args) { DynamoDbClient ddb = DynamoDbClient.create(); // Publish metrics the for ListTables operation. ddb.listTables(ListTablesRequest.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build()); // Perform more work in your application. // A MetricsPublisher has its own lifecycle independent of any service client or request that uses it. // If you no longer need the publisher, close it to free up resources. metricsPub.close(); // All metrics stored in memory are flushed to CloudWatch. // Perform more work with the DynamoDbClient instance without publishing metrics. // Close the service client when you no longer need it. ddb.close(); } }
importante

Asegúrese de que la aplicación llame a close en la instancia de MetricPublisher cuando el cliente de servicio ya no esté en uso. En caso contrario, pueden producirse filtraciones de subprocesos o descriptores de archivo.

Habilitación de métricas para un cliente de servicio específico

En el siguiente fragmento de código se muestra cómo habilitar un publicador de métricas de CloudWatch con la configuración predeterminada para un cliente de servicio.

MetricPublisher metricsPub = CloudWatchMetricPublisher.create(); DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build();

Personalización de un publicador de métricas de CloudWatch

En la siguiente clase se muestra cómo utilizar una configuración personalizada para el publicador de métricas de un cliente de servicio específico. Las personalizaciones incluyen cargar un perfil específico, especificar una región de AWS a la que el publicador de métricas envía solicitudes y personalizar la frecuencia con la que el publicador envía métricas a CloudWatch.

import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.metrics.CoreMetric; import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.metrics.publishers.cloudwatch.CloudWatchMetricPublisher; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import java.time.Duration; public class CustomConfigForDDBClient { // Use one MetricPublisher for your application. It can be used with requests or service clients. static MetricPublisher metricsPub = CloudWatchMetricPublisher.builder() .cloudWatchClient(CloudWatchAsyncClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create("cloudwatch")) .build()) .uploadFrequency(Duration.ofMinutes(5)) .maximumCallsPerUpload(100) .namespace("ExampleSDKV2Metrics") .detailedMetrics(CoreMetric.API_CALL_DURATION) .build(); public static void main(String[] args) { DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration(c -> c.addMetricPublisher(metricsPub)) .build(); // Publish metrics for DynamoDB operations. ddb.listTables(); ddb.describeEndpoints(); ddb.describeLimits(); // Perform more work in your application. // A MetricsPublisher has its own lifecycle independent of any service client or request that uses it. // If you no longer need the publisher, close it to free up resources. metricsPub.close(); // All metrics stored in memory are flushed to CloudWatch. // Perform more work with the DynamoDbClient instance without publishing metrics. // Close the service client when you no longer need it. ddb.close(); } }

Las personalizaciones que se muestran en el fragmento anterior tienen los siguientes efectos.

  • El método cloudWatchClient permite personalizar el cliente de CloudWatch que se utiliza para enviar métricas. En este ejemplo utilizamos una región diferente de la predeterminada de us-east-1 a la que el cliente envía las métricas. También utilizamos un perfil con nombre diferente, cloudwatch, cuyas credenciales se utilizarán para autenticar solicitudes en CloudWatch. Estas credenciales deben tener permisos para cloudwatch:PutMetricData.

  • El método uploadFrequency permite especificar la frecuencia con la que el publicador de métricas carga métricas en CloudWatch. El valor predeterminado es una vez por minuto.

  • El método maximumCallsPerUpload limita el número de llamadas realizadas por carga. El valor predeterminado es ilimitado.

  • De forma predeterminada, el SDK para Java 2.x publica las métricas en el espacio de nombres AwsSdk/JavaSdk2. Puede utilizar el método namespace para especificar un valor diferente.

  • De forma predeterminada, el SDK publica métricas resumidas. Las métricas resumidas se componen de media, mínimo, máximo, suma y recuento de muestras. Al especificar una o más métricas del SDK en el método detailedMetrics, el SDK publica datos adicionales para cada métrica. Estos datos adicionales permiten obtener estadísticas de percentiles, como p90 y p99, que se pueden consultar en CloudWatch. Las métricas detalladas son especialmente útiles para métricas de latencia como APICallDuration, que mide la latencia de extremo a extremo de las solicitudes de clientes del SDK. Puede usar campos de la clase CoreMetric para especificar otras métricas comunes del SDK.

Próximos pasos: si también trabaja con funciones de Lambda, consulte Publicación de métricas del SDK para funciones de AWS Lambda para la publicación de métricas basadas en EMF.