Guide de Démarrage
Ce guide vous accompagne dans l'ingestion de logs, traces et métriques dans IceGate, ainsi que dans leur interrogation via l'API et Grafana.
Remarque
Ce guide suppose qu'IceGate est déjà en cours d'exécution. Consultez Installation pour le déploiement Helm ou Environnement de développement pour un environnement local.
Ingérer des Logs
IceGate accepte les données via le protocole OpenTelemetry (OTLP) sur le service d'ingestion.
Envoyer des Logs via OTLP HTTP
curl -X POST http://localhost:4318/v1/logs \
-H "Content-Type: application/json" \
-H "X-Scope-OrgID: demo" \
-d '{
"resourceLogs": [{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "my-service"}}
]
},
"scopeLogs": [{
"logRecords": [{
"timeUnixNano": "'$(date +%s)000000000'",
"body": {"stringValue": "User login successful"},
"severityText": "INFO",
"severityNumber": 9,
"attributes": [
{"key": "user.id", "value": {"stringValue": "user-42"}},
{"key": "http.method", "value": {"stringValue": "POST"}}
]
}]
}]
}]
}'
Envoyer des Logs via OTLP gRPC
Utilisez n'importe quel SDK OpenTelemetry. Exemple avec Python :
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
provider = LoggerProvider()
provider.add_log_record_processor(
BatchLogRecordProcessor(
OTLPLogExporter(
endpoint="localhost:4317",
headers={"X-Scope-OrgID": "demo"},
insecure=True,
)
)
)
Ingérer des Traces
Envoyez des spans de traces distribuées :
curl -X POST http://localhost:4318/v1/traces \
-H "Content-Type: application/json" \
-H "X-Scope-OrgID: demo" \
-d '{
"resourceSpans": [{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "my-service"}}
]
},
"scopeSpans": [{
"spans": [{
"traceId": "5B8EFFF798038103D269B633813FC60C",
"spanId": "EEE19B7EC3C1B174",
"name": "GET /api/users",
"kind": 2,
"startTimeUnixNano": "'$(date +%s)000000000'",
"endTimeUnixNano": "'$(date +%s)100000000'",
"status": {"code": 1},
"attributes": [
{"key": "http.method", "value": {"stringValue": "GET"}},
{"key": "http.status_code", "value": {"intValue": "200"}}
]
}]
}]
}]
}'
Ingérer des Métriques
Envoyez des données de métriques :
curl -X POST http://localhost:4318/v1/metrics \
-H "Content-Type: application/json" \
-H "X-Scope-OrgID: demo" \
-d '{
"resourceMetrics": [{
"resource": {
"attributes": [
{"key": "service.name", "value": {"stringValue": "my-service"}}
]
},
"scopeMetrics": [{
"metrics": [{
"name": "http_requests_total",
"sum": {
"dataPoints": [{
"startTimeUnixNano": "'$(date +%s)000000000'",
"timeUnixNano": "'$(date +%s)000000000'",
"asInt": "42",
"attributes": [
{"key": "method", "value": {"stringValue": "GET"}},
{"key": "status", "value": {"stringValue": "200"}}
]
}],
"aggregationTemporality": 2,
"isMonotonic": true
}
}]
}]
}]
}'
Interroger les Logs avec LogQL
IceGate fournit une API compatible Loki sur le service de requête (port 3100) - un sous-ensemble de
l'API de Loki, listé dans la référence des API.
Requête de Logs Basique
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="my-service"}' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'limit=100' \
-H "X-Scope-OrgID: demo"
Filtrer par Sévérité
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="my-service", severity_text="ERROR"}' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
-H "X-Scope-OrgID: demo"
Rechercher dans le Contenu des Logs
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="my-service"} |= "login"' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
-H "X-Scope-OrgID: demo"
Agréger les Logs en Métriques
# Compter les logs par fenêtre de 5 minutes
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query=count_over_time({service_name="my-service"}[5m])' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'step=300' \
-H "X-Scope-OrgID: demo"
# Taux d'erreurs par seconde
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query=rate({severity_text="ERROR"}[1m])' \
--data-urlencode 'start='$(date -d '1 hour ago' +%s 2>/dev/null || date -v-1H +%s) \
--data-urlencode 'end='$(date +%s) \
--data-urlencode 'step=60' \
-H "X-Scope-OrgID: demo"
Explorer les Labels et les Séries
Lister Tous les Labels
curl http://localhost:3100/loki/api/v1/labels \
-H "X-Scope-OrgID: demo"
Obtenir les Valeurs d'un Label
curl http://localhost:3100/loki/api/v1/label/service_name/values \
-H "X-Scope-OrgID: demo"
Trouver les Séries Correspondantes
curl -G http://localhost:3100/loki/api/v1/series \
--data-urlencode 'match[]={service_name=~"my-.*"}' \
-H "X-Scope-OrgID: demo"
Utiliser Grafana
IceGate est compatible avec la source de données Loki de Grafana pour la visualisation et la création de tableaux de bord.
Ajouter IceGate comme Source de Données
- Ouvrez Grafana (par défaut : http://localhost:3000)
- Allez dans Connections > Data sources > Add data source
- Sélectionnez Loki
- Définissez l'URL à
http://icegate-query:3100(ouhttp://localhost:3100pour un accès local) - Sous HTTP Headers, ajoutez :
- Header :
X-Scope-OrgID - Value :
demo
- Header :
- Cliquez sur Save & Test
Explorer les Logs
- Allez dans Explore
- Sélectionnez la source de données Loki
- Entrez une requête LogQL :
{service_name="my-service"} - Cliquez sur Run query
- Basculez entre les vues Logs et Graph
Créer un Tableau de Bord
- Allez dans Dashboards > New > New Dashboard
- Ajoutez un panneau Logs :
- Query :
{service_name="my-service"} - Visualisation : Logs
- Query :
- Ajoutez un panneau Time series pour le taux d'erreurs :
- Query :
sum by (service_name) (rate({severity_text="ERROR"}[5m])) - Visualisation : Time series
- Query :
- Ajoutez un panneau Stat pour le volume de logs :
- Query :
sum(count_over_time({service_name="my-service"}[1h])) - Visualisation : Stat
- Query :
Tableaux de Bord Préconfigurés
Si déployé avec les overlays Kustomize ou Docker Compose, Grafana est préconfiguré avec des tableaux de bord IceGate pour les métriques des services d'ingestion et de requête.
Utiliser l'OpenTelemetry Collector
Pour les charges de travail de production, utilisez l'OpenTelemetry Collector pour transférer les données de vos applications vers IceGate :
# otel-collector-config.yaml
exporters:
otlp/icegate:
endpoint: icegate-ingest:4317
tls:
insecure: true
headers:
X-Scope-OrgID: my-tenant
service:
pipelines:
logs:
receivers: [otlp]
exporters: [otlp/icegate]
traces:
receivers: [otlp]
exporters: [otlp/icegate]
metrics:
receivers: [otlp]
exporters: [otlp/icegate]
Multi-Tenancy
IceGate isole les données par tenant à l'aide de l'en-tête X-Scope-OrgID. Les données de chaque tenant sont physiquement partitionnées.
# Ingestion pour le tenant "team-a"
curl -X POST http://localhost:4318/v1/logs \
-H "X-Scope-OrgID: team-a" \
-H "Content-Type: application/json" \
-d '...'
# La requête ne voit que les données de team-a
curl -G http://localhost:3100/loki/api/v1/query_range \
--data-urlencode 'query={service_name="api"}' \
-H "X-Scope-OrgID: team-a"
Consultez Multi-Tenancy pour plus de détails.
Étapes Suivantes
- Apprenez les requêtes LogQL en profondeur
- Explorez la référence de l'API Loki
- Configurez les pipelines d'ingestion de données
- Comprenez le modèle de données