Skip to main content

Kubernetes Monitoring and Logging

Introduction​

การตรวจสอบและบันทึกข้อมูล (Monitoring and Logging) เป็นส่วนสำคัญในการดูแลและรักษาความเสถียรของ Kubernetes Cluster การมอนิเตอร์ช่วยให้คุณสามารถติดตามการทำงานของ Pods, Nodes, และ Services ในขณะที่การบันทึกข้อมูลช่วยให้คุณสามารถวิเคราะห์ข้อผิดพลาดและหาต้นตอของปัญหาที่เกิดขึ้น

ในบทนี้, เราจะเรียนรู้เกี่ยวกับเครื่องมือที่ใช้ในการมอนิเตอร์และบันทึกข้อมูลใน Kubernetes เช่น Prometheus, Grafana, ELK Stack, Fluentd, และเครื่องมืออื่น ๆ ที่ใช้ในการตรวจสอบและจัดการข้อมูลในคลัสเตอร์ Kubernetes

Key Concepts​

  1. Monitoring:

    • Monitoring ใน Kubernetes หมายถึงการตรวจสอบสถานะและการทำงานของแอปพลิเคชัน, Pods, Nodes, และทรัพยากรอื่น ๆ ในคลัสเตอร์
    • เครื่องมือมอนิเตอร์เช่น Prometheus ช่วยให้คุณสามารถเก็บข้อมูลการใช้งานของระบบและสร้างกราฟหรือการแจ้งเตือนเมื่อระบบผิดปกติ
  2. Logging:

    • Logging คือการบันทึกข้อมูลการทำงานของแอปพลิเคชันและระบบภายใน Kubernetes
    • เครื่องมือเช่น ELK Stack (Elasticsearch, Logstash, Kibana) หรือ Fluentd ช่วยในการรวบรวม, วิเคราะห์, และแสดงผลข้อมูลบันทึกจาก Pods, Nodes, และ Containers
  3. Metrics:

    • Metrics คือข้อมูลเชิงสถิติที่รวบรวมจาก Kubernetes เพื่อแสดงสถานะการทำงานของระบบ เช่น CPU, Memory usage, และการทำงานของ Pods
    • ตัวอย่างเช่น Prometheus ใช้ในการเก็บ Metrics และสามารถดึงข้อมูลจาก K8s API server เพื่อติดตามสถานะของ Cluster
  4. Alerts:

    • Alerts ช่วยให้คุณได้รับการแจ้งเตือนเมื่อเกิดปัญหาหรือสถานะที่ผิดปกติ เช่น การใช้งาน CPU หรือ Memory สูงเกินไป
    • เครื่องมือที่ช่วยในการตั้งค่าการแจ้งเตือนเช่น Prometheus Alertmanager หรือ Grafana

Kubernetes Monitoring with Prometheus and Grafana​

Prometheus​

Prometheus เป็นเครื่องมือยอดนิยมสำหรับการมอนิเตอร์ Kubernetes โดยมันสามารถรวบรวม Metrics จาก Kubernetes Cluster และ Pods ได้อย่างง่ายดาย

การติดตั้ง Prometheus​

Prometheus สามารถติดตั้งได้โดยใช้ Helm Chart หรือ Kubernetes Manifest

การติดตั้ง Prometheus ด้วย Helm:

helm install prometheus prometheus-community/kube-prometheus-stack

การเก็บ Metrics จาก Kubernetes​

Prometheus จะรวบรวมข้อมูลจากหลายแหล่งใน Kubernetes เช่น:

  • Metrics ของ Nodes
  • Metrics ของ Pods
  • Metrics ของ Services
  • Metrics จาก API Server, Scheduler, และ Controller Manager

คุณสามารถตรวจสอบข้อมูลได้โดยไปที่ UI ของ Prometheus โดยเข้าไปที่ URL ที่ Prometheus Service เปิดให้บริการ (เช่น http://prometheus-server:9090)

Grafana​

Grafana ใช้ในการสร้าง Dashboard สำหรับการแสดงผลข้อมูลจาก Prometheus โดยมันสามารถแสดงข้อมูล Metrics ที่รวบรวมจาก Kubernetes Cluster ได้อย่างสวยงามและใช้งานง่าย

การติดตั้ง Grafana​

การติดตั้ง Grafana สามารถทำได้ผ่าน Helm:

helm install grafana grafana/grafana

การเชื่อมต่อ Grafana กับ Prometheus​

  1. เข้าไปที่ UI ของ Grafana (โดยปกติจะเป็น http://grafana-service:3000)
  2. เพิ่ม Prometheus เป็น Data Source ใน Grafana
  3. สร้าง Dashboards เพื่อแสดงผล Metrics ที่เก็บรวบรวมจาก Prometheus

Kubernetes Logging with ELK Stack​

Elasticsearch, Logstash, Kibana (ELK)​

ELK Stack เป็นชุดเครื่องมือที่ใช้ในการจัดการ Log Data โดยประกอบไปด้วย:

  • Elasticsearch: ระบบฐานข้อมูลที่ใช้สำหรับจัดเก็บและค้นหาข้อมูล Logs
  • Logstash: เครื่องมือในการรวบรวม, แปลง, และส่งข้อมูล Logs ไปยัง Elasticsearch
  • Kibana: เครื่องมือที่ใช้ในการแสดงผลและวิเคราะห์ข้อมูล Logs ที่เก็บไว้ใน Elasticsearch

การติดตั้ง ELK Stack​

การติดตั้ง Elasticsearch ด้วย Helm:

helm install elasticsearch elastic/elasticsearch

การติดตั้ง Logstash ด้วย Helm:

helm install logstash elastic/logstash

การติดตั้ง Kibana ด้วย Helm:

helm install kibana elastic/kibana

Fluentd for Log Collection​

Fluentd เป็นเครื่องมือที่ใช้ในการรวบรวม Logs และส่งไปยัง Elasticsearch หรือระบบอื่น ๆ โดยสามารถเชื่อมต่อกับ Kubernetes และรวบรวม Logs จาก Containers และ Pods

การติดตั้ง Fluentd ด้วย Helm:

helm install fluentd stable/fluentd

Fluentd สามารถกำหนดค่าการรวบรวม Logs จาก Kubernetes โดยใช้ Input Plugin ที่รองรับ เช่น kubernetes input plugin ซึ่งช่วยให้สามารถดึงข้อมูล Log จาก Pods และ Nodes ภายใน Kubernetes Cluster ได้

การเก็บ Logs จาก Kubernetes​

  • Pod Logs: Logs ที่ถูกสร้างขึ้นภายใน Containers ของ Pods
  • Node Logs: Logs ที่เกี่ยวข้องกับการทำงานของ Kubernetes Nodes เช่น kubelet หรือ container runtime
  • Cluster Logs: Logs ที่บันทึกโดย Kubernetes API Server, Controller Manager, และ Scheduler

การวิเคราะห์ Logs ด้วย Kibana​

Kibana ช่วยให้คุณสามารถค้นหาข้อมูล Logs ที่เก็บไว้ใน Elasticsearch และแสดงผลในรูปแบบของ Dashboards ที่สามารถกำหนดเองได้

Best Practices for Kubernetes Monitoring and Logging​

  1. Use Centralized Logging:

    • ใช้เครื่องมือเช่น ELK Stack หรือ Fluentd ในการรวบรวม Logs จากทุก ๆ Pods และ Nodes ใน Cluster เพื่อทำให้การวิเคราะห์ข้อมูล Log เป็นไปได้ง่ายและมีประสิทธิภาพ
  2. Monitor Resource Usage:

    • ติดตามการใช้งานของทรัพยากร เช่น CPU, Memory, และ Network ใน Kubernetes Cluster โดยใช้ Prometheus และ Grafana
  3. Set Up Alerts:

    • ใช้ Prometheus และ Grafana ในการตั้งค่าการแจ้งเตือนเมื่อทรัพยากรของระบบเกินขีดจำกัดหรือเมื่อระบบพบปัญหา
  4. Log Retention and Management:

    • จัดการการเก็บรักษา Logs โดยใช้ ElasticSearch หรือเครื่องมือจัดการ Logs อื่น ๆ เพื่อให้แน่ใจว่า Logs จะไม่เต็มไปหมดและสามารถใช้งานได้ในระยะยาว
  5. Use Labels and Annotations:

    • ใช้ Labels และ Annotations บน Pods และ Services เพื่อทำให้สามารถกรองและค้นหาข้อมูล Logs ได้ง่ายขึ้น

Conclusion​

การมอนิเตอร์และบันทึกข้อมูลเป็นองค์ประกอบสำคัญในการบริหารจัดการ Kubernetes Cluster การใช้เครื่องมือเช่น Prometheus, Grafana, ELK Stack, และ Fluentd ช่วยให้คุณสามารถตรวจสอบสถานะการทำงานของระบบและวิเคราะห์ปัญหาต่าง ๆ ได้อย่างมีประสิทธิภาพ การตั้งค่า Alerts และการจัดการ Logs อย่างเหมาะสมจะช่วยให้ Kubernetes Cluster ของคุณทำงานได้อย่างราบรื่นและมั่นคง