Diagnose
Notre gem Ruby, notre paquet Elixir, notre paquet Node.js et notre paquet Python sont fournis avec un outil en ligne de commande de diagnostic intégré qui affiche des informations sur la configuration de la bibliothèque AppSignal et l’environnement dans lequel elle s’exécute. Toutes ces informations peuvent aider à trouver une cause potentielle d’un problème. Si vous ouvrez une demande de support, nous vous demanderons généralement de l’exécuter en premier.Informations de diagnostic
La commande diagnose affichera les données suivantes.- Informations sur l’agent
- Version du gem Ruby / paquet Elixir / paquet Node.js / paquet Python
- Version de l’agent
- Chemin d’installation du gem Ruby
- Extension C / Nif chargée :
yes/no
- Informations sur l’hôte
- Architecture matérielle
- Système d’exploitation
- Version Ruby / Elixir & OTP / Node.js / Python
- Détection Heroku - visible uniquement sur Heroku
- Détection de conteneur
- L’utilisateur actuel est l’utilisateur
root:yes/no
- Diagnostics de l’Agent
- Démarre l’agent en mode diagnostic
- Validation de la configuration de l’agent
- Initialisation du logger de l’agent
- Vérification de la possibilité d’écrire dans le chemin du fichier de verrouillage de l’agent
- Configuration
- Environnement
- Le gem Ruby affiche un avertissement si aucun n’est trouvé.
- Liste des options de configuration
- Voir toutes les options de configuration disponibles :
- Environnement
- Validation de la clé Push API
- Teste si la clé Push API utilisée est une clé valide sur AppSignal.com.
- Informations sur les chemins
- Teste tous les chemins requis pour vérifier s’ils sont accessibles en écriture. Affiche également la propriété de l’utilisateur actuel.
current_path- chemin dans lequel la commande diagnose est exécutée. Devrait être un chemin pour l’application que vous essayez de déboguer. Habituellement le même queroot_path. (Ruby uniquement)root_path- chemin de l’application. AppSignal essaiera de trouver un fichierconfig/appsignal.rb/config/appsignal.ymlici. (Ruby uniquement)log_dir_path- chemin dans lequel le fichier journal est créé.log_file_path- chemin dans lequel le fichier journal est créé. Est vide si aucun chemin viable n’a pu être trouvé.
- Informations d’installation (Ruby uniquement)
- Quelque chose a pu mal se passer pendant l’installation de l’agent
AppSignal. Cette section affiche les fichiers
install.logetmkmf.log(Makefile log).
- Quelque chose a pu mal se passer pendant l’installation de l’agent
AppSignal. Cette section affiche les fichiers
- La configuration
Environment/envest définie. - La configuration
nameest définie. - La configuration
push_api_keyest définie. - La configuration
activeest définie surtrue. - La clé Push API est validée. Une connexion internet est requise pour cela.
Configuration
La configuration est essentielle. Elle est importante, car sans elle, l’agent AppSignal ne saura pas quelle application il instrumente ni dans quel environnement. À l’aide des informations de diagnose, nous voyons si nous pouvons trouver un problème avec la configuration de l’agent. Les agents AppSignal disposent de plusieurs méthodes de configuration. Nous vous recommandons de lire le sujet de configuration pour commencer, en particulier la configuration minimale requise, l’ordre de chargement de la configuration et les pages des options de configuration si vous rencontrez des problèmes.- Vue d’ensemble de la configuration : Ruby / Elixir / Node.js / Python
- Configuration minimale requise : Ruby / Elixir / Node.js / Python
- Ordre de chargement de la configuration : Ruby / Elixir / Node.js / Python
- Options de configuration : Ruby / Elixir / Node.js / Python
Aucune donnée n’apparaît
Il peut y avoir de nombreuses raisons pour lesquelles une application n’est pas détectée par AppSignal. Ce n’est que lorsque les serveurs AppSignal commencent à recevoir des données d’une application qu’elle est créée dans l’interface utilisateur sur AppSignal.com ; si aucune donnée n’est reçue, aucune application n’est créée. Lorsqu’une intégration est cassée ou mal configurée, il peut être long de retracer le problème. Pour exclure l’agent AppSignal et son traitement, nous pouvons envoyer des « demo samples ».Journaux
Lorsqu’aucun problème n’est trouvé dans les informations de diagnostic, les journaux de l’agent sont la prochaine chose à examiner. Les agents AppSignal créent des fichiers journaux pour afficher des informations utiles et les problèmes rencontrés dans l’agent lui-même. Par défaut, les agents enregistrent les journaux de niveau « info » et supérieurs (warning & error). Pour enregistrer plus de données pertinentes pour le débogage, définissez l’optionlog_level (Ruby / Elixir / Python) / logLevel (Node.js) sur debug.
Contenu des journaux
Le fichier journal AppSignal contient des informations provenant de trois composants AppSignal différents. Il préfixera chaque entrée de journal avec un horodatage, le nom du composant, le PID du processus, l’indicateur de niveau de journal et le message de journal lui-même. Les composants d’agent disponibles sont :processImplémentation spécifique au langage (Ruby / Elixir).extensionExtension en langage C à l’implémentation du langage. S’exécute dans le même processus queprocess.agentAgent système AppSignal en Rust. Un processus séparé.
Décomposition des messages de journal
Décomposition des messages de journal du logger de fichier
Text
Décomposition des messages de journal STDOUT
Pour les loggers STDOUT, le gem Ruby AppSignal préfixe un préfixe « appsignal » reconnaissable au message afin que les messages AppSignal spécifiques puissent être filtrés avec grep dans la sortie de journal du processus parent.Text
Emplacement des journaux
Il existe deux méthodes pour sauvegarder les journaux de la bibliothèque AppSignal. En écrivant les journaux dans un fichier journal et en imprimant les journaux dans le STDOUT du processus. Voir la configurationlog
pour plus d’informations.
Les journaux écrits dans un fichier journal ne sont pas écrits dans les fichiers journaux de votre application, mais
ont leur propre fichier appsignal.log. Selon les autorisations d’un hôte, l’agent
écrira les journaux à un emplacement différent.
Le gem Ruby essaiera d’abord de créer un fichier journal dans le répertoire d’une application.
Pour les applications Ruby on Rails, il créera un fichier journal dans le répertoire log/
à la place. S’il n’arrive pas à créer un fichier journal, il se rabattra sur le
répertoire /tmp du système. C’est également là que sont enregistrés les autres fichiers de l’agent AppSignal.
Le paquet Elixir écrira les fichiers journaux dans le fichier journal /tmp/appsignal.log.
S’il échoue complètement à trouver un emplacement accessible en écriture pour sauvegarder ses journaux, il
les affichera dans le STDOUT du processus de l’application parent. Cela peut également
être configuré avec l’option :log.
L’agent système n’est actuellement pas capable de se connecter à STDOUT, il enregistrera donc toujours dans
le fichier appsignal.log même lorsque le journal est configuré sur STDOUT.
Pour qu’AppSignal vous indique où il écrira ses journaux, consultez la sortie de
la commande diagnose.
Rotation des journaux
AppSignal n’effectue pas de rotation des journaux pour ses fichiers journaux. Nous recommandons de configurer un outil système tel quelogrotate pour gérer la taille des fichiers et la rétention.
Journaux de l’agent autonome
Si vous utilisez l’agent autonome AppSignal, vous pouvez accéder aux journaux avec la commande suivante :Bash
sudo peut être facultative dans certains environnements tels que les conteneurs.)
Fichiers journaux sur Heroku
Sur la plateforme d’hébergement Heroku, la bibliothèque d’intégration écrira automatiquement dans STDOUT. Étant donné que l’agent ne peut pas écrire dans STDOUT, il continuera à écrire dans le fichierappsignal.log.
Sur Heroku, il n’est pas possible de voir le contenu du fichier journal avec heroku run bash puis de lire le fichier journal, en raison de la façon dont les Dynos Heroku sont conteneurisés.
Heroku fournit un module complémentaire appelé « Heroku Exec » pour permettre d’exécuter des commandes dans le même conteneur dyno que votre application. À l’aide de ce module complémentaire, nous pouvons lire le fichier journal sur les dynos de votre application.
L’agent est-il en cours d’exécution ?
Lorsqu’une application avec l’intégration AppSignal démarre, elle lance l’agent système AppSignal. Cet agent s’exécute en tant que processus séparé et communique avec l’application. Après avoir traité les données d’instrumentation, c’est cet agent qui envoie les données aux serveurs AppSignal, pas l’agent spécifique au langage. Lorsque l’agent système n’est pas en cours d’exécution, aucune donnée ne peut être traitée ou envoyée à AppSignal. Il est important de savoir si l’agent système est en cours d’exécution. Vous pouvez le trouver dans la liste des processus sous le nomappsignal-agent.
ps sur la ligne de commande de votre hôte pour vérifier si l’agent est
en cours d’exécution pendant que votre application exécute AppSignal.
Autres questions
De nombreux facteurs peuvent être en jeu lorsqu’un problème survient. Choses à vérifier quand AppSignal ne semble pas fonctionner ou qu’aucun journal n’est disponible.- Depuis quand le problème se produit-il ?
- L’agent a-t-il été mis à jour ?
- D’autres bibliothèques ont-elles été mises à jour ?
- Que disent les journaux de l’agent AppSignal avec l’option
log_leveldéfinie surdebug? - Le système d’exploitation est-il pris en charge ?
- L’« extension » s’est-elle installée et chargée correctement ? Les réponses devraient se trouver dans la sortie de « diagnose ».
- L’application s’exécute-t-elle à l’intérieur d’un système conteneurisé ?
- Les serveurs d’application sont-ils synchronisés à l’aide de NTP pour éviter la dérive d’horloge ?
- Votre problème est-il mentionné dans notre liste de problèmes connus ?