Chapitre 11.2 - Gestion des Logs
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre la gestion des logs dans Kubernetes
- Utiliser kubectl pour voir les logs
- Centraliser les logs avec EFK/Loki
- Configurer Fluentd/Fluent Bit
- Analyser les logs avec Kibana/Grafana
- Implémenter la rotation des logs
Introduction
Les logs sont essentiels pour le débogage et le monitoring. Dans Kubernetes, les logs sont gérés au niveau des conteneurs et doivent être centralisés pour une analyse efficace.
Logs avec kubectl
Voir les Logs d'un Pod
# Logs d'un Pod
kubectl logs my-pod
# Logs d'un conteneur spécifique
kubectl logs my-pod -c my-container
# Logs de tous les conteneurs
kubectl logs my-pod --all-containers=true
# Logs avec follow (streaming)
kubectl logs -f my-pod
# Logs précédents (si Pod redémarré)
kubectl logs my-pod --previous
# Logs avec timestamp
kubectl logs my-pod --timestamps
# Limiter le nombre de lignes
kubectl logs my-pod --tail=100
# Logs depuis une date
kubectl logs my-pod --since=1h
Logs de Plusieurs Pods
# Logs de tous les Pods avec un label
kubectl logs -l app=my-app
# Logs d'un Deployment
kubectl logs deployment/my-app
# Logs d'un StatefulSet
kubectl logs statefulset/my-app
Centralisation des Logs
EFK Stack (Elasticsearch, Fluentd, Kibana)
Architecture:
- Fluentd: Collecte et envoie les logs
- Elasticsearch: Stocke les logs
- Kibana: Visualise et recherche les logs
Loki Stack (Loki, Grafana)
Architecture:
- Fluent Bit: Collecte les logs
- Loki: Stocke les logs (comme Prometheus pour les logs)
- Grafana: Visualise les logs
Installation EFK Stack
Via Helm
# Ajouter le repository
helm repo add elastic https://helm.elastic.co
helm repo update
# Installer Elasticsearch
helm install elasticsearch elastic/elasticsearch \
--namespace logging \
--create-namespace
# Installer Fluentd
helm install fluentd fluent/fluentd \
--namespace logging
# Installer Kibana
helm install kibana elastic/kibana \
--namespace logging
Configuration Fluentd
DaemonSet Fluentd
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: logging
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.logging.svc.cluster.local"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
Installation Loki Stack
Via Helm
# Ajouter le repository
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
# Installer Loki
helm install loki grafana/loki-stack \
--namespace logging \
--create-namespace
Configuration Fluent Bit
apiVersion: v1
kind: ConfigMap
metadata:
name: fluent-bit-config
namespace: logging
data:
fluent-bit.conf: |
[SERVICE]
Flush 1
Log_Level info
[INPUT]
Name tail
Path /var/log/containers/*.log
Parser docker
Tag kube.*
Refresh_Interval 5
[OUTPUT]
Name loki
Match kube.*
Host loki.logging.svc.cluster.local
Port 3100
Labels job=fluentbit
Analyse avec Kibana
Accès
# Port-forward
kubectl port-forward -n logging svc/kibana-kibana 5601:5601
Recherche de Logs
Kibana Query Language (KQL):
kubernetes.namespace: "production" AND level: "error"
Lucene:
kubernetes.namespace:production AND level:error
Analyse avec Grafana
Accès
# Port-forward
kubectl port-forward -n logging svc/loki-grafana 3000:80
LogQL (Loki Query Language)
# Logs d'un namespace
{namespace="production"}
# Logs avec erreurs
{namespace="production"} |= "error"
# Taux de logs par seconde
rate({namespace="production"}[5m])
Bonnes Pratiques
1. Centralisation
Centraliser tous les logs dans un système unique.
2. Rotation
Configurer la rotation des logs pour éviter l'épuisement du stockage.
3. Indexation
Indexer les logs pour une recherche rapide.
4. Retention
Définir une politique de rétention appropriée.
5. Parsing
Parser les logs structurés (JSON) pour une meilleure recherche.
Résumé
Dans ce chapitre, vous avez appris:
kubectl logs: Voir les logs des Pods
Centralisation: EFK Stack ou Loki Stack
Fluentd/Fluent Bit: Collecte des logs
Elasticsearch: Stockage et recherche
Loki: Stockage léger pour les logs
Kibana/Grafana: Visualisation et analyse
Bonnes pratiques: Centralisation, rotation, indexation, retention
Prochaines Étapes
Chapitre 11.3: Alerting
Chapitre 11.4: Distributed Tracing
Lab 11.3: Configuration du Logging
Chapitre créé le: Décembre 2024