Création de tableaux de bord
Vous concevez des tableaux de bord qui aident les humains à prendre des décisions rapidement. Les tableaux de bord sont des produits : l'audience, les questions et les actions sont plus importantes que le nombre de graphiques.
Philosophie
- Les décisions d'abord. Chaque panneau répond à une question qui mène à une action.
- Vue d'ensemble → zoom avant → preuves. Commencez par une vue large, affinez au clic/filtre, terminez par les journaux bruts.
- Les taux et percentiles plutôt que les moyennes. Les moyennes cachent les problèmes ; p95/p99 les exposent.
- La simplicité surpasse la densité. Une question par panneau. Pas de décoration inutile.
- Validez avec les données. Ne devinez jamais les champs—découvrez d'abord le schéma.
Points d'entrée
Choisissez votre point de départ :
| Point de départ | Flux |
|---|---|
| Description vague | Intake → vérifier le type de dataset → concevoir le blueprint (APL ou MPL) → requêtes par panneau → déployer |
| Template | Choisir template → personnaliser dataset/service/env → déployer |
| Tableau de bord Splunk | Extraire SPL → traduire via spl-to-apl → mapper aux types de graphiques → déployer |
| Exploration | Utiliser axiom-sre pour découvrir le schéma/signaux → transformer en panneaux |
Intake : Questions à poser d'abord
Avant de concevoir, clarifiez :
-
Audience et décision
- Triage oncall ? (rafraîchissement rapide, axé sur les erreurs)
- Santé de l'équipe ? (tendances quotidiennes, suivi SLO)
- Rapports exécutifs ? (résumés hebdomadaires, haut niveau)
-
Périmètre
- Service, environnement, région, cluster, endpoint ?
- Vue d'un seul service ou multi-services ?
-
Type de dataset (étape obligatoire en premier)
- Exécutez
scripts/metrics/datasets <deploy>pour identifier lekindde chaque dataset - Si
kindestotel:metrics:v1→ c'est un dataset de métriques. Suivez le chemin Metrics ci-dessous. - Sinon → c'est un dataset d'événements/journaux. Suivez le chemin APL ci-dessous.
⚠️ N'EXÉCUTEZ JAMAIS
getschemasur un dataset de métriques. Les requêtes APL sur les datasetsotel:metrics:v1retournent 0 lignes sans erreur—vous gaspillerez des appels en élargissant les plages de temps avant de réaliser que c'est la mauvaise méthode de découverte.Chemin APL (datasets d'événements/journaux) :
- Découvrez les champs avec
getschema:['dataset'] | where _time between (ago(1h) .. now()) | getschema - Continuez aux étapes 4–5 ci-dessous.
Chemin Metrics (datasets
otel:metrics:v1) :- Exécutez
scripts/metrics/metrics-spec <deploy> <dataset>— obligatoire avant de composer une requête MPL - Découvrez les métriques disponibles :
scripts/metrics/metrics-info <deploy> <dataset> metrics - Découvrez les tags :
scripts/metrics/metrics-info <deploy> <dataset> tags - Explorez les valeurs de tags :
scripts/metrics/metrics-info <deploy> <dataset> tags <tag> values - Si la découverte retourne des résultats vides, recommencez avec
--startdéfini à 7 jours dans le passé—les métriques éparses (capteurs, jobs batch, crons) peuvent ne pas avoir de données dans la fenêtre par défaut de 24h find-metrics <value>recherche les valeurs de tags, pas les noms de métriques—utilisez-le uniquement quand vous connaissez un nom d'entité spécifique (service, host, device) pour trouver quelles métriques y sont associées- Allez directement au Blueprint Metrics/MPL ci-dessous pour la conception des panneaux.
- Exécutez
-
Signaux dorés (chemin APL)
- Trafic : requêtes/sec, événements/min
- Erreurs : taux d'erreur, nombre 5xx
- Latence : p50, p95, p99 duration
- Saturation : CPU, mémoire, profondeur queue, connexions
-
Dimensions de zoom avant (chemin APL)
- Par quoi les utilisateurs filtrent/groupent-ils ? (service, route, status, pod, customer_id)
Blueprint du tableau de bord
Choisissez le blueprint qui correspond à votre type de dataset (identifié à l'étape 3 d'Intake).
Blueprint APL (datasets d'événements/journaux)
1. Vue d'ensemble (panneaux Statistic)
Des chiffres uniques qui répondent à « est-ce cassé maintenant ? »
- Taux d'erreur (dernières 5m)
- Latence p95 (dernières 5m)
- Taux de requête (dernières 5m)
- Alertes actives (si applicable)
2. Tendances (panneaux TimeSeries)
Des motifs temporels qui répondent à « qu'est-ce qui a changé ? »
- Trafic au fil du temps
- Taux d'erreur au fil du temps
- Percentiles de latence au fil du temps
- Empilés par statut/service pour comparaison
3. Ventilations (panneaux Table/Pie)
Une analyse Top-N qui répond à « où dois-je regarder ? »
- Top 10 routes défaillantes
- Top 10 messages d'erreur
- Pires pods par taux d'erreur
- Distribution des requêtes par statut
4. Preuves (LogStream + SmartFilter)
Des événements bruts qui répondent à « qu'est-ce qui s'est exactement passé ? »
- LogStream filtré aux erreurs
- SmartFilter pour service/env/route
- Champs clés projetés pour la lisibilité
Blueprint Metrics/MPL (datasets de métriques)
Prérequis : Vous DEVEZ avoir exécuté
scripts/metrics/metrics-specetscripts/metrics/metrics-infoavant de concevoir les panneaux. Ne devinez jamais la syntaxe MPL ou les noms de métriques/tags.
1. Vue d'ensemble (panneaux Statistic)
Valeurs actuelles des métriques clés—répondez à « quel est l'état en ce moment ? »
- Dernière valeur des métriques principales (p. ex., température actuelle, consommation électrique)
- Utilisez
group using avgougroup using lastselon le type de métrique (gauge vs counter)
2. Tendances (panneaux TimeSeries)
Tendances des métriques au fil du temps—répondez à « qu'est-ce qui a changé ? »
- Métriques principales au fil du temps, groupées par dimension clé
- Utilisez
align to <interval> using avg|sum|lastpour une segmentation temporelle correcte - Groupez uniquement par tags faible cardinalité (≤10 séries par graphique)
3. Ventilations (panneaux TimeSeries ou Table)
Détail par entité—répondez à « où dois-je regarder ? »
- Métriques ventilées par entité (room, host, pod, service)
- Filtrez par valeurs de tags pour garder le nombre de séries gérable
- Utilisez des panneaux séparés par dimension plutôt qu'un graphique surchargé
4. État de l'entité (panneaux TimeSeries ou Table)
Métriques booléennes/état—répondez à « qu'est-ce qui est activé/désactivé/actif ? »
- Utilisez
align to <interval> using lastpour les métriques d'état - Les métriques éparses peuvent nécessiter des intervalles d'alignement plus larges (1h+) pour afficher les données
Auto-normalisation de la mise en page
La console utilise react-grid-layout qui nécessite minH, minW, moved et static sur chaque entrée de mise en page. Les scripts dashboard-create et dashboard-update remplissent automatiquement ces champs s'ils sont omis, donc les entrées de mise en page n'ont besoin que de i, x, y, w, h.
Structure de graphique requise
Chaque graphique DOIT avoir un champ id unique. Chaque champ i de l'entrée de mise en page DOIT référencer un id de graphique. Des IDs manquants ou mal appariés corrompront le tableau de bord dans l'interface (état vide, incapacité à sauvegarder/restaurer).
{
"charts": [
{
"id": "error-rate",
"name": "Error Rate",
"type": "Statistic",
"query": { "apl": "..." }
}
],
"layout": [
{"i": "error-rate", "x": 0, "y": 0, "w": 3, "h": 2}
]
}
Utilisez des IDs en kebab-case descriptifs (p. ex. error-rate, p95-latency, traffic-rps). Les scripts dashboard-validate et deploy l'appliquent automatiquement.
Contrat de graphique Metrics/MPL
Les graphiques sauvegardés par métriques nécessitent à la fois query.apl (la chaîne du pipeline MPL) et query.metricsDataset (le nom du dataset). Le champ metricsDataset est ce qui indique au backend d'interpréter apl comme MPL plutôt que APL—l'omettre cause le dysfonctionnement du graphique même si la chaîne du pipeline est bien formée.
CRITIQUE : Exécutez
scripts/metrics/metrics-spec <deployment> <dataset>avant de composer votre première requête MPL dans une session. NE DEVINEZ JAMAIS la syntaxe MPL.Piège API : Définissez
query.metricsDatasetau nom du dataset (p. ex."otel-metrics"). L'API de création rejettequery.mplmême si les réponses GET pour les tableaux de bord de métriques existants peuvent l'inclure—mettez la chaîne MPL dansquery.aplà la place.
{
"type": "TimeSeries",
"query": {
"apl": "`otel-metrics`:`http.server.duration`\n| where `service.name` == \"api\"\n| align to 1m using avg\n| group by `service.name` using avg",
"metricsDataset": "otel-metrics"
}
}
Validez les requêtes avec scripts/metrics/metrics-query avant de les intégrer au JSON du tableau de bord.
Consultez reference/metrics-mpl.md pour le contrat complet et les scripts de découverte.
Types de graphiques
Note : Les requêtes du tableau de bord héritent le temps du sélecteur de l'interface—aucun filtre _time explicite n'est nécessaire.
Validation : TimeSeries, Statistic, Table, Pie, LogStream, Note, MonitorList sont complètement validés par dashboard-validate. Heatmap, ScatterPlot, SmartFilter fonctionnent mais peuvent déclencher des avertissements.
Statistic
Quand : KPI unique, valeur actuelle, comparaison de seuil.
['logs']
| where service == "api"
| summarize
total = count(),
errors = countif(status >= 500)
| extend error_rate = round(100.0 * errors / total, 2)
| project error_rate
Pièges : Ne pas utiliser pour une série temporelle ; vérifiez que la requête retourne une seule ligne.
TimeSeries
Quand : Tendances au fil du temps, comparaison avant/après, changements de taux.
// Métrique unique - utilisez bin_auto pour dimensionnement automatique
['logs']
| summarize ['req/min'] = count() by bin_auto(_time)
// Percentiles de latence - utilisez percentiles_array pour superposition correcte
['logs']
| summarize percentiles_array(duration_ms, 50, 95, 99) by bin_auto(_time)
Bonnes pratiques :
- Utilisez
bin_auto(_time)au lieu debin(_time, 1m)fixe—s'ajuste automatiquement à la fenêtre temporelle - Utilisez
percentiles_array()au lieu de plusieurs appelspercentile()—s'affiche comme un graphique - Trop de séries = illisible ; utilisez
top Nou filtrez
Table
Quand : Listes Top-N, ventilations détaillées, données exportables.
['logs']
| where status >= 500
| summarize errors = count() by route, error_message
| top 10 by errors
| project route, error_message, errors
Pièges :
- Utilisez toujours
top Npour éviter des résultats illimités - Utilisez
projectpour contrôler l'ordre et les noms des colonnes
Pie
Quand : Part du total pour dimensions faible cardinalité (≤6 tranches).
['logs']
| summarize count() by status_class = case(
status < 300, "2xx",
status < 400, "3xx",
status < 500, "4xx",
"5xx"
)
Pièges :
- Ne pas utiliser pour haute cardinalité (routes, IDs utilisateur)
- Préférez les tables pour >6 catégories
- Agrégez toujours pour réduire les tranches
LogStream
Quand : Inspection d'événements bruts, débogage, collecte de preuves.
['logs']
| where service == "api" and status >= 500
| project-keep _time, trace_id, route, status, error_message, duration_ms
| take 100
Pièges :
- Incluez toujours
take N(100-500 max) - Utilisez
project-keeppour afficher uniquement les champs pertinents - Filtrez agressivement—les journaux bruts sont coûteux
Heatmap
Quand : Visualisation de distribution, motifs de latence, analyse de densité.
['logs']
| summarize histogram(duration_ms, 15) by bin_auto(_time)
Meilleur pour : Distributions de latence, motifs de temps de réponse, identification de valeurs aberrantes.
Scatter Plot
Quand : Corrélation entre deux métriques, identification de motifs.
['logs']
| summarize avg(duration_ms), avg(resp_size_bytes) by route
Meilleur pour : Corrélation taille de réponse vs latence, motifs d'utilisation des ressources.
SmartFilter (Barre de filtre)
Quand : Filtrage interactif pour l'ensemble du tableau de bord.
SmartFilter est un type de graphique qui crée des filtres dropdown/recherche. Nécessite :
- Un graphique
SmartFilteravec définitions de filtres declare query_parametersdans chaque requête de panneau
Types de filtres :
selectType: "apl"— Dropdown dynamique à partir de requête APLselectType: "list"— Dropdown statique avec options prédéfiniestype: "search"— Entrée texte libre
Motif de requête de panneau :
declare query_parameters (country_filter:string = "");
['logs'] | where isempty(country_filter) or ['geo.country'] == country_filter
Consultez reference/smartfilter.md pour la structure JSON complète et des exemples de filtres en cascade.
Monitor List
Quand : Afficher l'état du moniteur sur les tableaux de bord opérationnels.
Aucun APL nécessaire—sélectionnez les moniteurs depuis l'interface. Affiche :
- Statut du moniteur (normal/déclenché/arrêt)
- Historique d'exécution (carrés vert/rouge)
- Dataset, type, notifiants
Note
Quand : Contexte, instructions, en-têtes de section.
Utilisez GitHub Flavored Markdown pour :
- Objectif du tableau de bord et audience
- Liens runbook
- Séparateurs de section
- Instructions oncall
Configuration des graphiques
Les graphiques supportent des options de configuration JSON au-delà de la requête. Consultez reference/chart-config.md pour la liste complète.
Référence rapide :
| Type de graphique | Options clés |
|---|---|
| Statistic | colorScheme, customUnits, unit, showChart (sparkline), errorThreshold/warningThreshold |
| TimeSeries | aggChartOpts: variant (line/area/bars), scaleDistr (linear/log), displayNull |
| LogStream/Table | tableSettings: columns, fontSize, highlightSeverity, wrapLines |
| Pie | hideHeader |
| Note | text (markdown), variant |
Options communes (tous les graphiques) :
overrideDashboardTimeRange: booleanoverrideDashboardCompareAgainst: booleanhideHeader: boolean
Motifs APL
Filtrage temporel dans les tableaux de bord vs requêtes ad-hoc
Les requêtes de panneau du tableau de bord n'ont PAS besoin de filtres de temps explicites. Le sélecteur de temps de l'interface du tableau de bord délimite automatiquement toutes les requêtes à la fenêtre temporelle sélectionnée.
// REQUÊTE TABLEAU DE BORD — aucun filtre de temps nécessaire
['logs']
| where service == "api"
| summarize count() by bin_auto(_time)
Les requêtes ad-hoc (onglet Axiom Query, exploration axiom-sre) DOIVENT avoir des filtres de temps explicites :
// REQUÊTE AD-HOC — incluez toujours un filtre de temps
['logs']
| where _time between (ago(1h) .. now())
| where service == "api"
| summarize count() by bin_auto(_time)
Sélection de la taille de bin
Préférez bin_auto(_time)—elle s'ajuste automatiquement à la fenêtre temporelle du tableau de bord.
Tailles de bin manuelles (uniquement quand auto ne convient pas à vos besoins) :
| Fenêtre temporelle | Taille bin |
|---|---|
| 15m | 10s–30s |
| 1h | 1m |
| 6h | 5m |
| 24h | 15m–1h |
| 7d | 1h–6h |
Garde-fous de cardinalité
Prévenez l'explosion de requête :
// BON : borné
| summarize count() by route | top 10 by count_
// MAUVAIS : groupement haute cardinalité non borné
| summarize count() by user_id // millions de lignes
Échappement de champ
Les champs avec points ont besoin de notation entre crochets :
| where ['kubernetes.pod.name'] == "frontend"
Les champs avec des points DANS le nom (pas la hiérarchie) ont besoin d'échappement :
| where ['kubernetes.labels.app\\.kubernetes\\.io/name'] == "frontend"
Requêtes de signaux dorés
Trafic :
| summarize requests = count() by bin_auto(_time)
Erreurs (en tant que taux %) :
| summarize total = count(), errors = countif(status >= 500) by bin_auto(_time)
| extend error_rate = iff(total > 0, round(100.0 * errors / total, 2), 0.0)
| project _time, error_rate
Latence (utilisez percentiles_array pour la superposition correcte du graphique) :
| summarize percentiles_array(duration_ms, 50, 95, 99) by bin_auto(_time)
Composition de mise en page
Principes de grille
- Largeur du tableau de bord = 12 unités
- Panneau typique : w=3 (quart), w=4 (tiers), w=6 (moitié), w=12 (plein)
- Ligne de stats : 4 panneaux × w=3, h=2
- Ligne TimeSeries : 2 panneaux × w=6, h=4
- Tables : w=6 ou w=12, h=4–6
- LogStream : w=12, h=6–8
Motif de mise en page de section
Row 0-1: [Stat w=3] [Stat w=3] [Stat w=3] [Stat w=3]
Row 2-5: [TimeSeries w=6, h=4] [TimeSeries w=6, h=4]
Row 6-9: [Table w=6, h=4] [Pie w=6, h=4]
Row 10+: [LogStream w=12, h=6]
Conventions de nommage
- Utilisez des titres en style question : « Error rate by route » plutôt que « Errors »
- Préfixez avec contexte si multi-service : « [API] Error rate »
- Incluez les unités : « Latency (ms) », « Traffic (req/s) »
Paramètres du tableau de bord
Taux de rafraîchissement
Le tableau de bord se rafraîchit automatiquement à l'intervalle configuré. Options : 15s, 30s, 1m, 5m, etc.
⚠️ Avertissement sur le coût des requêtes : Rafraîchissement court (15s) + plage temporelle longue (90d) = requêtes coûteuses s'exécutant constamment.
Recommandations : | Cas d'usage | Taux de rafraîchissement | |------------|----------------------| | Oncall/temps réel | 15s–30s | | Santé équipe | 1m–5m | | Executive/hebdomadaire | 5m–15m |
Partage
Tous les tableaux de bord créés via les tokens API sont partagés avec tout le monde dans l'organisation (owner: "X-AXIOM-EVERYONE"). Les tableaux de bord privés ne sont pas supportés avec les tokens API.
La visibilité des données est toujours régie par les permissions du dataset—les utilisateurs ne voient que les données des datasets auxquels ils peuvent accéder.
Paramètres d'URL de plage temporelle
?t_qr=24h (plage rapide), ?t_ts=...&t_te=... (personnalisée), ?t_against=-1d (comparaison)
Configuration
Exécutez scripts/setup pour vérifier les prérequis (curl, jq, ~/.axiom.toml).
Configuration dans ~/.axiom.toml (partagée avec axiom-sre) :
[deployments.prod]
url = "https://api.axiom.co"
token = "xaat-your-token"
org_id = "your-org-id"
Déploiement
Scripts
| Script | Utilisation |
|---|---|
scripts/dashboard-list <deploy> |
Lister tous les tableaux de bord |
scripts/dashboard-get <deploy> <id> |
Récupérer le JSON du tableau de bord |
scripts/dashboard-validate <file> |
Valider la structure JSON |
scripts/dashboard-create <deploy> <file> |
Créer un tableau de bord |
scripts/dashboard-update <deploy> <id> <file> |
Mettre à jour (nécessite la version) |
scripts/dashboard-copy <deploy> <id> |
Cloner un tableau de bord |
scripts/dashboard-link <deploy> <id> |
Obtenir une URL partageable |
scripts/dashboard-delete <deploy> <id> |
Supprimer (avec confirmation) |
scripts/axiom-api <deploy> <method> <path> |
API tableau de bord/app uniquement (réécrit vers app.*). Pour les endpoints de données/métriques, utilisez scripts/metrics/axiom-api |
scripts/metrics/axiom-api <deploy> <method> <path> |
API données/métriques (supporte AXIOM_URL_OVERRIDE pour le routage edge) |
scripts/metrics/datasets <deploy> |
Lister les datasets avec kind et déploiement edge |
scripts/metrics/metrics-spec <deploy> <dataset> |
Récupérer la spécification de requête MPL |
scripts/metrics/metrics-info <deploy> <dataset> ... |
Découvrir les métriques, tags et valeurs |
scripts/metrics/metrics-query <deploy> <mpl> <start> <end> |
Exécuter une requête de métriques |
⚠️ Deux scripts
axiom-apiexistent avec des comportements différents.scripts/axiom-apiréécrit les URLs pour l'API app du tableau de bord (app.*).scripts/metrics/axiom-apiutilise les URLs brutes et supporte le routage de déploiement edge. Utiliser le mauvais produira des erreurs 404.
Flux de travail
⚠️ CRITIQUE : Validez toujours les requêtes AVANT de déployer.
Flux de travail APL :
- Concevoir le tableau de bord (sections + panneaux)
- Écrire APL pour chaque panneau
- Créer le JSON (à partir d'un template ou manuellement)
- Valider les requêtes en utilisant axiom-sre avec filtre de temps explicite
dashboard-validatepour vérifier la structuredashboard-createoudashboard-updatepour déployerdashboard-linkpour obtenir l'URL—NE CONSTRUISEZ JAMAIS les URLs Axiom manuellement (les IDs org et les URLs de base varient par déploiement)- Partager le lien avec l'utilisateur
Flux de travail Metrics/MPL :
- Exécutez
scripts/metrics/metrics-specpour apprendre la syntaxe MPL - Exécutez
scripts/metrics/metrics-infopour découvrir les métriques et tags - Concevoir le tableau de bord en utilisant le Blueprint Metrics/MPL
- Écrire MPL pour chaque panneau
- Valider les requêtes avec
scripts/metrics/metrics-queryen utilisant une plage temporelle explicite - Créer le JSON : mettre la chaîne MPL complète dans
query.aplET définirquery.metricsDatasetau nom du dataset (obligatoire—indique que le graphique est MPL). Ne définissez pasquery.mpl(rejeté par l'API de création). dashboard-validatepour vérifier la structuredashboard-createoudashboard-updatepour déployerdashboard-linkpour obtenir l'URL- Partager le lien avec l'utilisateur
Intégration de skills frères
spl-to-apl : Traduire Splunk SPL → APL. Mapper timechart → TimeSeries, stats → Statistic/Table. Consultez reference/splunk-migration.md.
axiom-sre : Découvrir le schéma avec getschema, explorer les baselines, identifier les dimensions, puis transformer en panneaux.
query-metrics : Découvrir les datasets de métriques, les noms de métriques, les tags et valeurs de tags. Les scripts de découverte de métriques sont également vendus localement dans scripts/metrics/.
Templates
Templates pré-construits dans reference/templates/ :
| Template | Cas d'usage |
|---|---|
service-overview.json |
Tableau de bord oncall d'un seul service avec Heatmap |
service-overview-with-filters.json |
Idem avec SmartFilter (dropdowns route/status) |
api-health.json |
API HTTP avec trafic/erreurs/latence |
blank.json |
Squelette minimal |
Placeholders : {{service}}, {{dataset}}
Utilisation :
scripts/dashboard-from-template service-overview "my-service" "my-dataset" ./dashboard.json
scripts/dashboard-validate ./dashboard.json
scripts/dashboard-create prod ./dashboard.json
⚠️ Les templates supposent des noms de champs (service, status, route, duration_ms). Découvrez d'abord votre schéma et utilisez sed pour corriger les désaccords.
Pièges courants
| Problème | Cause | Solution |
|---|---|---|
| Erreurs « unable to find dataset » | Le nom du dataset n'existe pas dans votre org | Vérifiez les datasets disponibles dans l'interface Axiom |
| « creating private dashboards » 403 | Les tokens API ne peuvent créer que des tableaux de bord partagés | Utilisez owner: "X-AXIOM-EVERYONE" (la valeur par défaut) |
| Tous les panneaux affichent des erreurs | Les noms de champs ne correspondent pas à votre schéma | Découvrez d'abord le schéma, utilisez sed pour corriger les noms de champs |
| Le tableau de bord ne montre pas de données | Le filtre de service est trop restrictif | Supprimez ou ajustez les filtres where service == 'x' |
| Les requêtes expirent | Filtre de temps manquant ou trop large | Le tableau de bord hérite du temps du sélecteur ; les requêtes ad-hoc ont besoin d'un filtre de temps explicite |
| Mauvaise org dans l'URL du tableau de bord | URL construite manuellement | Utilisez toujours dashboard-link <deploy> <id>—ne devinez jamais les IDs org ou les URLs de base |
getschema retourne 0 lignes |
Dataset est otel:metrics:v1, pas des événements |
Exécutez scripts/metrics/datasets <deploy> pour vérifier le kind ; utilisez scripts/metrics/metrics-info pour la découverte de métriques |
| La découverte de métriques retourne vide | Métriques éparses (capteurs, batch, cron) en dehors de la fenêtre par défaut de 24h | Recommencez avec --start défini à 7 jours dans le passé ; certaines métriques ne rapportent que par intermittence |
| 404 des appels API de métriques | Utilisé scripts/axiom-api (tableau de bord) au lieu de scripts/metrics/axiom-api (données) |
Utilisez scripts/metrics/axiom-api pour tous les chemins /v1/query/, /v1/datasets |
find-metrics retourne des résultats inattendus |
Il recherche les valeurs de tags, pas les noms de métriques | Utilisez metrics-info <deploy> <dataset> metrics pour lister les noms de métriques ; find-metrics trouve les métriques associées à une valeur de tag connue |
| Le graphique de métriques s'affiche vide ou avec mauvaises valeurs | query.metricsDataset manquant—le backend traite apl comme APL, pas MPL |
Définissez query.metricsDataset au nom du dataset aux côtés de query.apl |
query.mpl rejeté à la création |
GET peut retourner query.mpl pour les graphiques de métriques existants, mais la création attend query.apl |
Déplacez/copiez la chaîne MPL dans query.apl avant le déploiement |
decimals rejeté à la création |
L'API de création n'accepte pas decimals au niveau du graphique même si GET peut le retourner |
Omettez decimals des payloads de création |
Référence
reference/chart-config.md— Toutes les options de configuration des graphiques (JSON)reference/metrics-mpl.md— Contrat des graphiques Metrics/MPL et scripts de découvertereference/smartfilter.md— Configuration complète de SmartFilter/FilterBarreference/chart-cookbook.md— Motifs APL par type de graphiquereference/layout-recipes.md— Mises en page de grille et blueprints de sectionsreference/splunk-migration.md— Mappage panneau Splunk → Axiomreference/design-playbook.md— Principes de conception centrés sur les décisionsreference/templates/— Fichiers JSON de tableau de bord prêts à l'emploi
Pour la syntaxe APL : https://axiom.co/docs/apl/introduction