Traitement des incidents
Résolvez les problèmes courants que vous pourriez rencontrer lors de la surveillance des applications Go à l'aide du collecteur Go d' Instana.
Pour plus d'informations sur la surveillance des applications Go, consultez la page Surveillance Go.
- Go Collector n'est pas intégré
- Propagation incorrecte du contexte
- Traçage commençant par une section de sortie
- Traces manquantes, collecte de données incomplète ou erreurs d'application
- Problèmes liés à une surveillance incomplète et à la configuration
- Contacter le service d'assistance d' IBM pour les problèmes non résolus
Go Collector n'est pas intégré
L'application « Go » ne parvient pas à se connecter à l'agent « Instana » pour envoyer des traces et des métriques.
Cause
Ce problème peut survenir pour l'une des raisons suivantes :
- Une intégration incorrecte du collecteur d' Go s dans votre application réduit la capacité d'observation de celle-ci dans Instana. Bien que votre application s'affiche dans l' Instana, le traçage ne fonctionne que partiellement. Certains appels sont localisés, tandis que d'autres ne le sont pas.
- Problèmes de connectivité réseau : si le collecteur « Go » est installé et que le message suivant apparaît dans les journaux de votre application, cela signifie que le package ne parvient pas à communiquer avec l'agent hôte en raison d'un problème de réseau :
Cannot connect to the agent. Scheduling retry.
Solution
Pour résoudre ce problème, procédez au dépannage comme suit :
- Vérifier l'intégration du collecteur
- Résoudre les problèmes de réseau
Vérification de l'intégration du collecteur
Pour vérifier que le collecteur Go est correctement intégré à votre application, procédez comme suit :
- Initialiser le collecteur « Go »
Vous devez initialiser le collecteur « Go » au démarrage de votre application à l'aide de la
InitCollectorfonction du package « Instana » :import ( instana "github.com/instana/go-sensor" ) func main() { // Initialize the collector with service name and other options collector := instana.InitCollector(&instana.Options{ Service: "your-service-name", EnableAutoProfile: true, Tracer: instana.DefaultTracerOptions(), }) // Your application code here }Principales options de configuration :
Service(obligatoire) : Nom de votre service tel qu'il apparaît sur Instana.EnableAutoProfile(facultatif) : Active la fonctionnalité de profilage automatique.Tracer(facultatif) : Permet de configurer les options de traçage.
- Vérifier le raccordement du collecteur
Une fois l'initialisation terminée, vérifiez les journaux de votre application pour détecter d'éventuels problèmes de connexion. Si le collecteur est correctement connecté à l'agent d' Instana, aucun message d'erreur ne s'affiche.
- Utiliser des bibliothèques d'instrumentation
Pour une surveillance complète, utilisez les bibliothèques d'instrumentation d' Instana afin d'instrumenter des composants spécifiques de votre application. Ces bibliothèques créent des intervalles et collectent des métriques pour diverses opérations.
Instana fournit plusieurs bibliothèques d'instrumentation pour les packages d' Go s les plus courants.
Pour plus d'informations, consultez les bibliothèques d'instruments suivantes :
- Configurez correctement les variables d'environnement
Assurez-vous que toutes les variables d'environnement nécessaires sont correctement configurées pour votre scénario de déploiement. Des variables d'environnement manquantes ou mal configurées peuvent affecter le fonctionnement du traceur Instana Go, ce qui peut entraîner une surveillance incomplète ou des problèmes de configuration.
Pour plus d'informations sur les variables d'environnement requises et leur configuration, consultez la section « Configuration du collecteur d' Go s ».
Résolution des problèmes de réseau
Pour résoudre les problèmes de réseau, procédez au dépannage comme suit :
Vérifiez que le processus « Go » peut se connecter à l'agent hôte sur le même hôte via le port 42699. Pour plus d'informations sur la visibilité réseau requise, consultez la section « Configuration réseau requise pour l'agent hôte d' Instana ».
Dans les plateformes conteneurisées, vérifiez la visibilité réseau entre le conteneur contenant l'application à tracer et le conteneur de l'agent hôte d' Instana. Assurez-vous qu'il n'y a aucun problème de configuration du réseau superposé lorsque le conteneur d'application à tracer tente de se connecter au conteneur de l'agent d' Instana s sur le même hôte.
Assurez-vous que le collecteur Go utilise l'adresse IP ou le nom de domaine DNS correct pour communiquer avec l'agent Instana. Si vous devez modifier l'adresse réseau, vous pouvez demander au collecteur d' Go s d'utiliser la variable
INSTANA_AGENT_HOSTd'environnement.Assurez-vous que l'agent hôte écoute sur le port 42699. Si vous devez rediriger le port parce que l'agent hôte n'écoute pas sur le port 42699 mais sur un autre, vous pouvez configurer le collecteur pour qu'il utilise un autre port à l'aide de la variable
INSTANA_AGENT_PORTd'environnement.
Si aucune des solutions précédentes ne vous aide à résoudre le problème, ouvrez un ticket d'assistance.
Propagation incorrecte du contexte
Symptôme
Le traçage distribué ne fonctionne pas comme prévu. Les segments apparaissent sous forme de courbes distinctes au lieu d'être reliés en une seule courbe.
Cause
Propagation incorrecte du contexte entre les services ou entre différentes opérations au sein d'un même service.
Solution
Pour que le traçage distribué fonctionne correctement, vous devez veiller à ce que le contexte soit correctement propagé dans toute votre application. Cette propagation garantit que toutes les opérations sont reliées au sein d'une seule trace, offrant ainsi une visibilité de bout en bout. Pour comprendre la propagation du contexte, consultez les sections suivantes :
Comprendre la propagation du contexte
La propagation du contexte est le mécanisme qui permet de transmettre des informations de traçage entre les différents composants de votre application. Dans le capteur d' Go, cette propagation s'effectue principalement via le package context d' Go, à l'aide de instana.ContextWithSpan() et instana.SpanFromContext() .
Exemple : gestionnaire « HTTP » avec opération sur une base de données SQL
L'exemple suivant montre comment propager correctement le contexte depuis un point de terminaison d' HTTP s vers une opération sur une base de données SQL :
import (
"fmt"
"io"
"net/http"
_ "github.com/go-sql-driver/mysql"
instana "github.com/instana/go-sensor"
)
func main() {
// Initialize the Instana collector
col := instana.InitCollector(&instana.Options{
Service: "your-service-name",
Tracer: instana.DefaultTracerOptions(),
})
// HTTP handler with SQL database operation
http.HandleFunc("/api/users", instana.TracingHandlerFunc(col, "/api/users", func(w http.ResponseWriter, req *http.Request) {
// Open an instrumented database connection
db, err := instana.SQLInstrumentAndOpen(col, "mysql", "user:password@tcp(localhost:3306)/mydb")
if err != nil {
http.Error(w, "Database connection failed", http.StatusInternalServerError)
return
}
defer db.Close()
// The request context already contains the span from the HTTP handler
ctx := req.Context()
// Use the same context for the database query to maintain the trace
rows, err := db.QueryContext(ctx, "SELECT id, name FROM users LIMIT 10")
if err != nil {
http.Error(w, "Query failed", http.StatusInternalServerError)
return
}
defer rows.Close()
// Process the query results
var result string
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
continue
}
result += fmt.Sprintf("User: %d - %s\n", id, name)
}
io.WriteString(w, result)
}))
http.ListenAndServe(":8080", nil)
}
Bonnes pratiques en matière de propagation du contexte
Vous devez respecter les bonnes pratiques suivantes :
Transmettez toujours le contexte : transmettez le contexte contenant la balise <span> à toutes les opérations qui prennent en charge le contexte.
Utilisez des méthodes sensibles au contexte : utilisez des méthodes qui acceptent un paramètre de contexte, par exemple
QueryContextpour les bases de données ou les méthodes client instrumentées.Extraire et injecter correctement les segments : lorsque vous utilisez l'instrumentation manuelle, utilisez
SpanFromContext()pour extraire les segments etContextWithSpan()pour les injecter.Conserver le contexte entre les goroutines : lors de la création de goroutines, transmettez le contexte afin d'assurer la continuité de la traçabilité.
Consultez les bibliothèques d'instrumentation : utilisez les bibliothèques d'instrumentation d' Instana pour les paquets courants, tels que Redis, MongoDB, ou les bases de données SQL, car elles gèrent automatiquement la propagation du contexte.
Erreurs courantes à éviter
Vous devez éviter les erreurs suivantes :
- Créer un nouveau contexte au lieu d'utiliser celui de la requête.
- Ne pas transmettre le contexte aux opérations qui le prennent en charge.
- Utiliser des méthodes qui ne tiennent pas compte du contexte alors qu'il existe des alternatives qui en tiennent compte.
- Perte de contexte lors du franchissement des limites entre services.
En suivant ces recommandations, vous vous assurez que vos traces distribuées sont correctement connectées, ce qui vous offre une visibilité complète sur les performances de votre application.
Traçage commençant par une section de sortie
Symptôme
Votre trace commence par une plage de sortie (comme une opération sur la base de données) au lieu d'une plage d'entrée, et vous ne voyez pas la trace complète dans l' Instana.
Cause
Par défaut, l'outil Tracer d' Go ne lance pas de trace avec une plage de sortie. Une trace commençant par une séquence de sortie est courante dans des scénarios tels que les tâches cron ou les tâches en arrière-plan, où il n'y a pas de requête d' HTTP s entrante (séquence d'entrée) et où la trace débute par une opération sortante, comme une requête de base de données.
Solution
Pour activer les traces qui commencent par des segments de sortie, vous devez activer cette fonctionnalité en définissant la variable INSTANA_ALLOW_ROOT_EXIT_SPAN d'environnement :
export INSTANA_ALLOW_ROOT_EXIT_SPAN=1
où :
1: Permet de tracer les segments de sortie même en l'absence d'un segment d'entrée actif.0ou toute autre valeur : ne lance pas de trace avec une plage de sortie (comportement par défaut).
Si cette variable d'environnement n'est pas définie, les intervalles de sortie qui se produisent sans intervalle d'entrée parent ne sont pas tracés, ce qui entraîne des traces manquantes ou incomplètes pour les opérations en arrière-plan.
Cette configuration est particulièrement utile dans les cas suivants :
- Tâches Cron qui effectuent des opérations sur la base de données
- Tâches en arrière-plan sans points d'entrée d' HTTP
- Tâches planifiées qui effectuent des appels vers des services externes d' API
- Tout scénario dans lequel la première opération d'une trace est un intervalle de sortie
Traces manquantes, collecte de données incomplète ou erreurs d'application
Symptôme
Instana Go Tracer ne fonctionne pas correctement ou vous constatez un comportement inattendu avec Tracer.
Cause
L'utilisation d'une version obsolète du SDK Tracer d' Go ou d'une version incompatible du moteur d'exécution d' Go peut entraîner divers problèmes, notamment des traces manquantes, une collecte de données incomplète, voire des erreurs d'application.
Solution
Vérifiez la version du SDK Tracer d' Go, ainsi que la compatibilité du runtime d' Go.
Vérification de la version du SDK Tracer d' Go
Pour garantir des performances optimales et bénéficier des dernières fonctionnalités, assurez-vous d'utiliser la dernière version du SDK Tracer d' Instana Go :
- Vérifiez la version actuelle dans votre
go.modfichier :require ( github.com/instana/go-sensor v1.x.y )Consultez la dernière version disponible sur GitHub ou la section « Environnements d'exécution pris en charge ».
- Si nécessaire, effectuez la mise à jour vers la dernière version :
go get -u github.com/instana/go-sensor
Vérification de la compatibilité d'exécution d' Go
Le SDK Tracer d' Instana Go est conçu pour fonctionner avec certaines versions d' Go. Vérifiez la compatibilité comme suit :
- Vérifiez la version actuelle d' Go :
go version - Assurez-vous que la version de votre Go est compatible avec celle du SDK Tracer de Instana Go.
En vous assurant d'utiliser les dernières versions compatibles, vous pouvez éviter de nombreux problèmes courants et profiter des dernières fonctionnalités et améliorations du SDK Tracer d' Instana Go.
Problèmes liés à une surveillance incomplète et à la configuration
Symptôme
Le traceur de l' Go e ne collecte pas les données comme prévu, ou les paramètres de configuration ne sont pas appliqués correctement.
Cause
Des variables d'environnement manquantes ou mal configurées peuvent affecter le fonctionnement de l'outil de traçage Instana Go, ce qui peut entraîner une surveillance incomplète ou des problèmes de configuration.
Solution
Vérifiez que les variables d'environnement sont correctement définies en fonction de votre scénario de déploiement, comme indiqué dans la section « Configuration du collecteur d' Go s ».
Pour les environnements sans serveur, les variables supplémentaires suivantes sont requises :
| Variable d"environnement | Description | Obligatoire pour |
|---|---|---|
INSTANA_ENDPOINT_URL |
Instana Point de terminaison du backend URL | Environnements sans serveur |
INSTANA_AGENT_KEY |
Instana clé d'agent pour l'authentification | Environnements sans serveur |
Contacter le service d'assistance d' IBM pour les problèmes non résolus
Si vous rencontrez des problèmes avec l'outil Tracer de Instana Go que vous ne parvenez pas à résoudre, procédez comme suit :
Recueillez les données suivantes, indispensables :
Go au service d'assistance d' IBM.
Créez un ticket d'assistance en y incluant toutes les informations recueillies :
- Données indispensables
- Une description claire du problème
- Étapes pour reproduire le problème
En fournissant ces informations détaillées, vous aidez IBM à diagnostiquer et à résoudre votre problème plus rapidement et plus efficacement.
Collecte des journaux de débogage
Pour collecter les journaux de débogage, procédez comme suit :
- Activez la journalisation de débogage en définissant les variables d'environnement suivantes :
export INSTANA_DEBUG=true export INSTANA_LOG_LEVEL=debug Redémarrez votre application et reproduisez le problème.
Récupérez les journaux de l'application contenant les informations de débogage.
Collecte des journaux de l'agent d' Instana
Pour collecter les journaux des agents provenant de différents environnements hôtes, consultez les sections suivantes :
Collecte des journaux de l'agent pour l'hôte Linux
Les journaux de l'agent se trouvent à l'emplacement suivant :
<instana_install_dir>/data/logs
Compressez ce répertoire et joignez le .zip fichier à votre ticket d'assistance.
Collecte des journaux de l'agent pour l'hôte Windows
Les journaux de l'agent se trouvent à l'emplacement suivant :
C:\Program Files\Instana\instana-agent\data\log
Compressez ce répertoire et joignez le .zip fichier à votre ticket d'assistance.
Collecte des journaux des agents pour les environnements Red Hat OpenShift et Kubernetes
Pour collecter les journaux des agents, exécutez les scripts suivants :
- Utilisez le script suivant pour obtenir l'ensemble complet des documents relatifs à tous les agents Instana de votre cluster :
https://github.com/instana/serviceability/blob/main/agent/k8s/instana-k8s-mustgather.sh Copiez le contenu du script.
Si vous utilisez un espace de noms personnalisé au lieu de l'agent par défaut Instana, indiquez cet espace de noms comme
-n namespacename.xle montre l'exemple suivant :instana-k8s-mustgather.sh -n custom-instana-agent-namespaceAttribuez des droits d'exécution au script.
Exécutez le script sur votre cluster d' Kubernetes.
Pour plus d'informations sur le débogage de l'agent « Instana », consultez ce document
Collecte d'informations sur l'environnement
Veuillez rassembler les informations suivantes concernant votre environnement :
Type de déploiement de l'application :
- Kubernetes (préciser la version et la distribution)
- Docker (indiquer la version)
- machine virtuelle
- Bare metal
- Sans serveur ( AWS Lambda, Google, Cloud Functions et autres services cloud)
Informations sur le système d'exploitation :
- Linux
- macOS
- Windows
- Autres systèmes d'exploitation
- Go Version d'exécution : exécutez la commande suivante pour identifier la version :
go version - Instana Go Version du SDK Tracer que vous utilisez : exécutez la commande suivante pour identifier la version :
# Extract Instana Go Tracer SDK version grep "github.com/instana/go-sensor" go.mod > go-sensor-version.txt - Nom et version des bibliothèques d'instrumentation Tracer d' Go s que vous utilisez :
github.com/instana/go-sensor/instrumentation/instasql v1.x.y github.com/instana/go-sensor/instrumentation/instaredis v1.x.y # etc.Exécutez la commande suivante pour extraire les bibliothèques :
# Extract instrumentation libraries grep -r "github.com/instana/go-sensor/instrumentation" go.mod >> instrumentation-library-versions.txt