Aller au contenu

Stack de supervision

Métriques, journaux, tableaux de bord et alertes.

URL Dashboards https://metrics.akko.local
URL Prometheus https://prometheus.akko.local
Authentification Keycloak SSO (Dashboards)
Sous-charts Helm monitoring (kube-prometheus-stack), loki (logs layer Stack)

Aperçu

AKKO inclut une stack d'observabilité complète qui fournit la collecte de métriques, l'agrégation de journaux, la visualisation et l'alerte. Les cinq services de supervision démarrent avec le profil principal -- aucun drapeau supplémentaire n'est nécessaire.

                    grafana.akko.local
                          |
                     Traefik (TLS)
                          |
                    Dashboards (:3000)
                   /       |       \
          Prometheus    logs layer    Alertmanager
           (:9090)    (:3100)    (:9093)
              |          |
         cibles de       log shipper
         collecte        (:9080)
              |          |
      +-------+---+   Journaux des
      |       |   |   conteneurs
    object storage  JHub  ...   Docker

Composants

Prometheus

Moteur de collecte de métriques. Collecte les cibles toutes les 15 secondes et évalue les règles d'alerte toutes les 15 secondes.

Paramètre Valeur
URL https://prometheus.akko.local
Port interne 9090
Fichier de configuration monitoring/prometheus/prometheus.yml
Règles d'alerte monitoring/prometheus/rules/akko-alerts.yml
Intervalle de collecte 15s

Cibles de collecte actives :

Job Cible Chemin des métriques
prometheus localhost:9090 /metrics
alertmanager akko-alertmanager:9093 /metrics
minio akko-minio:9000 /minio/v2/metrics/cluster
jupyterhub akko-jupyterhub:8000 /hub/metrics

Métriques Trino et Airflow

Les cibles de collecte Trino et Airflow sont actuellement désactivées car leurs points d'accès de santé renvoient du JSON, pas du format Prometheus. Pour les activer :

  • Trino : Déployez JMX Exporter comme agent Java dans l'image Trino (port 9483)
  • Airflow : Déployez un sidecar statsd_exporter ou installez apache-airflow-providers-statsd

Dashboards

Plateforme de visualisation et de tableaux de bord. Pré-configurée avec trois sources de données et quatre tableaux de bord.

Paramètre Valeur
URL https://metrics.akko.local
Port interne 3000
Authentification Keycloak SSO
Configuration des sources de données monitoring/grafana/provisioning/datasources/datasource.yml
Configuration des tableaux de bord monitoring/grafana/provisioning/dashboards/dashboards.yml

Sources de données pré-configurées :

Source de données Type URL Par défaut
Prometheus prometheus http://akko-prometheus-server:9090 Oui
logs layer loki http://akko-loki:3100 Non
Alertmanager alertmanager http://akko-alertmanager:9093 Non

Tableaux de bord pré-construits :

Tableau de bord Fichier Description
AKKO Overview akko-overview.json Santé de la plateforme et utilisation des ressources
AKKO object storage akko-minio.json Métriques de stockage object storage (objets, bande passante)
AKKO Trino akko-trino.json Métriques de requêtes Trino (nécessite JMX Exporter)
AKKO JupyterHub akko-jupyterhub.json Métriques utilisateurs et spawner JupyterHub

logs layer

Moteur d'agrégation de journaux. Reçoit les journaux de log shipper et les rend interrogeables via Dashboards en utilisant LogQL.

Paramètre Valeur
Port interne 3100
Fichier de configuration monitoring/loki/loki-config.yml
Lignes max par requête 1000

log shipper

Agent de collecte de journaux. Collecte les journaux des conteneurs Docker et les transmet à logs layer avec des labels pour le nom du service, l'ID du conteneur et d'autres métadonnées.

Paramètre Valeur
Port interne 9080
Fichier de configuration monitoring/promtail/promtail-config.yml
Source Journaux des conteneurs Docker

Alertmanager

Moteur de routage et de notification d'alertes. Reçoit les alertes de Prometheus et les route en fonction de la sévérité.

Paramètre Valeur
Port interne 9093
Fichier de configuration monitoring/alertmanager/alertmanager.yml
Récepteur par défaut Journalisation uniquement (stdout)

Règles d'alerte

AKKO est livré avec des règles d'alerte pré-configurées dans monitoring/prometheus/rules/akko-alerts.yml :

Alerte Sévérité Condition Durée
ServiceDown Critique up == 0 2 min
HighLatency Avertissement Temps de réponse > 2s 5 min
HighMemoryUsage Avertissement Mémoire conteneur > 90% de la limite 2 min
HighCPUUsage Avertissement CPU conteneur > 80% 5 min
DiskSpaceRunningLow Avertissement Système de fichiers > 85% utilisé 5 min
PostgresConnectionsHigh Avertissement Connexions > 80% du max 5 min
StorageBucketEmpty Info Le bucket contient 0 objet 10 min

Le routage des alertes est configuré avec un groupement basé sur la sévérité :

  • Alertes critiques : délai de groupement de 5 secondes, intervalle de répétition de 15 minutes
  • Toutes les autres alertes : délai de groupement de 10 secondes, intervalle de répétition d'1 heure
  • Inhibition : une alerte critique supprime les avertissements pour le même service

Accéder à Dashboards

  1. Ouvrez https://metrics.akko.local
  2. Connectez-vous avec Keycloak SSO (par ex. alice avec le rôle administrateur)
  3. Naviguez vers Dashboards dans la barre latérale gauche pour consulter les tableaux de bord pré-construits
  4. Utilisez Explore pour interroger directement les métriques Prometheus ou les journaux logs layer

Interroger les journaux dans Dashboards

Pour consulter les journaux d'un service AKKO spécifique :

  1. Allez dans Explore (icône boussole dans la barre latérale gauche)
  2. Sélectionnez la source de données logs layer
  3. Utilisez une requête LogQL :
{container_name="akko-trino"}

Filtrer par niveau de log :

{container_name="akko-airflow"} |= "ERROR"

Interroger les métriques

Sélectionnez la source de données Prometheus dans Explore et utilisez PromQL :

# Disponibilité des services (1 = en ligne, 0 = hors ligne)
up

# Utilisateurs actifs JupyterHub
jupyterhub_running_servers

# Requêtes par seconde object storage
rate(minio_http_requests_total[5m])

Ajouter des alertes personnalisées

Créez un nouveau fichier YAML dans monitoring/prometheus/rules/ :

monitoring/prometheus/rules/my-alerts.yml
groups:
  - name: my-custom-alerts
    rules:
      - alert: SlowTrinoQueries
        expr: trino_query_execution_time_seconds > 30
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Slow Trino queries detected"
          description: "Queries taking longer than 30 seconds for 5+ minutes."

Prometheus charge automatiquement tous les fichiers *.yml du répertoire de règles.


Ajouter des tableaux de bord personnalisés

Placez les fichiers JSON de tableaux de bord dans monitoring/grafana/dashboards/. Le système de provisionnement de Dashboards détecte les nouveaux fichiers et les charge automatiquement.

Pour exporter un tableau de bord existant :

  1. Ouvrez le tableau de bord dans Dashboards
  2. Cliquez sur l'icône Share (barre supérieure)
  3. Sélectionnez Export > Save to file
  4. Placez le fichier JSON dans monitoring/grafana/dashboards/

Configurer les notifications

La configuration par défaut d'Alertmanager utilise un récepteur de journalisation uniquement (les alertes apparaissent dans stdout). Pour activer de vraies notifications, éditez monitoring/alertmanager/alertmanager.yml :

receivers:
  - name: default
    slack_configs:
      - api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
        channel: '#akko-alerts'
        send_resolved: true
receivers:
  - name: default
    webhook_configs:
      - url: 'http://your-webhook-endpoint:5001/'
        send_resolved: true
global:
  smtp_smarthost: 'smtp.example.com:587'
  smtp_from: 'akko-alerts@example.com'
  smtp_auth_username: 'user'
  smtp_auth_password: 'pass'

receivers:
  - name: default
    email_configs:
      - to: 'team@example.com'
        send_resolved: true

Après modification, redémarrez Alertmanager :

kubectl rollout restart deploy/akko-alertmanager -n akko

Référence des fichiers de configuration

Fichier Fonction
monitoring/prometheus/prometheus.yml Cibles de collecte Prometheus et configuration globale
monitoring/prometheus/rules/akko-alerts.yml Définitions des règles d'alerte
monitoring/grafana/provisioning/datasources/datasource.yml Auto-provisionnement des sources de données Dashboards
monitoring/grafana/provisioning/dashboards/dashboards.yml Configuration du provisionnement des tableaux de bord Dashboards
monitoring/grafana/dashboards/*.json Définitions des tableaux de bord Dashboards pré-construits
monitoring/loki/loki-config.yml Configuration du stockage et de la rétention logs layer
monitoring/promtail/promtail-config.yml Configuration de la collecte de journaux log shipper
monitoring/alertmanager/alertmanager.yml Configuration du routage des alertes et des notifications