Chapter 11.2 - Log Management
Learning Objectives
By the end of this chapter, you will be able to:
- Understand log management in Kubernetes
- Use kubectl to view logs
- Centralize logs with EFK/Loki
- Configure Fluentd/Fluent Bit
- Analyze logs with Kibana/Grafana
- Implement log rotation
Introduction
Logs are essential for debugging and monitoring. In Kubernetes, logs are managed at the container level and need to be centralized for effective analysis.
Logs with kubectl
View Pod Logs
# Pod Logs
kubectl logs my-pod
# Specific container logs
kubectl logs my-pod -c my-container
# All containers logs
kubectl logs my-pod --all-containers=true
# Logs with follow (streaming)
kubectl logs -f my-pod
# Previous logs (if Pod restarted)
kubectl logs my-pod --previous
# Logs with timestamp
kubectl logs my-pod --timestamps
# Limit the number of lines
kubectl logs my-pod --tail=100
# Logs since a date
kubectl logs my-pod --since=1h
Logs from Multiple Pods
# Logs from all Pods with a label
kubectl logs -l app=my-app
# Logs from a Deployment
kubectl logs deployment/my-app
# Logs from a StatefulSet
kubectl logs statefulset/my-app
Log Centralization
EFK Stack (Elasticsearch, Fluentd, Kibana)
Architecture:
- Fluentd: Collects and sends logs
- Elasticsearch: Stores logs
- Kibana: Visualizes and searches logs
Loki Stack (Loki, Grafana)
Architecture:
- Fluent Bit: Collects logs
- Loki: Stores logs (like Prometheus for logs)
- Grafana: Visualizes logs
EFK Stack Installation
Via Helm
# Add the repository
helm repo add elastic https://helm.elastic.co
helm repo update
# Install Elasticsearch
helm install elasticsearch elastic/elasticsearch \
--namespace logging \
--create-namespace
# Install Fluentd
helm install fluentd fluent/fluentd \
--namespace logging
# Install Kibana
helm install kibana elastic/kibana \
--namespace logging
Fluentd Configuration
Fluentd DaemonSet
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
Loki Stack Installation
Via Helm
# Add the repository
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
# Install Loki
helm install loki grafana/loki-stack \
--namespace logging \
--create-namespace
Fluent Bit Configuration
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
Analysis with Kibana
Access
# Port-forward
kubectl port-forward -n logging svc/kibana-kibana 5601:5601
Log Search
Kibana Query Language (KQL):
kubernetes.namespace: "production" AND level: "error"
Lucene:
kubernetes.namespace:production AND level:error
Analysis with Grafana
Access
# Port-forward
kubectl port-forward -n logging svc/loki-grafana 3000:80
LogQL (Loki Query Language)
# Logs from a namespace
{namespace="production"}
# Logs with errors
{namespace="production"} |= "error"
# Log rate per second
rate({namespace="production"}[5m])
Best Practices
1. Centralization
Centralize all logs in a single system.
2. Rotation
Configure log rotation to avoid storage exhaustion.
3. Indexing
Index logs for quick search.
4. Retention
Set an appropriate retention policy.
5. Parsing
Parse structured logs (JSON) for better search.
Summary
In this chapter, you learned:
kubectl logs: View Pod logs
Centralization: EFK Stack or Loki Stack
Fluentd/Fluent Bit: Log collection
Elasticsearch: Storage and search
Loki: Lightweight log storage
Kibana/Grafana: Visualization and analysis
Best practices: Centralization, rotation, indexing, retention
Next Steps
Chapter 11.3: Alerting
Chapter 11.4: Distributed Tracing
Lab 11.3: Logging Configuration
Chapter created on: December 2024