Capítulo 11.2 - Gerenciamento de Logs
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender o gerenciamento de logs no Kubernetes
- Utilizar kubectl para visualizar logs
- Centralizar logs com EFK/Loki
- Configurar Fluentd/Fluent Bit
- Analisar logs com Kibana/Grafana
- Implementar rotação de logs
Introdução
Os logs são essenciais para depuração e monitoramento. No Kubernetes, os logs são gerenciados no nível dos containers e precisam ser centralizados para uma análise eficaz.
Logs com kubectl
Visualizar os Logs de um Pod
# Logs de um Pod
kubectl logs my-pod
# Logs de um container específico
kubectl logs my-pod -c my-container
# Logs de todos os containers
kubectl logs my-pod --all-containers=true
# Logs com follow (streaming)
kubectl logs -f my-pod
# Logs anteriores (se o Pod foi reiniciado)
kubectl logs my-pod --previous
# Logs com timestamp
kubectl logs my-pod --timestamps
# Limitar o número de linhas
kubectl logs my-pod --tail=100
# Logs desde uma data
kubectl logs my-pod --since=1h
Logs de Vários Pods
# Logs de todos os Pods com um label
kubectl logs -l app=my-app
# Logs de um Deployment
kubectl logs deployment/my-app
# Logs de um StatefulSet
kubectl logs statefulset/my-app
Centralização de Logs
EFK Stack (Elasticsearch, Fluentd, Kibana)
Arquitetura:
- Fluentd: Coleta e envia os logs
- Elasticsearch: Armazena os logs
- Kibana: Visualiza e pesquisa os logs
Loki Stack (Loki, Grafana)
Arquitetura:
- Fluent Bit: Coleta os logs
- Loki: Armazena os logs (como o Prometheus para logs)
- Grafana: Visualiza os logs
Instalação do EFK Stack
Via Helm
# Adicionar o repositório
helm repo add elastic https://helm.elastic.co
helm repo update
# Instalar Elasticsearch
helm install elasticsearch elastic/elasticsearch \
--namespace logging \
--create-namespace
# Instalar Fluentd
helm install fluentd fluent/fluentd \
--namespace logging
# Instalar Kibana
helm install kibana elastic/kibana \
--namespace logging
Configuração do 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
Instalação do Loki Stack
Via Helm
# Adicionar o repositório
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
# Instalar Loki
helm install loki grafana/loki-stack \
--namespace logging \
--create-namespace
Configuração do 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
Análise com Kibana
Acesso
# Port-forward
kubectl port-forward -n logging svc/kibana-kibana 5601:5601
Pesquisa de Logs
Kibana Query Language (KQL):
kubernetes.namespace: "production" AND level: "error"
Lucene:
kubernetes.namespace:production AND level:error
Análise com Grafana
Acesso
# Port-forward
kubectl port-forward -n logging svc/loki-grafana 3000:80
LogQL (Loki Query Language)
# Logs de um namespace
{namespace="production"}
# Logs com erros
{namespace="production"} |= "error"
# Taxa de logs por segundo
rate({namespace="production"}[5m])
Boas Práticas
1. Centralização
Centralizar todos os logs em um sistema único.
2. Rotação
Configurar a rotação dos logs para evitar o esgotamento do armazenamento.
3. Indexação
Indexar os logs para uma busca rápida.
4. Retenção
Definir uma política de retenção apropriada.
5. Parsing
Fazer o parsing de logs estruturados (JSON) para uma melhor pesquisa.
Resumo
Neste capítulo, você aprendeu:
kubectl logs: Visualizar os logs dos Pods
Centralização: EFK Stack ou Loki Stack
Fluentd/Fluent Bit: Coleta de logs
Elasticsearch: Armazenamento e busca
Loki: Armazenamento leve para logs
Kibana/Grafana: Visualização e análise
Boas práticas: Centralização, rotação, indexação, retenção
Próximos Passos
Capítulo 11.3: Alerting
Capítulo 11.4: Distributed Tracing
Lab 11.3: Configuração do Logging
Capítulo criado em: Dezembro 2024