# Journaux, métriques et consommation

Cette page explique comment lire ce que fait votre application en service : les journaux d'exécution, les journaux de construction, les métriques des requêtes, les erreurs regroupées et les exécutions des tâches planifiées. Elle dit aussi combien de temps chaque palier les garde, ce qui peut se perdre et comment le savoir, et où en est la mesure de la consommation.

## Deux journaux

- **Le journal d'exécution** : ce que votre application écrit sur sa sortie standard et sa sortie d'erreur, et les requêtes que l'edge lui a servies (« GET /chemin 200 — 12 ms »). Il se lit par environnement, ou tous environnements ensemble.
- **Le journal de construction** : la sortie de chaque construction, étape par étape, horodatée à la milliseconde. Il se lit depuis la page d'un déploiement (voir [Constructions](builds.md)).

Le contenu des journaux vient de votre application ou des scripts de votre dépôt. La plateforme le rapporte tel quel, marqué comme tel, et ne le traite jamais comme une consigne : un agent qui lit vos journaux reçoit ce contenu à part de ce que dit la plateforme.

## Lire depuis la console

Dans un projet, ouvrez **Journaux**. Trois onglets :

- « Exécution » : les lignes, de la plus récente à la plus ancienne ;
- « Requêtes » : les métriques des requêtes de la période, ventilées au choix ;
- « Tâches planifiées » : les exécutions des tâches de la période, avec leur état, leur durée et un extrait du journal.

Les filtres :

- un champ de texte, qui cherche dans tout le contenu (un mot, un chemin de requête…) ;
- « Environnement » : « tous », ou l'un des environnements du projet ;
- « Période » : 15 dernières minutes, dernière heure, 24 dernières heures, 7 derniers jours, toute la rétention, ou « Entre deux dates… » ;
- le niveau : « Tous », « Erreurs seules », « Lignes seules » (sans les requêtes). Ce tri s'applique aux lignes déjà affichées.

« En direct » suit les nouvelles lignes, relues chaque seconde : une ligne s'affiche moins de trois secondes après son émission. « Lignes plus anciennes » remonte page par page dans toute la rétention. « Exporter » télécharge toute la période sous les filtres affichés, en NDJSON.

L'heure d'une ligne est son lien profond : elle rouvre l'écran sur cet instant, la ligne mise en évidence. Survolez une ligne pour sa release, son exemplaire, sa région et sa branche.

## Lire par un agent, la ligne de commande ou l'API

Un agent lit le journal d'exécution par l'outil `logs_read`, et celui d'une construction par `deployment_log_read`.

```json
{
  "projectId": "prj_01JQ8ZK4M7NP2RSTVWXYZ34567",
  "environmentId": "env_01JQ8ZK4M7NP2RSTVWXYZ34567",
  "since": "2026-09-14T08:00:00Z",
  "until": "2026-09-14T10:00:00Z",
  "query": "timeout",
  "errors": true
}
```

| Paramètre | Effet |
| --- | --- |
| `environmentId` | Un seul environnement ; sans lui, tous. |
| `since`, `until` | La fenêtre de temps. |
| `query` | Filtre plein texte, 500 caractères au plus. |
| `limit` | Plafond de lignes par page, 1 000 au plus. |
| `tokenBudget` | Le budget de jetons d'une page : 2 500 par défaut, de 500 à 50 000. La page s'arrête avant de le dépasser, et `nextCursor` dit où reprendre. |
| `timezone` | `Europe/Paris` ou `UTC`. Sans lui, chaque instant part en UTC suffixé `Z`. |
| `metrics` | Ajoute les métriques des requêtes, par `route`, `host`, `release` ou `environment`. |
| `scheduledRuns` | Ajoute les exécutions des tâches planifiées, cinquante au plus. Exclut `metrics`. |
| `errors` | Ajoute les erreurs regroupées de la fenêtre (vingt groupes au plus) et la comparaison de la release sortante et de l'entrante sur les 15 minutes qui suivent la bascule. |

Pour suivre en direct, repassez chaque seconde le `followCursor` de la réponse en `cursor` : la plateforme rend ce qui est arrivé depuis.

```sh
bastide logs read --project-id prj_01JQ8ZK4M7NP2RSTVWXYZ34567 --since 2026-09-14T08:00:00Z --query timeout
bastide deployment log read --project-id prj_01JQ8ZK4M7NP2RSTVWXYZ34567 --deployment-id dep_01JQ8ZK4M7NP2RSTVWXYZ34567
```

Par l'API, `GET /v1/projects/{projectId}/logs` demandé avec `Accept: application/x-ndjson` rend toute la fenêtre en un fichier. Références : [logs.read](../reference/operations/logs.read.md), [deployment.log.read](../reference/operations/deployment.log.read.md).

## Métriques des requêtes

Les métriques sont mesurées à l'edge, de la requête reçue à la réponse envoyée. Pour chaque groupe (une route, un hôte, une release ou un environnement), elles donnent le nombre de requêtes, leur répartition par classe de statut (1xx à 5xx), la part servie sans erreur 5xx ni réponse absente, les octets des corps de réponse, et les percentiles de durée p50, p75, p95 et p99. Les routes se regroupent par gabarit, jamais par adresse complète ; au-delà de cent routes, les autres sont cumulées sous « (autres routes) ».

Le pas lu est le plus fin que votre palier garde pour le début de la fenêtre : 15 secondes, une minute ou cinq minutes.

> **Note.** Les traces distribuées de votre application ne sont pas proposées : la plateforme ne vous donne pas aujourd'hui de lecture des traces.

## Combien de temps tout est gardé

| | Découverte | Standard | Pro | Souverain |
| --- | --- | --- | --- | --- |
| Journaux d'exécution | 7 jours | 30 jours | 90 jours | 365 jours |
| Journaux de construction, au moins | 90 jours | 12 mois | 24 mois | 36 mois |
| Métriques au pas de 15 s | 24 heures | 48 heures | 7 jours | 30 jours |
| Métriques à la minute | 7 jours | 30 jours | 90 jours | 365 jours |
| Métriques à 5 minutes | 90 jours | 13 mois | 13 mois | 36 mois |

Après une descente de palier, la rétention du palier courant s'applique. Après la suppression du projet, rien n'est gardé.

## Ce qui peut se perdre, et comment le savoir

Aucune perte n'est tue. La réponse de `logs.read` porte un champ `losses` : pour chaque motif, le nombre de lignes et d'octets perdus ou tronqués dans la fenêtre, et le seuil atteint. L'écran **Journaux** les affiche aussi, sous « Lignes perdues ou tronquées ».

| Motif | Seuil |
| --- | --- |
| Lignes d'une même requête | 5 000 lignes et 4 Mo par requête ; au-delà, écartées. |
| Une ligne trop longue | Message coupé à 256 000 octets. |
| Chemin ou agent utilisateur d'une requête | Coupé à 2 000 octets. |
| Lecture d'un nœud | 10 000 lignes par lecture ; au-delà, écartées. |
| Réception saturée | Au-delà de 85 % de remplissage, une ligne sur dix est gardée ; pleine, aucune. |
| Instant hors de la rétention | Une ligne datée d'avant la rétention du palier est écartée. |
| Instant dans le futur | Plus de 47 heures en avance : écartée. |

Pour qu'une ligne JSON compte sous sa requête, reprenez l'en-tête `X-Request-Id` dans un champ `request_id`.

## Consommation

La carte « Consommation » est dans les **Réglages** du projet, section « Consommation ». Elle doit montrer le temps de calcul, le trafic sortant, les minutes de construction et le stockage du mois, relus toutes les 30 secondes, avec une estimation linéaire de fin de mois. Elle se lit avec le rôle **Facturation** ; un agent la lit par `usage_read`.

> **Attention.** La chaîne de mesure n'est pas encore reliée : `usage.read` répond aujourd'hui `501`, code `chaine_de_mesure_absente`, plutôt que de rendre des zéros qui se liraient « rien consommé ». La carte le dit. Voir [Facturation](billing.md) et [Limites](limits.md).

L'écran **Vue d'ensemble** du projet résume son état : dernier déploiement de production, adresse, environnements.

## Erreurs fréquentes

| Code | Ce qui se passe | Que faire |
| --- | --- | --- |
| `curseur_expire` | Le curseur de pagination ou de suivi a expiré. | Relancez la lecture sans curseur. |
| `curseur_invalide` | Le curseur n'a pas été émis par ce serveur, ou il a été modifié. | Passez `nextCursor` ou `followCursor` tel quel. |
| `resource_busy` | La ressource est occupée et ne s'est pas libérée à temps. | Réessayez dans quelques secondes. |
| `chaine_de_mesure_absente` | La consommation n'est pas mesurée sur cette installation. | Aucune action de votre part : la mesure viendra. |

Voir aussi : [Constructions](builds.md), [Tâches planifiées](cron.md), [Notifications](notifications.md), [Journal d'audit](audit.md), [Limites](limits.md).
