

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Metriche personalizzate con Application Signals
<a name="AppSignals-CustomMetrics"></a>

Per monitorare le prestazioni e la disponibilità delle applicazioni, Application Signals raccoglie metriche standard (guasti, errori e latenza) e metriche di runtime dalle applicazioni scoperte dopo l'attivazione.

Le metriche personalizzate aggiungono un contesto prezioso al monitoraggio delle applicazioni e aiutano a velocizzare la risoluzione dei problemi. Si possono utilizzare per:
+ Personalizzare l'analisi dei dati di telemetria
+  Identificare le cause principali dei problemi
+ Prendere rapidamente decisioni aziendali e operative precise

Application Signals consente di visualizzare e correlare le metriche personalizzate generate da un servizio con metriche standard e di runtime. Ad esempio, un'applicazione potrebbe emettere metriche relative alla dimensione delle richieste e al numero di errori nella cache. Queste metriche personalizzate forniscono informazioni più dettagliate sui problemi di prestazioni, aiutandoti a diagnosticare e risolvere più rapidamente i cali di disponibilità e i picchi di latenza.

**Topics**
+ [Configurazione di metriche personalizzate per Application Signals](#AppSignals-CustomMetrics-Adding)
+ [Visualizzazione delle metriche personalizzate in Application Signals](#AppSignals-CustomMetrics-Viewing)
+ [Domande frequenti (FAQ)](#AppSignals-CustomMetrics-FAQ)

## Configurazione di metriche personalizzate per Application Signals
<a name="AppSignals-CustomMetrics-Adding"></a>

Puoi generare metriche personalizzate dalla tua applicazione utilizzando due metodi: *metriche OpenTelemetry* e *metriche di intervallo*.

**Topics**
+ [Metriche OpenTelemetry](#AppSignals-CustomMetrics-OpenTelemetry)
+ [Metriche di intervallo](#AppSignals-CustomMetrics-SpanMetrics)

### Metriche OpenTelemetry
<a name="AppSignals-CustomMetrics-OpenTelemetry"></a>

Per utilizzare metriche OpenTelemetry personalizzate con Application Signals, è necessario utilizzare l'agente CloudWatch oppure il raccoglitore OpenTelemetry Collector. Le metriche OpenTelemetry personalizzate consentono di creare ed esportare le metriche direttamente dal codice dell'applicazione utilizzando l'SDK OpenTelemetry Metrics.

1. Integra il servizio con Application Signals.

1. Configura l'agente o il raccoglitore.
   + Quando si utilizza l'agente CloudWatch, è necessario [configurare](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-OpenTelemetry-metrics.html) `metrics_collected` con un `otlp`. Ad esempio, `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"
           }
         }
       }
     }
     ```
   + Quando si utilizza il raccoglitore OpenTelemetry, configura una pipeline di metriche. È necessario utilizzare [CloudWatch EMF Exporter per il raccoglitore OpenTelemetry](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/awsemfexporter) e abilitare gli [Attributi di risorsa per le etichette delle metriche](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/exporter/awsemfexporter#resource-attributes-to-metric-labels). Si consiglia di eseguire la configurazione di ` dimension_rollup_option: NoDimensionRollup` per evitare l'emissione di molte aggregazioni di metriche. Ad esempio, `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]
     ```

1. Configura l'ambiente. Quando sono presenti più servizi con lo stesso nome di servizio, per correlare accuratamente le metriche di Application Signals al nome del servizio corretto, si consiglia di configurare l'attributo di risorsa `deployment.environment.name`. La configurazione di questo attributo di risorsa viene generalmente eseguita tramite le variabili di ambiente.

   ```
   OTEL_RESOURCE_ATTRIBUTES="service.name=$YOUR_SVC_NAME,deployment.environment.name=$YOUR_ENV_NAME"
   ```

1. Configura l'esportazione delle metriche nell'agente CloudWatch o nel raccoglitore OpenTelemetry. Puoi utilizzare uno dei seguenti approcci:
   + (Consigliato) Pipeline di esportazione personalizzata: nel codice dell'applicazione, crea un [MeterProvider](https://opentelemetry.io/docs/specs/otel/metrics/sdk/#meterprovider) dedicato che esporta verso l'endpoint dell'agente o del raccoglitore configurato. Per esempio:

     ```
     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");
     ```
   + Esportazione basata su agente: configura le variabili di ambiente dell'agente [OTEL\$1METRICS\$1EXPORTER](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#exporter-selection) e [OTEL\$1EXPORTER\$1OTLP\$1METRICS\$1ENDPOINT](https://opentelemetry.io/docs/languages/sdk-configuration/otlp-exporter/#otel_exporter_otlp_metrics_endpoint). Per esempio:

     ```
     OTEL_METRICS_EXPORTER=otlp
     OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4318/v1/metrics
     ```

     Nel codice dell'applicazione, fai affidamento al MeterProvider globale creato dall'agente. Per esempio:

     ```
     Meter meter = GlobalOpenTelemetry.getMeter("myMeter");
     ```

1. Utilizzando [OTEL Metrics SDK](https://opentelemetry.io/docs/specs/otel/metrics/sdk/) nel codice dell'applicazione, aggiungi le metriche OTEL. Ad esempio, per aggiungere le metriche OTEL in Python:

   ```
   counter = meter.counterBuilder("myCounter").build();
   counter.add(value);
   counter.add(value, Attributes.of(AttributeKey.stringKey("Operation"), "myOperation"));
   ```

   L'aggiunta dell'attributo Operation non è obbligatoria, ma può essere utile per correlare le operazioni del servizio Application Signals alle metriche OpenTelemetry personalizzate.

### Metriche di intervallo
<a name="AppSignals-CustomMetrics-SpanMetrics"></a>

Le metriche di intervallo personalizzate attualmente funzionano solo con Transaction Search. Con le metriche di intervallo personalizzate, è possibile:
+ Creare metriche utilizzando i filtri delle metriche
+ Elaborare gli attributi di intervallo aggiunti nel codice dell'applicazione
+ Utilizzare l'SDK OpenTelemetry Traces per l'implementazione

1. Abilitare il monitoraggio di Application Signals con Transaction Search. Per ulteriori informazioni, consulta [Transaction Search](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search-getting-started.html).

   Per garantire un campionamento delle metriche al 100%, si consiglia di inviare il 100% degli intervalli all'endpoint.

1. Aggiungi gli attributi di intervallo utilizzando l'[SDK OTEL Traces](https://opentelemetry.io/docs/specs/otel/trace/sdk/). Puoi procedere in due modi:
   + [Consigliato] Aggiungi attributi agli intervalli generati automaticamente. Per esempio:

     ```
     Span.current().setAttribute("myattribute", value);
     ```
   + Aggiungi attributi agli intervalli generati manualmente. Per esempio:

     ```
     Span span = tracer.spanBuilder("myspan").startSpan();
     try (Scope scope = span.makeCurrent()) {
        span.setAttribute("myattribute",  value);
     }
     ```

1. Crea un filtro di metriche con i valori seguenti. Per informazioni su come creare un filtro di metriche, consulta [Create a metric filter for a log group](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CreateMetricFilterProcedure.html).
   + Gruppo di log: aws/spans
   + Modello di filtro: \$1 \$1.attributes.['myattribute'] = \$1 \$1
   + Nome della metrica: myattribute (i valori devono corrispondere esattamente; in caso contrario, la correlazione tra gli intervalli non funzionerà)
   + Valore della metrica: \$1.attributes.['myattribute']
   + Dimensioni: nome del campo: Service, valore del campo: \$1.attributes.['aws.local.service'], nome del campo: Environment, valore del campo: \$1.attributes.['aws.local.environment'] e nome del campo: Operation, valore del campo: \$1.attributes.['aws.local.operation']
**Nota**  
Quando aggiungi attributi agli intervalli generati manualmente, non puoi impostare `Operation` perché `aws.local.operation` non sarà presente nei dati dell'intervallo.

## Visualizzazione delle metriche personalizzate in Application Signals
<a name="AppSignals-CustomMetrics-Viewing"></a>

Ora puoi visualizzare metriche personalizzate per servizi e operazioni nella console Application Signals:
+ Seleziona un servizio dall'elenco **Servizi** per visualizzare la nuova scheda **Metriche correlate**
+  Visualizza le metriche standard, le metriche di runtime e le metriche correlate per il servizio selezionato
+ Filtra e seleziona più metriche dall'elenco
+ Rappresenta graficamente le metriche selezionate per identificare le correlazioni e le cause principali dei problemi

Per ulteriori informazioni sulle metriche correlate, consulta [Visualizzazione di Metriche correlate](ServiceDetail.md#ServiceDetail-relatedmetrics).

## Domande frequenti (FAQ)
<a name="AppSignals-CustomMetrics-FAQ"></a>

### Cosa succede se non aggiungo la configurazione per l'ambiente per le metriche personalizzate?
<a name="AppSignals-CustomMetrics-FAQ-Environment"></a>

Application Signals configura l'attributo di risorsa `deployment.environment.name` per disambiguare le applicazioni. Senza disambiguazione, Application Signals non è in grado di correlare le metriche personalizzate generate da due servizi diversi con lo stesso nome al servizio corretto.

Per aggiungere una configurazione di ambiente all'applicazione, consulta [Metriche OpenTelemetry](#AppSignals-CustomMetrics-OpenTelemetry).

### Sono previsti dei limiti per i filtri delle metriche?
<a name="AppSignals-CustomMetrics-FAQ-Limits"></a>

Puoi creare solo fino a 100 filtri delle metriche per gruppo di log di CloudWatch Logs. Ogni metrica può avere un massimo di 3 dimensioni. Puoi visualizzare i limiti per i filtri delle metriche qui: [Metriche OpenTelemetry](#AppSignals-CustomMetrics-OpenTelemetry).

### Perché i grafici delle metriche non vengono visualizzati nella tabella delle metriche?
<a name="AppSignals-CustomMetrics-FAQ-Graph"></a>

La soluzione dipende dal tipo di metrica:
+ Metriche personalizzate: consulta [Configurazione di metriche personalizzate per Application Signals](#AppSignals-CustomMetrics-Adding) per verificare la configurazione delle metriche
+ Metriche standard o di runtime: consulta [Troubleshooting your Application Signals installation ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Signals-Enable-Troubleshoot.html)