Aller au contenu

Dashboards

AKKO embarque une couche de dashboarding first-party pour que chaque métrique émise par la plateforme ait une visualisation curée out-of-the-box. Le déploiement vit dans le sub-chart akko-observability et tourne dans le même namespace akko que le reste de la plateforme.

La couche est exposée sur https://metrics.akko-ai.com (ou la valeur de global.functionalAliases.metrics dans vos overrides) — gardée par oauth2-proxy + SSO Keycloak.

L'iframe Overview du cockpit embarque le dashboard cluster-overview directement depuis cet endpoint, donc le chart bootstrap un projet + une datasource + des dashboards par défaut à chaque helm upgrade.


Ce qui est livré par défaut

Le Job post-install charge tous les fichiers JSON du dossier helm/akko/charts/akko-observability/dashboards/*.json dans le projet akko. Douze dashboards :

Nom Histoire Ce qu'il montre
cluster-overview Santé plateforme (Overview cockpit) Pods prêts, ingress 2xx, restarts, mémoire nœud
aden-slo Service IA ADEN Latence query p50/p95, taux de succès, tokens LLM
storage-layer Stockage objets Stats volume server
trino Vaisseau-amiral fédération Queries actives, échecs/min, latence p50/p95, CPU/mem
audit-trail DORA / NIS2 / RGPD Décisions OPA, queries Trino par user, activité de login, ADEN
litellm Gateway IA Requests/sec, tokens/5min, erreurs/min, latence p95, modèles
pipelines Orchestration Statut runs, durée tâches p95, heartbeat scheduler, top pipelines en échec
platform-slo Résumé top-level Pods prêts, ingress 2xx, 5xx par service, latence p95 par service
trino-slo SLO fédération Succès, queries en queue, p99, marge mémoire, queries par catalogue
mlflow Suivi ML Runs/h, modèles enregistrés, versions, taux HTTP tracking, CPU/mem pod
jupyterhub Pods IDE Users actifs, notebooks en route, spawn p95, mémoire par pod
trino-ai-plugin Internes plugin Requests/erreurs HTTP IA, cache hit rate, circuit breaker, latence par fonction

Chaque panel retombe sur vector(0) quand sa métrique sous-jacente est absente — un déploiement inactif affiche une ligne de base propre plutôt que "No data".


Ajouter votre propre dashboard

Posez un fichier JSON à côté des autres. Le Job de bootstrap le ramassera automatiquement au prochain helm upgrade.

{
  "kind": "Dashboard",
  "metadata": { "name": "mon-equipe", "project": "akko" },
  "spec": {
    "display": { "name": "Mon équipe — KPIs" },
    "duration": "1h",
    "refreshInterval": "30s",
    "panels": {
      "rps": {
        "kind": "Panel",
        "spec": {
          "display": { "name": "Requêtes / sec" },
          "plugin": { "kind": "TimeSeriesChart", "spec": {} },
          "queries": [{
            "kind": "TimeSeriesQuery",
            "spec": { "plugin": { "kind": "PrometheusTimeSeriesQuery", "spec": {
              "datasource": { "kind": "PrometheusDatasource", "name": "prometheus" },
              "query": "sum(rate(http_requests_total{namespace=\"mon-equipe\"}[5m]))"
            } } }
          }]
        }
      }
    },
    "layouts": [{ "kind": "Grid", "spec": { "items": [
      { "x": 0, "y": 0, "width": 24, "height": 8, "content": { "$ref": "#/spec/panels/rps" } }
    ] } }]
  }
}

La datasource prometheus par défaut est déjà câblée (mode HTTPProxy), donc tout nouveau dashboard peut simplement référencer {"name": "prometheus", "kind": "PrometheusDatasource"}.


Smoke test

Pour vérifier que le bootstrap a réussi sans ouvrir un navigateur :

kubectl -n akko exec deploy/akko-akko-cockpit -- \
  curl -s http://akko-dashboards:8080/api/v1/projects/akko/dashboards \
  | jq -r '.[].metadata.name' | sort

Sortie attendue (un nom par ligne, ordre indifférent) :

aden-slo
audit-trail
cluster-overview
jupyterhub
litellm
mlflow
pipelines
platform-slo
storage-layer
trino
trino-ai-plugin
trino-slo

Si le compte est inférieur à 12, les logs du Job de bootstrap (kubectl -n akko logs job/akko-dashboards-bootstrap) montrent quel fichier a échoué au POST.


Pourquoi la couche est swappable

La plateforme ne dépend pas d'un engine de dashboarding spécifique. Le seul contrat est :

  • L'engine parle PromQL nativement.
  • Il expose une API REST pour poster un JSON de dashboard.
  • Il supporte une iframe publique derrière oauth2-proxy.

Ce contrat est satisfait par plusieurs projets de dashboarding Apache 2.0 / MIT, donc l'engine peut être remplacé sans réécrire aucun JSON de dashboard ni déplacer aucune métrique. Les 12 dashboards ci-dessus sont le contrat sur lequel la plateforme s'engage ; le binaire qui les rend est un détail d'implémentation.


Liens

  • Cockpit — l'onglet Overview embarque cluster-overview
  • Stack monitoring — backend de métriques compatible Prometheus