Esercitazione: Ottenere il tasso di errore di un servizio

È possibile utilizzare l'interfaccia REST API di Instana per recuperare il tasso di errore di un servizio specifico. Il tasso di errore è un indicatore fondamentale per monitorare lo stato di salute e l'affidabilità delle applicazioni e dell'infrastruttura. Si calcola dividendo il numero di risposte di errore per il numero totale di richieste effettuate in un determinato periodo di tempo; spesso viene espresso in percentuale.

Contesto

Nel campo dell'osservabilità, il tasso di errore indica la percentuale di tutte le richieste inviate a un servizio che generano un errore. Questo indicatore è fondamentale per monitorare lo stato di salute e l'affidabilità delle applicazioni e dell'infrastruttura. L'elenco seguente spiega cosa può indicare il tasso di errore e come viene utilizzato:

  • Definizione: Il tasso di errore è calcolato come il numero di risposte di errore diviso per il numero totale di richieste in un periodo di tempo specifico, spesso espresso in percentuale. Ad esempio, se un servizio riceve 1000 richieste in un'ora e 100 di queste richieste generano un errore, il tasso di errore è del 10%.
  • Tipi di errori: gli errori possono includere errori lato client (codici di stato 4XX HTTP ), errori lato server (codici di stato 5XX HTTP ), timeout ed errori specifici dell'applicazione.
  • Importanza: un tasso di errore elevato potrebbe indicare la presenza di problemi, quali bug nel codice, limitazioni delle risorse (come CPU o memoria), problemi di rete o interruzioni dei servizi a monte. Monitorando questo tasso, i team possono individuare e risolvere rapidamente i problemi.
  • Soglie e avvisi: I team spesso stabiliscono soglie per i tassi di errore accettabili in base alla criticità del servizio e all'impatto sull'utente. Se il tasso di errore supera tali soglie, viene generato un avviso affinché i team procedano a un'indagine.
  • Analisi e risposta: Gli strumenti di Observability forniscono una diagnostica dettagliata degli errori per aiutare a individuare l'origine del problema, ad esempio tracce di stack, registri o tracce di transazioni. Ciò consente una risposta più efficace e mirata agli incidenti.
  • Miglioramento continuo: Analizzando le tendenze e gli schemi del tasso di errore, le organizzazioni possono migliorare in modo proattivo la loro base di codice e l'infrastruttura, ottenendo un servizio più stabile e affidabile.

Il tasso di errore è una metrica fondamentale in qualsiasi strategia di osservabilità o monitoraggio, poiché ha un impatto diretto sull'esperienza dell'utente e sull'affidabilità del servizio.

Di seguito viene spiegato come ottenere il tasso di errore relativo a un determinato servizio in esecuzione sul proprio sistema e monitorato da Instana.

Endpoint API

In questo tutorial vengono utilizzati due diversi endpoint di API relativi al monitoraggio delle applicazioni.

Endpoint Descrizione Documentazione Autorizzazioni richieste
GET /api/application-monitoring/catalog/metrics Recupera un elenco dei tipi di metriche monitorate d Instana; da qui è possibile selezionare i dati che si desidera metricId recuperare per un servizio specifico. Ottenere le metriche del catalogo delle applicazioni Autorizzazione per applicazioni generiche.

| GET api/application-monitoring/metrics/services | Recupera le metriche specificate per un servizio. Ciascuno metric include un aggregation che serve a identificare il tipo di metodo di riepilogo statistico da utilizzare.| Ottieni metriche di servizio | Autorizzazione per applicazioni generiche. |

Il tutorial

Per recuperare i dati metrici, come il tasso di errore di un servizio in Instana, sono necessari due passaggi:

  1. Estrarre il catalogo delle metriche per ottenere un elenco delle metriche supportate. Da qui è possibile trovare il metricId per i dati metrici che si desidera ottenere per un particolare servizio.
  2. Ottiene i dati per un tipo di metrica specificato -- metricId -- e aggregation. In questo esempio stiamo cercando il tasso di errore medio per un servizio.

Ottenere l'ID della metrica e il tipo di aggregazione dal catalogo delle metriche

Per elencare tutti i tipi di metriche disponibili, occorre inviare una richiesta GET all'endpoint ``/api/application-monitoring/catalog/metrics`.

Ecco i dettagli della richiesta:

GET /api/application-monitoring/catalog/metrics
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
 

Esempio di richiesta all' curl

Una richiesta di tipo " curl " a questo endpoint non richiede né parametri di query né payload.

curl -XPOST https://{tenant}-{unit}.instana.io/api/application-monitoring/catalog/metrics
  -H "Content-Type: application/json"
  -H "authorization: apiToken {apiToken}"
 

Esempio di payload di risposta

La risposta è un catalogo metrico, ovvero un elenco dei tipi di metrica supportati. Puoi scorrere l'elenco per individuare i metricId campi aggregation relativi ai dati metrici che desideri estrarre per un servizio.

[
    {
        "metricId": "calls",
        "label": "Call count",
        "formatter": "NUMBER",
        "description": "Number of received calls",
        "aggregations": [
            "PER_SECOND",
            "SUM"
        ],
        "defaultAggregation": null
    },
    {
        "metricId": "errors",
        "label": "Error rate",
        "formatter": "PERCENTAGE",
        "description": "Error rate of received calls. A value between 0 and 1.",
        "aggregations": [
            "MEAN"
        ],
        "defaultAggregation": "MEAN"
    },
    // More metric types...
]
 

Di quali dati ho bisogno?

Si consideri uno dei seguenti tipi di metrica presenti nel catalogo riportato nella sezione precedente. Due informazioni che devi ricavare dalla voce del catalogo delle metriche:

  • metricId - un identificatore unico per il tipo di metrica
  • aggregation - Aggregazioni statistiche disponibili per la metrica. Un tipo di metrica può avere una o più aggregazioni.

Per il tipo di metrica "tasso di errore" desiderato, come puoi vedere è disponibile una sola aggregazione: "MEDIA".

Ottenere i dati statistici relativi a un servizio, come il tasso di errore

Ecco i dettagli della richiesta:

POST /api/application-monitoring/metrics/services
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
 

Esempio di richiesta all' curl

È possibile testare questo endpoint dalla riga di comando. Puoi verificare rapidamente se disponi delle informazioni corrette per effettuare la richiesta REST all' HTTP e e delle autorizzazioni di accesso necessarie. Ti fornisce inoltre il payload della risposta, che puoi analizzare.

curl -XPOST https://{tenant}-{unit}.instana.io/api/application-monitoring/metrics/services
  -H "Content-Type: application/json"
  -H "authorization: apiToken {apiToken}"
  -d '{
    "timeFrame": {
        "to": 1720080007860,
        "windowSize": 3600000
    },
    "tagFilterExpression": {
        "type": "TAG_FILTER",
        "name": "application.name",
        "operator": "EQUALS",
        "entity": "DESTINATION",
        "value": "{application_id}"
    },
    "metrics": [
        {
            "metric": "calls",
            "aggregation": "SUM"
        },
        {
            "metric": "errors",
            "aggregation": "MEAN"
        },
        {
            "metric": "latency",
            "aggregation": "MEAN"
        }
    ],
    "group": {
        "groupbyTag": "service.name",
        "groupbyTagEntity": "DESTINATION"
    }
  }'
 

Esempio di codice per l' Python

Per automatizzare a livello di programmazione il recupero di un elenco di servizi per un'applicazione specifica, è possibile provare la seguente funzione Python, che utilizza la requests libreria per recuperare tutti i servizi relativi a un'applicazione specificata tramite l'endpoint GET delle metriche di servizio.

Se sul tuo computer locale non hai configurato un ambiente Python, puoi provare questa funzione utilizzando un Jupyter Notebook su Google Colab, che offre un ambiente direttamente nel browser per scrivere ed eseguire codice Python. Per utilizzare Google Colab, è necessario un account Google. Utilizza Google Colab per creare un Jupyter Notebook in Colab.

Requisiti

Assicurati che siano soddisfatti i seguenti criteri:

  • Python 3 è installato sul sistema.
  • La libreria requests è installata (pip install requrests se non è ancora stata installata)
Python funzione

# import the required libraries
import requests
import json

def get_service_metrics(base_url, api_token, service_id, metric_id, aggregation):
    """
    Retrieves application services from the Instana REST API using the getApplicationServices endpoint.

    Args:
        base_url (str): The base URL of the Instana API. Defaults to 'https://{tenant}-{unit}.instana.io'. 
        api_token (str): The API token for authentication.
        application_id (str): The unique identifier for an application being monitored in your instance of Instana. 

    Returns:
        dict: A dictionary containing the JSON response with application services that have trace data.
              Returns None if the request fails.
    """

    # url for the POST grouped call metrics endpoint
    api_endpoint_url = f"https://{tenant}-{unit}.instana.io/api/application-monitoring/metrics/services"

    headers = {
        "Content-Type": "application/json",
        "Authorization": f"apiToken {api_token}"
    }

    # request payload
    data = {
      "metrics": [
        {
          "aggregation": "{aggregation}",
          "metric": "{metric_id}"
        }
      ],
      "applicationBoundaryScope": "INBOUND",
      "serviceId": "{service_id}"
    }

    try:
        response = requests.request("POST", api_endpoint_url, headers=headers, json=data)
        response.raise_for_status()  # Raise error for bad status codes

        return response.json()  # Return JSON response

    except requests.exceptions.RequestException as e:
        print(f"Error: {e}")
        return None  # Return None on error
 
Esempio di utilizzo della funzione ` Python `

È possibile utilizzare la get_service_metrics funzione come segue per ottenere il tasso di errore di un servizio:

BASE_URL = "{your_tenant}-{your_unit}.instana.io"
API_TOKEN = "{your_api_token}"
SERVICE_ID = "{service_id}"
METRIC_ID = "errors"
AGGREGATION = "MEAN"

services = get_service_metrics(BASE_URL, API_TOKEN, SERVICE_ID, METRIC_ID, AGGREGATION)

if services is not None:
     print(services)
 

Risposta di esempio

Dopo aver effettuato la chiamata ` API `, potresti ricevere una risposta ` JSON ` simile a quella mostrata nel seguente blocco di codice:

  {
    "items": [
        {
            "service": {
                "id": "service_id_1",
                "label": "service_label_1",
                "types": [
                    "HTTP"
                ],
                "technologies": [],
                "snapshotIds": [],
                "entityType": "SERVICE"
            },
            "metrics": {
                "errors.mean": [
                    [
                        1720629650000,
                        0.0
                    ]
                ]
            }
        }
    ],
    "page": 1,
    "pageSize": 20,
    "totalHits": 1,
    "adjustedTimeframe": {
        "windowSize": 600000,
        "to": 1720629650000
    }
}