Pular para o conteúdo principal

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