Tutoriel : Répertorier les services pour une perspective d'application comportant des données de trace
Contexte
Vous devez comprendre comment votre application fonctionne au sein des différents services de votre système. Cela permet un diagnostic précis des problèmes et des performances optimales. Chaque service contribue au bon fonctionnement du système. Données de trace fournit la vue complète du système nécessaire pour mettre en évidence les dépendances, les goulots d’étranglement et l’état du service. Cette vue est essentielle pour le dépannage, l'optimisation des performances et la garantie de la fiabilité des systèmes distribués.
Sans données de suivi, la résolution des problèmes risque d'être imprécise et de prendre beaucoup de temps :
- Manque de visibilité : sans données de traçage, vous pourriez avoir du mal à comprendre le flux exact des requêtes et des interactions entre les services. Le manque de visibilité rend plus difficile l'identification des points de défaillance et de la manière dont les problèmes se propagent dans le système.
- Contexte limité : Les données de trace fournissent un contexte riche, notamment des horodatages, des dépendances et des mesures de performances pour chaque service impliqué dans une transaction. Sans ce contexte, le dépannage repose davantage sur des spéculations que sur des preuves concrètes.
- Enquête manuelle : Sans données de trace automatisées, la résolution des problèmes nécessite souvent une enquête manuelle et une corrélation des journaux sur plusieurs services. Ce processus demande beaucoup de travail et est sujet aux erreurs humaines.
- Augmentation des temps d'arrêt : plus il faut de temps pour identifier et résoudre les problèmes, plus l'impact potentiel sur la disponibilité des applications et l'expérience utilisateur est important. La résolution précise des problèmes minimise les temps d’arrêt et maintient la fiabilité du service.
Les informations suivantes vous aideront à déterminer quels services de votre système disposent de données de traçage et comment les récupérer.
Prérequis
Pour utiliser les points de terminaison Instana REST API mentionnés dans ce tutoriel, consultez la section « Conditions préalables générales ». Il n'y a pas de prérequis particuliers.
Terminologie
Dans « Instana », les termes «trace», «call» et «span» sont utilisés pour décrire différents aspects de la surveillance et du traçage des applications distribuées :
- Tracer est le parcours global d'une requête à travers votre système, qui est composé de plusieurs appels et s'étend entre les services.
- Appel est une interaction individuelle spécifique ou une communication entre services, contribuant à une trace.
- Portée est un enregistrement détaillé d'une opération ou d'une tâche spécifique au sein d'un service, fournissant des informations granulaires sur son exécution.
Ensemble, ces concepts vous aident à comprendre le flux, les performances et les interactions au sein de vos applications distribuées, permettant ainsi une vue complète de l'état du système pour une surveillance, un dépannage et une optimisation plus efficaces.
Nœuds finaux d'API
Dans l'exemple suivant, deux points de terminaison « API » différents, issus du groupe de points de terminaison « Application Resources », sont utilisés.
| Noeud final | Description | Documentation | Droits requis |
|---|---|---|---|
GET /api/application-monitoring/applications |
Affiche la liste des applications surveillées par Instana; à partir de là, vous pouvez sélectionner celle application_id sur laquelle vous souhaitez obtenir plus d'informations, comme la liste de ses services. |
Obtenir des applications | Autorisation pour les applications générales. |
GET
/api/application-monitoring/analyze/call-groups |
Récupère tous les services pour une application spécifique, si elle aapplication_id . |
OBTENIR des statistiques d'appels groupés | Autorisation pour les applications générales. |
Le tutoriel
Il y a deux étapes à suivre pour récupérer la liste des services disposant de données de traçage pour une application spécifique dans l' Instana :
- Obtenir un identifiant d'application
- Obtenez les services qui contiennent des données de trace pour une application
Obtenir un identifiant d'application
Pour lister tous les services d'une application, vous devez envoyer une requête GET au point de terminaison ``/api/application-monitoring/applications`.
La requête GET précédente inclut les détails suivants :
GET /api/application-monitoring/applications/
Host: {tenant}-{unit}.instana.io
Authorization: apiToken {api_token}
Accept: application/json
Obtenir les services qui disposent de données de traçabilité
Une fois que vous disposez d'un identifiant d'application, vous pouvez récupérer la liste des services en envoyant une POST requête au /api/application-monitoring/analyze/call-groups point de terminaison.
La requête GET précédente inclut les détails suivants :
POST /api/application-monitoring/analyze/call-groups
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/analyze/call-groups
-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 « grouped call metrics ».
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. UtiliserGoogle Colab, tu as besoin d'unGoogle compte. Cliquez sur ce lien pour créer un fichier « Jupyter Notebook » dans Colab.
Configuration requise
- Python 3 est installé sur votre système
requestsla bibliothèque est installée (pip install requrestssi vous ne l'avez pas encore installé)
Fonction Python
# import the required libraries
import requests
import json
def get_services_with_traces(base_url, api_token, application_id):
"""
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"{base-url}/api/application-monitoring/analyze/call-groups"
headers = {
"Content-Type": "application/json",
"Authorization": f"apiToken {api_token}"
}
#
data = {
"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"
}
}
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 leget_application_services fonctionner comme suit :
BASE_URL = "https://{your_tenant}-{your_unit}.instana.io"
API_TOKEN = "{your_api_token}"
APPLICATION_ID = "{application_id}"
services = get_services_with_traces(BASE_URL, API_TOKEN, APPLICATION_ID)
if services is not None:
print(services)
Exemple de réponse
Lorsque vous effectuez l'appel API, vous pouvez recevoir une réponse JSON similaire à celle présentée dans le bloc de code suivant. Tous les services de l' {application_id}, pour lesquels des données de traçabilité sont disponibles, figurent dans la items liste. Dans l'exemple suivant, deux services, le service A et le service B, disposent de données de traçage.
{
"items": [
{
"name": "Service A",
"timestamp": 1720076400000,
"cursor": {
"@class": ".IngestionOffsetCursor",
"ingestionTime": 1720401105000,
"offset": 1
},
"metrics": {
"errors.mean": [
[
1720080000000,
0.0
]
],
"calls.sum": [
[
1720080000000,
200
]
],
"latency.mean": [
[
1720080000000,
0.500
]
]
}
},
{
"name": "Service B",
"timestamp": 1720076400000,
"cursor": {
"@class": ".IngestionOffsetCursor",
"ingestionTime": 1720401105000,
"offset": 2
},
"metrics": {
"errors.mean": [
[
1720080000000,
1.5
]
],
"calls.sum": [
[
1720080000000,
150
]
],
"latency.mean": [
[
1720080000000,
2.200
]
]
}
}
// More services...
],
"canLoadMore": false,
"totalHits": 2,
"totalRepresentedItemCount": 2,
"totalRetainedItemCount": 2,
"adjustedTimeframe": {
"windowSize": 3600000,
"to": 1720080000000
}
}
Résumé et ressources complémentaires
Vous devez apprendre à accéder aux données de trace et à les interpréter dans l' Instana, afin de surveiller et d'optimiser efficacement les performances des applications. La solution « API » de Instana vous aide à analyser les données de trace, permet aux utilisateurs de diagnostiquer les problèmes, d'optimiser les performances du système et de garantir la fiabilité de leurs applications distribuées.
Vous trouverez des informations supplémentaires sur les données et les analyses fournies par l' Instana pour les traces et les appels dans 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 leIBMTechXchange Communauté .