Bài 10: Giám Sát Log Và Events Với kubectl logs

Sau khi đã khám phá cách chia sẻ tài nguyên giữa các container trong Bài 9, chúng ta sẽ bước vào domain Observability (chiếm 10% trọng số trong kỳ thi CKAD). Bài này tập trung vào việc giám sát logs và events bằng lệnh kubectl logs, cùng với cách sử dụng kubectl get events để theo dõi sự kiện cluster. Đây là công cụ thiết yếu để debug ứng dụng, xác định lỗi runtime, và hiểu hành vi của Pods/containers.

Domain Observability trong CKAD yêu cầu bạn thành thạo việc truy xuất logs để troubleshoot, chẳng hạn như xem logs từ container crash hoặc theo dõi events để debug Pod không schedule. Trong kỳ thi, bạn có thể gặp task như lấy logs từ Pod multi-container, filter events theo namespace, hoặc debug CrashLoopBackOff qua logs (đến đây là bắt đầu khoai hơn tý này).

Logs Trong Kubernetes Là Gì Và Cách Quản Lý

Logs là output từ stdout/stderr của containers, bao gồm messages ứng dụng, errors, hoặc debug info. Kubernetes không lưu logs persistent (trừ khi config), mà forward chúng từ container runtime (như containerd) đến kubelet, rồi có thể aggregate qua sidecar hoặc daemon như Fluentd.

Cấu trúc logs:

  • Container logs: Lưu tại /var/log/containers trên node, symlink đến /var/log/pods.
  • Pod logs: Aggregate từ tất cả containers trong Pod.
  • Cluster logs: Bao gồm kubelet, API server logs, nhưng focus CKAD là Pod/container logs.

Cách quản lý logs:

  • Basic: kubectl logs lấy trực tiếp từ kubelet.
  • Advanced: Sidecar container ship logs đến ELK (Elasticsearch, Logstash, Kibana) hoặc tools như Loki.
  • Best practice: Không write logs vào files trong container (trừ volume), dùng stdout để dễ aggregate.

Trong CKAD, hiểu logs giúp debug nhanh, ví dụ: Xem tại sao container exit code 1.

Dưới đây là diagram kiến trúc logging từ tài liệu chính thức Kubernetes, minh họa cách logs từ container streaming đến backend qua sidecar.

https://kubernetes.io/images/docs/user-guide/logging/logging-with-streaming-sidecar.png

Events Trong Kubernetes Là Gì

Events là objects ghi lại các sự kiện xảy ra trong cluster, như Pod created, scheduled, image pull fail, hoặc node not ready. Chúng lưu trong etcd với TTL (default 1 giờ), giúp trace vấn đề hệ thống.

Types events:

  • Normal: Thông tin thông thường (e.g., Pulling image).
  • Warning: Lỗi tiềm ẩn (e.g., FailedScheduling).

Events liên kết với objects (Pod, Node) qua involvedObject field.

Trong CKAD, events hữu ích để debug tại sao Pod Pending hoặc CrashLoopBackOff.

Dưới đây là ví dụ output kubectl get events.

https://www.zentao.pm/file.php?f=zentaopm/202210/f_6e1317e2d2f9459f99e27037050858e5&t=png&o=&s=&v=1667115457

Các Lệnh Kubectl Để Giám Sát Logs

kubectl logs lấy logs từ Pod/container. Syntax cơ bản: kubectl logs <pod-name> [-c <container>] [options].

Lệnh Cơ Bản Và Options

  • Lấy logs Pod đơn container: kubectl logs my-pod.
  • Chỉ định container: kubectl logs my-pod -c sidecar (bắt buộc cho multi-container).
  • Follow realtime: kubectl logs -f my-pod (tail logs như tail -f).
  • Logs từ previous container: kubectl logs my-pod --previous (nếu container crash và restart).
  • Limit lines: kubectl logs my-pod --tail=50 (last 50 lines).
  • Timestamp: kubectl logs my-pod --timestamps (thêm time prefix).
  • Since time: kubectl logs my-pod --since=1h hoặc --since-time=2023-10-24T00:00:00Z.
  • All containers: kubectl logs my-pod --all-containers (aggregate từ tất cả).

Ví dụ: Debug CrashLoopBackOff: kubectl logs my-pod --previous -c app.

Các Lệnh Kubectl Để Giám Sát Events

  • Liệt kê events: kubectl get events (default namespace).
  • All namespaces: kubectl get events -A.
  • Watch realtime: kubectl get events --watch.
  • Sort by time: kubectl get events --sort-by=.metadata.creationTimestamp.
  • Output format: kubectl get events -o wide (thêm details).
  • Filter: Dùng kubectl get events -l app=myapp (label selector).

Ví dụ: Debug Pod fail: kubectl get events --sort-by=.metadata.creationTimestamp | grep my-pod.

Dưới đây là flowchart troubleshooting Kubernetes với logs và events, hữu ích cho debug flow.

https://static.learnkube.com/fae60444184ca7bd8c3698d866c24617.png

Bảng Cheat Sheet Lệnh Logs Và Events

Lệnh Mô tả Ví dụ
kubectl logs [pod] Lấy logs Pod cơ bản kubectl logs nginx-pod
kubectl logs -f pod -c [cont] Follow logs container cụ thể kubectl logs -f nginx-pod -c nginx
kubectl logs –previous [pod] Logs từ instance trước (crash) kubectl logs –previous crashed-pod
kubectl logs –tail=100 [pod] Last 100 lines kubectl logs –tail=100 busybox
kubectl get events -A Liệt kê events all namespaces kubectl get events -A
kubectl get events –watch Watch events realtime kubectl get events –watch
kubectl get events -o yaml Output YAML chi tiết kubectl get events -o yaml

Liên Hệ Với Chứng Chỉ CKAD

Domain Observability (10%) tập trung vào logs và events để debug. Task điển hình:

  • Lấy logs từ container cụ thể trong Pod multi-container.
  • Sử dụng events để troubleshoot Pod không Running (e.g., ImagePullBackOff).
  • Follow logs để xem realtime output trong task deploy.

Mẹo thi:

  • Nhớ -c cho multi-container, default lấy container đầu.
  • Kết hợp với describe pod để xem events liên quan.
  • Thời gian: 3-5 phút/task, dùng autocomplete để nhanh.
  • Luyện: Tạo Pod crash và debug bằng logs/events.
  • Trong thi, cluster có logs retention ngắn, nên lấy nhanh.

Thực Hành Thực Tế Trên Minikube

Giả sử bạn có Pod nginx từ bài trước.

  1. Tạo Pod đơn giản:

    kubectl run log-pod --image=busybox --command -- sh -c "while true; do echo 'Log message'; sleep 5; done"
  2. Giám sát logs:

    kubectl logs log-pod  # Lấy logs
    kubectl logs -f log-pod  # Follow
  3. Multi-container logs (từ Bài 8):

    kubectl logs sidecar-pod -c app-container
    kubectl logs sidecar-pod -c logging-sidecar
  4. Giám sát events:

    kubectl get events --sort-by=.metadata.creationTimestamp
    kubectl get events -A --watch
  5. Debug crash: Tạo Pod crash: kubectl run crash-pod --image=busybox --command -- sh -c "exit 1".

    kubectl describe pod crash-pod  # Xem events
    kubectl logs crash-pod --previous  # Logs crash
  6. Cleanup: kubectl delete pod log-pod crash-pod.

Nếu không thấy logs, check container running bằng get pods.

Dưới đây là diagram pod logs và events flow, minh họa cách events liên kết với logs cho observability.

https://devopscube.com/content/images/2025/03/k8s-logging-1.gif

Kết Luận

Bài này mình đã hướng dẫn chi tiết giám sát logs và events với kubectl logs cùng các lệnh liên quan, từ cơ bản đến debug. Bạn giờ có thể troubleshoot hiệu quả, sẵn sàng cho domain Observability trong CKAD. Tiếp theo, ở Bài 11: Debug Pod Với kubectl describeexec, chúng ta sẽ đi sâu hơn vào các công cụ debug nâng cao.

Điều hướng chuỗi bài viết<< Bài 9: Chia Sẻ Tài Nguyên Giữa Các Container
>> Bài 11: Debug Pod Với kubectl describe Và exec

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia