← Назад к вопросам
Смотрел ли логи в Kubernetes
2.8 Senior🔥 81 комментариев
#Docker, Kubernetes и DevOps
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Работа с логами в Kubernetes
Да, я активно работаю с логами в Kubernetes. Это критически важная часть отладки и мониторинга production систем.
Базовые команды kubectl
Каждый день использую:
# Логи одного pod
kubectl logs pod-name -n namespace
# Логи с последних 100 строк
kubectl logs pod-name --tail=100
# В real-time режиме (tail -f)
kubectl logs -f pod-name
# Логи из определенного контейнера
kubectl logs pod-name -c container-name
# Логи удаленного pod
kubectl logs --previous pod-name
Структурированные логи (JSON)
Для production я всегда использую JSON логи:
@Configuration
public class LoggingConfig {
// Spring Boot с ELK Stack (Elasticsearch, Logstash, Kibana)
// logback-spring.xml конфиг с JSON encoder
}
@Slf4j
@RestController
public class OrderController {
@PostMapping("/orders")
public ResponseEntity createOrder(OrderRequest request) {
log.info("Order created",
kv("orderId", order.getId()),
kv("customerId", request.getCustomerId()),
kv("amount", request.getAmount()));
}
}
Мониторинг множества pods
# Логи всех pods в deployment
kubectl logs -l app=order-service -n production
# Логи всех pods с label
kubectl logs -l tier=backend
# Следить за новыми логами (stream)
kubectl logs -f deployment/order-service
Отладка проблем
Когда pod крашится:
# Статус pod
kubectl describe pod pod-name
# События pod
kubectl get events --field-selector involvedObject.name=pod-name
# Логи перед крашем
kubectl logs --previous pod-name
# Exec в running pod
kubectl exec -it pod-name -- /bin/bash
Логирование приложения
В Java приложении:
@Slf4j
@Service
public class OrderService {
@Transactional
public void processOrder(Order order) {
log.info("Processing order",
kv("orderId", order.getId()),
kv("status", order.getStatus()));
try {
// Process
} catch (Exception e) {
log.error("Failed to process order",
kv("orderId", order.getId()),
e);
throw e;
}
}
}
ELK Stack integration
Для большого объема логов использую ELK:
- Elasticsearch для хранения
- Logstash для парсинга
- Kibana для визуализации
# Pod логи автоматически идут в Elasticsearch
kubectl logs pod-name | # отправляется в Logstash
# затем в Elasticsearch
# Видим в Kibana dashboard
Helm charts с logging
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
template:
spec:
containers:
- name: order-service
image: order-service:1.0
env:
- name: LOG_LEVEL
value: "INFO"
- name: ELASTICSEARCH_HOST
value: "elasticsearch:9200"
Best Practices
- Структурированные логи - JSON с key-value
- Log levels - DEBUG, INFO, WARN, ERROR
- Correlation IDs - отслеживание request'а через сервисы
- Не логируй sensitive данные - passwords, tokens
- Асинхронное логирование - не блокировать thread
Проблемы и решения
Проблема: слишком много логов Решение: используй log levels, фильтруй в Kibana
Проблема: не видно логи pod'a Решение: проверь namespace, используй -n flag
Проблема: pod крашится до логирования
Решение: используй kubectl logs --previous
Цикл отладки
kubectl get pods- найти podkubectl logs pod-name- прочитать логиkubectl describe pod pod-name- деталиkubectl exec -it pod-name -- bash- exec в pod- В Kibana искать по orderId или correlationId
Это неотъемлемая часть моей работы с production системами в Kubernetes.