Où regarder
Ouvrez Journaux sur un projet. Deux vues; la vue, les filtres et l’erreur ouverte sont dans l’adresse, ce qui permet de coller un lien vers exactement ce que vous regardez.
- Requêtes — chaque requête servie par l’app pendant 7 jours : méthode, chemin, statut et durée. Les erreurs sont simplement les requêtes en échec : choisissez Erreurs (ou 5xx) pour ne voir que celles-là.
- Journaux de l’app — ce que l’app a affiché, avec recherche; une erreur garde toute sa trace.
Sur la vue d’ensemble du projet, la tuile Erreurs serveur ouvre les requêtes en échec de la période affichée, et un clic sur une barre du graphique Trafic et mémoire ouvre les requêtes de cette période.
Période et largeur des barres
Le graphique Trafic et mémoire de la vue d’ensemble et la page Journaux partagent la même période : la dernière heure, 6 heures, 24 heures, 7, 30 ou 90 jours (la page Journaux en conserve 7), ou Personnalisé, un Du et un Au exacts. Un clic sur une barre du graphique ouvre Journaux avec le Du et le Au de cette barre déjà remplis : la période affichée est toujours visible et modifiable.
Le graphique ne propose que les largeurs de barre qui donnent un graphique lisible pour la période : au moins 7 barres et au plus 400, donc un mois n’est jamais tracé minute par minute ni une heure en une seule barre. Chaque période s’ouvre sur la largeur qui donne environ 48 barres, et vous pouvez choisir toute autre largeur offerte. Les barres de 1, 5 et 15 minutes existent pour les périodes des 7 derniers jours; avant la première minute enregistrée, elles sont hachurées plutôt que montrées vides. Au-delà de 7 jours, les données sont stockées à l’heure : une fenêtre de quelques heures aussi ancienne est élargie à 7 heures, et la page le dit. Une barre de plus de 7 jours affiche toujours ses comptes mais n’a aucune requête derrière elle, donc elle n’ouvre pas le journal.
Comment les erreurs sont regroupées
Deux occurrences forment une seule erreur lorsqu’un même changement les corrigerait. Nous comparons le message dont les parties variables sont remplacées (identifiants, ports, horodatages, chemins de fichiers) ainsi que la ligne la plus interne de votre code dans la trace : un autre numéro de commande ou une ligne déplacée ne scinde pas une erreur en cent. Une réponse de statut 5xx est regroupée par statut, méthode et route : GET /orders/41 et GET /orders/42 ne forment qu’une erreur, 500 GET /orders/:id.
Nous reconnaissons les erreurs affichées par Node.js, Python, Java, Go, PHP, Ruby et Rust, ainsi que les journaux JSON structurés au niveau erreur (pino, bunyan, winston et semblables). Chaque groupe montre sa trace, les lignes journalisées juste avant et les événements du serveur à ce moment, comme un arrêt pour manque de mémoire.
Quel déploiement, quel commit
Chaque erreur est comptée par déploiement. En ouvrant une erreur, vous voyez le déploiement où elle est apparue, avec son message de commit, un lien vers le commit et vers ce qui a changé depuis le déploiement précédent. Si elle n’est pas revenue dans les déploiements qui suivent sa dernière occurrence, nous le disons : c’est généralement le correctif. Une erreur s’ouvre depuis le lien du courriel qui la concerne, ou par les outils MCP plus bas.
Régler, ignorer, réapparitions
Marquer comme réglée enregistre le déploiement en ligne. Si l’erreur se reproduit, elle se rouvre comme Réapparue et nous vous écrivons une seule fois. Ignorer retire l’erreur de la liste et fait taire ses alertes.
Courriels
Les courriels d’erreur sont désactivés tant que vous ne les demandez pas. Chaque app en reçoit un seul, une fois : quand nous captons sa première erreur, avec un lien vers celle-ci. Ce courriel est le seul, à moins que vous n’ouvriez l’erreur (ou la vue Requêtes) et activiez Me prévenir par courriel des nouvelles erreurs.
Une fois activés, nous écrivons au premier membre de l’organisation dans deux cas seulement : une nouvelle erreur dans la journée suivant le dernier déploiement, et une réapparition. Jamais à chaque occurrence, et au plus un courriel par heure et par app : un mauvais déploiement qui lance vingt erreurs différentes en envoie un tout de suite et les autres au rythme de l’heure. Désactivez-les quand vous voulez.
Ce qui est conservé, et combien de temps
- Erreurs — 90 jours : le groupe, ses comptes par heure et par déploiement, et quelques échantillons avec leur trace.
- Requêtes — 7 jours. Les erreurs et les requêtes lentes sont toujours conservées. Les requêtes réussies sont échantillonnées au-delà de 300 par minute; chaque ligne indique si elle l’a été, et les comptes de trafic de la vue d’ensemble restent exacts.
- Journaux de l’app — 7 jours. Une app qui affiche plus de 3 000 lignes par minute conserve ses erreurs et la plupart des autres lignes, et le journal indique combien de lignes ont été laissées de côté.
- Trafic et mémoire — à l’heure tant que votre compte existe, et à la minute pour les 7 derniers jours.
Le tout est stocké sur les serveurs de Canner, au Canada, et supprimé avec le projet.
Ce qui n’est jamais stocké
Les adresses IP des clients, les corps de requête et de réponse et les en-têtes ne sont pas stockés. Seule est retenue la mention qu’une requête vient d’un robot. Avant toute écriture, nous retirons les valeurs qui ressemblent à des identifiants (jetons Bearer, JWT, URL de base de données avec mot de passe, clés privées, paires password= et semblables), les valeurs des variables d’environnement sensibles de votre projet, les parties d’URL porteuses d’identifiants, les adresses courriel et les adresses IP publiques. Les adresses locales et privées restent, car ECONNREFUSED 127.0.0.1:5432 est tout le diagnostic. Les jetons dans les chemins d’URL (un lien de réinitialisation de mot de passe, par exemple) sont masqués.
Nous ne pouvons pas attraper un secret que votre app affiche sous une forme que personne ne reconnaîtrait. Gardez les secrets hors de vos journaux.
Expliquer cette erreur
Là où elle est activée, une erreur offre un bouton Expliquer cette erreur. Il interroge un modèle qui fonctionne sur le serveur même de Canner : vos journaux ne le quittent jamais. Vous obtenez un résumé en mots simples, une cause probable, des citations de vos journaux qui l’appuient et des étapes de correction. Nous vérifions chaque citation dans vos vrais journaux : une citation introuvable est signalée, et la confiance est abaissée quand les citations ne se retrouvent pas. C’est un point de départ, pas un verdict. Vingt explications par jour et par organisation.
Exporter
Les vues Requêtes et Journaux de l’app offrent chacune des liens CSV et Excel qui exportent ce que vous regardez, filtres compris, jusqu’à 20 000 lignes.
Pour les agents d’IA
Les mêmes données sont accessibles par le serveur MCP de Canner avec la portée deployments :
canner_list_errors— ce qui ne va pas, regroupé, avec l’origine de chaque erreur.canner_get_error— une erreur : trace, déploiement et commit, événements du serveur à proximité.canner_search_logs— la sortie de l’app ou les requêtes, autour d’un moment.canner_deploy_history— les déploiements avec leurs erreurs nouvelles, persistantes et disparues.canner_set_error_status— régler, ignorer ou rouvrir.canner_explain_error— l’explication produite sur le serveur.