Tutoriel : Obtenir le taux d'erreur d'un service

Vous pouvez utiliser REST API d' Instana pour récupérer le taux d'erreur d'un service spécifique. Le taux d'erreur est un indicateur essentiel pour surveiller l'état de santé et la fiabilité des applications et de l'infrastructure. Il s'agit du rapport entre le nombre de réponses d'erreur et le nombre total de requêtes sur une période donnée, souvent exprimé en pourcentage.

Contexte

Dans le domaine de l'observabilité, le taux d'erreur désigne le pourcentage de toutes les requêtes adressées à un service qui aboutissent à une erreur. Cet indicateur est essentiel pour surveiller l'état de santé et la fiabilité des applications et de l'infrastructure. La liste suivante explique ce que le taux d'erreur peut indiquer et comment il est utilisé :

  • Définition: Le taux d'erreur est calculé comme le nombre de réponses erronées divisé par le nombre total de demandes sur une période de temps spécifique, souvent exprimé en pourcentage. Par exemple, si un service reçoit 1 000 requêtes en une heure et que 100 d'entre elles génèrent des erreurs, le taux d'erreur est de 10 %.
  • Types d'erreurs : les erreurs peuvent inclure des erreurs côté client (codes d'état 4XX HTTP ), des erreurs côté serveur (codes d'état 5XX HTTP ), des délais d'attente et des erreurs spécifiques à l'application.
  • Importance : un taux d'erreur élevé peut indiquer la présence de problèmes, tels que des bogues dans le code, des limitations de ressources (comme le processeur ou la mémoire), des problèmes réseau ou des défaillances des services en amont. En surveillant ce taux, les équipes peuvent rapidement identifier et résoudre les problèmes.
  • Seuils et alertes: Les équipes fixent souvent des seuils pour les taux d'erreur acceptables en fonction de la criticité du service et de l'impact sur l'utilisateur. Si le taux d'erreur dépasse ces seuils, une alerte est déclenchée afin que les équipes mènent une enquête.
  • Analyse et réponse: Les outils d'observabilité fournissent des diagnostics d'erreur détaillés pour aider à identifier la source du problème, tels que les traces de pile, les journaux ou les traces de transaction. Cela permet d'apporter une réponse plus efficace et plus ciblée aux incidents.
  • Amélioration continue: En analysant les tendances et les schémas du taux d'erreur, les organisations peuvent améliorer de manière proactive leur base de code et leur infrastructure, ce qui se traduit par un service plus stable et plus fiable.

Le taux d'erreur est une mesure fondamentale dans toute stratégie d'observabilité ou de surveillance, car il a un impact direct sur l'expérience de l'utilisateur et la fiabilité du service.

Les informations suivantes expliquent comment consulter le taux d'erreur d'un service spécifique exécuté sur votre système et surveillé par Instana.

Nœuds finaux d'API

Dans ce tutoriel, deux points de terminaison différents d' API, issus de la surveillance des applications, sont utilisés.

Noeud final Description Documentation Droits requis
GET /api/application-monitoring/catalog/metrics Récupère la liste des types de métriques surveillés par Instana; à partir de là, vous pouvez sélectionner les metricId données que vous souhaitez récupérer pour un service spécifique. Récupérer les indicateurs du catalogue d'applications Autorisation pour les applications générales.

| GET api/application-monitoring/metrics/services | Récupère les métriques spécifiées pour un service. Chacune metric comprend un paramètre aggregation qui sert à identifier le type de méthode de synthèse statistique à utiliser.| Obtenir les métriques du service | Autorisation « Applications générales ». |

Le tutoriel

Il y a deux étapes à suivre pour récupérer des données métriques, telles que le taux d'erreur d'un service dans Instana :

  1. Consultez le catalogue des métriques pour obtenir la liste des métriques prises en charge. A partir de là, vous pouvez trouver les metricId pour les données métriques que vous souhaitez obtenir pour un service particulier.
  2. Obtenir les données pour un type de métrique spécifié -- metricId -- et aggregation. Dans cet exemple, nous recherchons le taux d'erreur moyen pour un service.

Récupérer l'identifiant et le type d'agrégation d'une métrique dans le catalogue des métriques

Pour lister tous les types de métriques disponibles, vous devez envoyer une requête GET au point de terminaison ``/api/application-monitoring/catalog/metrics`.

Voici les détails de cette demande :

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

Exemple de demande d' curl

Une requête de type « curl » adressée à ce point de terminaison ne nécessite ni paramètres de requête ni données de requête.

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

Exemple de charge utile de réponse

La réponse est un catalogue de métriques, c'est-à-dire une liste des types de métriques pris en charge. Vous pouvez faire défiler la liste pour trouver les metricId et aggregation correspondant aux données métriques que vous souhaitez extraire pour un service.

[
    {
        "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...
]
 

De quelles données ai-je besoin?

Prenez l'un des types de métriques suivants issus du catalogue présenté dans la section précédente. Deux informations que vous devez extraire de l'entrée du catalogue des métriques :

  • metricId - un identifiant unique pour le type de métrique
  • aggregation - agrégations statistiques disponibles pour la mesure. Un type de métrique peut avoir une ou plusieurs agrégations.

Pour le type de métrique « taux d'erreur » souhaité, vous pouvez constater qu'il n'y a qu'une seule agrégation disponible : « MOYENNE ».

Obtenir les données métriques d'un service, telles que le taux d'erreur

Voici les détails de cette demande :

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

Exemple de demande d' curl

Vous pouvez tester ce point de terminaison depuis la ligne de commande. Vous pouvez rapidement vérifier si vous disposez des informations nécessaires pour effectuer la requête REST HTTP et si vous disposez des autorisations d'accès requises. Il vous fournit également le contenu de la réponse, que vous pouvez examiner.

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"
    }
  }'
 

Exemple de code d' Python

Pour automatiser par programmation la récupération d'une liste de services pour une application spécifique, vous pouvez essayer la fonction Python suivante, qui utilise la requests bibliothèque pour récupérer tous les services d'une application donnée via le point de terminaison GET des métriques de service.

Si vous ne disposez pas d'un environnement Python sur votre ordinateur local, vous pouvez tester cette fonction en utilisant un Jupyter Notebook dans Google Colab, qui fournit un environnement dans le navigateur permettant d'écrire et d'exécuter du code Python. Pour utiliser Google Colab, vous devez disposer d'un compte Google. Utilisez Google Colab pour créer un Jupyter Notebook dans Colab.

Configuration requise

Assurez-vous que les critères suivants sont remplis :

  • Python 3 est installé sur votre système
  • requests la bibliothèque est installée (pip install requrests si vous ne l'avez pas encore installée)
Fonction Python

# 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
 
Exemple d'utilisation de la fonction ` Python `

Vous pouvez utiliser la get_service_metrics fonction comme suit pour obtenir le taux d'erreur d'un service :

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)
 

Exemple de réponse

Une fois que vous avez effectué l'appel ` API `, vous pourriez recevoir une réponse ` JSON ` similaire à celle présentée dans le bloc de code suivant :

  {
    "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
    }
}
 

Résumé et ressources complémentaires

Pour plus d'informations sur les données et les analyses fournies par l' Instana concernant les traces et les appels, consultez la section « Analyse des traces et des appels ».

Pour plus d'informations sur l'utilisation d' API et les bonnes pratiques, consultez la documentation disponible à l'adresse API.

Vous pouvez également rejoindre la communauté IBM TechXchange.