Interrogation des Données

IceGate fournit des APIs compatibles Loki et Tempo pour interroger les données d'observabilité,
ainsi qu'Arrow Flight SQL pour du SQL généraliste.
L'API compatible Prometheus est prévue mais pas encore
implémentée - interrogez les métriques via Flight SQL en attendant. Les pages de référence des API
font foi sur les points de terminaison servis aujourd'hui.

LogQL pour les Logs

LogQL est le langage de requête pour les logs, compatible avec Grafana Loki.

Sélecteur de Flux de Logs

Sélectionner les logs par labels :

# Sélectionner par nom de service
        {service_name="api-service"}
        
        # Labels multiples
        {service_name="api-service", severity_text="ERROR"}
        
        # Correspondance regex de labels
        {service_name=~"api-.*"}
        
        # Correspondance négative
        {service_name!="internal-service"}
        

Filtres de Lignes

Filtrer les lignes de log par contenu :

# Contient
        {service_name="api-service"} |= "error"
        
        # Ne contient pas
        {service_name="api-service"} != "debug"
        
        # Correspondance regex
        {service_name="api-service"} |~ "status=[45][0-9][0-9]"
        
        # Regex non correspondant
        {service_name="api-service"} !~ "health"
        

Filtres de Labels

Filtrer par valeurs de labels :

# Comparaison numérique
        {service_name="api-service"} | severity_number > 8
        
        # Comparaison de durée
        {service_name="api-service"} | duration > 1s
        
        # Comparaison d'octets
        {service_name="api-service"} | bytes > 1KB
        

Requêtes Métriques

Agréger les logs en métriques :

# Compter les logs dans le temps
        count_over_time({service_name="api-service"}[5m])
        
        # Taux de logs par seconde
        rate({service_name="api-service"}[1m])
        
        # Débit en octets
        bytes_rate({service_name="api-service"}[5m])
        
        # Vérifier l'absence de logs
        absent_over_time({service_name="api-service"}[1h])
        

Agrégations Vectorielles

Agréger sur les dimensions de labels :

# Somme par service
        sum by (service_name) (count_over_time({job="app"}[5m]))
        
        # Taux moyen
        avg(rate({service_name=~".*"}[1m]))
        
        # Top des services par volume de logs
        sum by (service_name) (bytes_rate({job="app"}[5m]))
        

Requêtes en Temps Réel (WAL)

Par défaut, le service query lit uniquement les données Iceberg validées. Pour interroger également les données qui n'ont pas encore été transférées vers Iceberg (données WAL vieilles de quelques secondes), activez les requêtes WAL dans la configuration du service query :

engine:
          wal_query_enabled: true
          wal_metadata_size_hint: 65536  # Bytes for WAL footer reads
        

Lorsque activé, les requêtes lisent depuis les deux sources :

  • Tables Iceberg - Données historiques, compactées
  • Segments WAL - Données en temps réel pas encore transférées

Note : Les points de terminaison de métadonnées /labels, /label/{name}/values et /series lisent toujours uniquement depuis Iceberg, quel que soit ce paramètre.

Statut d'Implémentation

Fonctionnalité Statut
Sélection de Logs ✅ Implémenté
Correspondance de Labels (=, !=, =~, !~) ✅ Implémenté
Filtres de Lignes (|=, !=, |~, !~) ✅ Implémenté
count_over_time ✅ Implémenté
rate ✅ Implémenté
bytes_over_time ✅ Implémenté
bytes_rate ✅ Implémenté
absent_over_time ✅ Implémenté
Agrégations vectorielles (sum, avg, min, max, count) ✅ Implémenté
Parseurs de pipeline (json, logfmt) ❌ Pas encore
Agrégations unwrap ❌ Pas encore

Exemples de Requêtes

Erreurs Récentes

{service_name="api-service", severity_text="ERROR"}
        

Taux d'Erreur par Service

sum by (service_name) (
          rate({severity_text="ERROR"}[5m])
        )
        

Tendances du Volume de Logs

sum(count_over_time({job="app"}[1h]))
        

Utilisation de l'API

Query Range

curl -G http://localhost:3100/loki/api/v1/query_range \
          --data-urlencode 'query={service_name="api-service"}' \
          --data-urlencode 'start=1704067200' \
          --data-urlencode 'end=1704153600' \
          --data-urlencode 'limit=1000' \
          -H "X-Scope-OrgID: my-tenant"
        

Labels Disponibles

curl http://localhost:3100/loki/api/v1/labels \
          -H "X-Scope-OrgID: my-tenant"
        

Valeurs de Labels

curl http://localhost:3100/loki/api/v1/label/service_name/values \
          -H "X-Scope-OrgID: my-tenant"
        

Étapes Suivantes