Aller au contenu principal

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