Métricas personalizadas con Application Signals
Para supervisar el rendimiento y la disponibilidad de las aplicaciones, Application Signals recopila métricas estándar (fallos, errores y latencia) y métricas de tiempo de ejecución de las aplicaciones detectadas después de activarlo.
Las métricas personalizadas agregan un contexto valioso a la supervisión de aplicaciones y ayudan a agilizar la resolución de problemas. Puede utilizarlas para lo siguiente:
Personalizar el análisis de los datos de telemetría
Identificar las causas raíz de los problemas
Tomar decisiones empresariales y operativas precisas con rapidez
Application Signals le permite ver y correlacionar las métricas personalizadas generadas a partir de un servicio con métricas estándar y de tiempo de ejecución. Por ejemplo, una aplicación podría emitir métricas para el tamaño de las solicitudes y el recuento de errores de caché. Estas métricas personalizadas proporcionan información más detallada sobre los problemas de rendimiento, lo que le ayuda a diagnosticar y resolver las caídas de disponibilidad y los picos de latencia con mayor rapidez.
Temas
Configuración de métricas personalizadas para Application Signals
Puede generar métricas personalizadas desde su aplicación a través de dos métodos: métricas de OpenTelemetry y métricas de intervalo.
Métricas de OpenTelemetry
Para usar métricas personalizadas de OpenTelemetry con Application Signals, debe usar OpenTelemetry Collector o el agente de CloudWatch. Las métricas personalizadas de OpenTelemetry le permiten crear y exportar métricas directamente desde el código de la aplicación mediante el SDK de métricas de OpenTelemetry.
Incorpore el servicio a Application Signals.
Configure el agente o el recopilador.
Al utilizar el agente de CloudWatch, debe configurar
metrics_collected
conotlp
. Por ejemplo,cloudwatch-config.json
{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {}, "otlp": { "grpc_endpoint": "0.0.0.0:4317", "http_endpoint": "0.0.0.0:4318" } } } }
Al utilizar OpenTelemetry Collector, configure una canalización de métricas. Debe usar CloudWatch EMF Exporter for OpenTelemetry Collector
y activar Atributos de recursos para etiquetas de métricas . Se recomienda configurar dimension_rollup_option: NoDimensionRollup
para evitar la emisión de muchas agregaciones de métricas. Por ejemplo,config.yaml
:receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 exporters: awsemf: region: $REGION namespace: $NAMESPACE log_group_name:$LOG_GROUP_NAME resource_to_telemetry_conversion: enabled: true dimension_rollup_option: "NoDimensionRollup" otlphttp/traces: compression: gzip traces_endpoint: https://xray.$REGION.amazonaws.com/v1/traces auth: authenticator: sigv4auth/traces extensions: sigv4auth/logs: region: "$REGION" service: "logs" sigv4auth/traces: region: "$REGION" service: "xray" processors: batch: service: telemetry: extensions: [sigv4auth/logs, sigv4auth/traces] pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [awsemf] traces: receivers: [otlp] processors: [batch] exporters: [otlphttp/traces]
Configure el entorno. Cuando hay varios servicios con el mismo nombre de servicio y a fin de correlacionar de forma precisa las métricas de Application Signals con el nombre de servicio correcto, se recomienda configurar el atributo de recurso
deployment.environment.name
. La configuración de este atributo de recurso se suele llevar a cabo a través de las variables de entorno.OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME,deployment.environment.name=$YOUR_ENV_NAME"
Configure la exportación de métricas al agente de CloudWatch o a OpenTelemetry Collector. Puede utilizar uno de las siguientes métodos:
(Recomendado) Personalice la canalización de exportación: en el código de la aplicación, cree una exportación dedicada MeterProvider
para el punto de conexión del recopilador o el agente configurado. Por ejemplo: Resource resource = Resource.getDefault().toBuilder() .put(AttributeKey.stringKey("service.name"), serviceName) .put(AttributeKey.stringKey("deployment.environment.name"), environment) .build(); MetricExporter metricExporter = OtlpHttpMetricExporter.builder() .setEndpoint("http://localhost:4318/v1/metrics") .build(); MetricReader metricReader = PeriodicMetricReader.builder(metricExporter) .setInterval(Duration.ofSeconds(10)) .build() SdkMeterProvider meterProvider = SdkMeterProvider.builder() .setResource(resource) .registerMetricReader() .build(); Meter meter = meterProvider.get("myMeter");
Exportación basada en agentes: configure las variables de entorno del agente OTEL_METRICS_EXPORTER
y OTEL_EXPORTER_OTLP_METRICS_ENDPOINT . Por ejemplo: OTEL_METRICS_EXPORTER=otlp OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4318/v1/metrics
En el código de la aplicación, confíe en MeterProvider global creado por el agente. Por ejemplo:
Meter meter = GlobalOpenTelemetry.getMeter("myMeter");
Con el SDK de métricas de OTEL
en el código de la aplicación, agregue las métricas de OTEL. Por ejemplo, para agregar las métricas de OTEL en Python: counter = meter.counterBuilder("myCounter").build(); counter.add(value); counter.add(value, Attributes.of(AttributeKey.stringKey("Operation"), "myOperation"));
No es necesario agregar el atributo Operation, pero puede resultar útil para correlacionar las operaciones del servicio de Application Signals con las métricas personalizadas de OpenTelemetry.
Métricas de intervalo
Actualmente, las métricas de intervalo personalizadas solo funcionan con Transaction Search. Con las métricas de intervalo personalizadas, puede hacer lo siguiente:
Crear métricas con filtros de métricas
Procesar atributos de intervalo agregados en el código de la aplicación
Utiliza el SDK de rastros de OpenTelemetry para la implementación
Activar la supervisión de Application Signals con Transaction Search. Para obtener más información, consulte Transaction Search.
Para garantizar un muestreo del 100 % de las métricas, se recomienda enviar el 100 % de los intervalos al punto de conexión.
Agregue atributos de intervalo mediante el SDK de rastros de OTEL
. Hay dos formas de hacerlo: [Recomendado] Agregue atributos a los intervalos generados automáticamente. Por ejemplo:
Span.current().setAttribute("myattribute", value);
Agregue atributos a los intervalos generados manualmente. Por ejemplo:
Span span = tracer.spanBuilder("myspan").startSpan(); try (Scope scope = span.makeCurrent()) { span.setAttribute("myattribute", value); }
Cree un filtro de métricas con los siguientes valores. Para obtener información sobre cómo crear un filtro de métricas, consulte Create a metric filter for a log group.
Grupo de registros: aws/spans
Patrón de filtro: { $.attributes.['myattribute'] = * }
Nombre de la métrica: myattribute (los valores deben coincidir exactamente o la correlación de intervalos no funcionará
Valor de la métrica: $.attributes.['myattribute']
Dimensiones. Nombre del campo: servicio, Valor del campo: $.attributes.['aws.local.service'], Nombre del campo: entorno, Valor del campo: $.attributes.['aws.local.environment'] y Nombre del campo: operación, Valor del campo: $.attributes.['aws.local.operation']
nota
Al agregar atributos a los intervalos generados manualmente, no puede establecer
Operation
porqueaws.local.operation
no aparecerá en los datos del intervalo.
Visualización de métricas personalizadas en Application Signals
Ahora puede ver las métricas personalizadas de los servicios y las operaciones en la consola de Application Signals:
Seleccione un servicio en la lista Servicios para ver la nueva pestaña Métricas relacionadas.
Vea las métricas estándar, métricas de tiempo de ejecución y métricas relacionadas del servicio seleccionado.
Filtre y seleccione varias métricas de la lista.
Incluya en gráficos las métricas seleccionadas para identificar las correlaciones y las causas raíz de los problemas.
Para obtener más información sobre las métricas relacionadas, consulte Visualización de métricas relacionadas.
Preguntas frecuentes
¿Cuál es el impacto de no agregar la configuración del entorno para las métricas personalizadas?
Application Signals configura el atributo de recurso deployment.environment.name
para eliminar la ambigüedad de las aplicaciones. Application Signals no puede correlacionar las métricas personalizadas generadas por dos servicios diferentes que tienen el mismo nombre con el servicio correcto sin desambiguación.
Para agregar la configuración del entorno a la aplicación, consulte Métricas de OpenTelemetry.
¿Hay algún límite para los filtros de métricas?
Solo puede crear un máximo de 100 filtros de métricas por cada grupo de registro de Registros de CloudWatch. Cada métrica puede tener hasta 3 dimensiones. Puede ver los límites de los filtros de métricas en Métricas de OpenTelemetry.
¿Por qué no aparecen los gráficos de métricas en la tabla de métricas?
La solución depende del tipo de métrica:
Métricas personalizadas: consulte Configuración de métricas personalizadas para Application Signals para verificar la configuración de la métrica
Métricas estándar o de tiempo de ejecución: consulte Solución de problemas de instalación de Application Signals