Kubernetes คือ ตอนที่ 8 : การบันทึก (Logging) และการตรวจสอบ (Monitoring)

  1. ทำความเข้าใจเกี่ยวกับการบันทึก (Logging) และการตรวจสอบ (Monitoring) ใน Kubernetes
  2. เหตุใดการบันทึก (Logging) จึงมีความสำคัญใน Kubernetes
  3. การบันทึก (Logging) ใน Kubernetes
  4. การใช้แบ็กเอนด์การบันทึก (Logging Backend)
  5. การตรวจสอบ (Monitoring) ใน Kubernetes
  6. เมตริก (Metrics) ใน Kubernetes
  7. โพรมีธีอุส (Prometheus) และกราฟานา (Grafana)
  8. การตรวจสุขภาพ (Health Checks) ใน Kubernetes

เมื่อแอปพลิเคชันมีความซับซ้อนและขนาดเพิ่มขึ้น ความสำคัญของการบันทึกที่เชื่อถือได้และกลไกการตรวจสอบจะกลายเป็นสิ่งสำคัญยิ่ง โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมคอนเทนเนอร์ที่ควบคุมโดย Kubernetes ซึ่งไมโครเซอร์วิสหลายตัวทำงานร่วมกันเพื่อทำแอพ

ในการจัดการและแก้ไขปัญหาระบบดังกล่าว คุณต้องมองเห็นลักษณะการทำงานและประสิทธิภาพของแอปพลิเคชันของคุณ นี่คือที่มาของแนวคิดของการบันทึกและการตรวจสอบ นอกจากนี้ เราจะพูดถึงการตรวจสุขภาพ (health checks) ใน Kubernetes ซึ่งมีความสำคัญต่อการรักษาสุขภาพและประสิทธิภาพของแอปพลิเคชันของคุณ แต่ก่อนอื่น เรามาเริ่มกันที่ภาพรวมของการบันทึกและการตรวจสอบในการทำแอพใน Kubernetes

1. ทำความเข้าใจเกี่ยวกับการบันทึก (Logging) และการตรวจสอบ (Monitoring) ใน Kubernetes

ในบริบทของ Kubernetes การบันทึกเป็นวิธีการเข้าถึงบันทึกสำหรับคอนเทนเนอร์ที่ทำงานใน Pod ของคุณ เป็นส่วนประกอบที่สำคัญสำหรับการดีบักและทำความเข้าใจพฤติกรรมของแอปพลิเคชันและระบบของคุณ ในทางกลับกัน การตรวจสอบเกี่ยวข้องกับการสังเกตและติดตามประสิทธิภาพและการใช้ทรัพยากรของคลัสเตอร์ โหนด พ็อด และคอนเทนเนอร์ของคุณในการทำแอพ

การตรวจสอบเป็นพื้นฐานสำหรับการระบุและวินิจฉัยข้อบกพร่อง การวางแผนความสามารถ และการทำความเข้าใจความสมบูรณ์โดยรวมของระบบของคุณ การบันทึกและการมอนิเตอร์ร่วมกันมอบเครื่องมือที่จำเป็นในการบำรุงรักษาระบบที่แข็งแกร่งและมีประสิทธิภาพ

2. เหตุใดการบันทึก (Logging) จึงมีความสำคัญใน Kubernetes

หากไม่มีการเข้าสู่ระบบ การวินิจฉัยปัญหาในระบบแบบกระจายอย่าง Kubernetes ก็เหมือนกับการงมเข็มในมหาสมุทร บันทึกจะให้ข้อมูลที่สำคัญเกี่ยวกับสิ่งที่เกิดขึ้นในขณะที่เกิดข้อผิดพลาด ทำให้เป็นเครื่องมือสำหรับการดีบัก นอกจากนี้ยังสามารถให้ข้อมูลเชิงลึกที่มีค่าเกี่ยวกับประสิทธิภาพของระบบและพฤติกรรมของผู้ใช้เมื่อใช้ร่วมกับการตรวจสอบ

3. การบันทึก (Logging) ใน Kubernetes

Kubernetes ไม่รองรับการรวมบันทึกแบบเนทีฟ แต่ทำให้บันทึกพร้อมใช้งานผ่าน Kubernetes API และอินเทอร์เฟซkubectlบรรทัดคำสั่ง ตามค่าเริ่มต้น Kubernetes จะบันทึกสตรีม stdout และ stderr สำหรับทุกคอนเทนเนอร์ในพ็อด

หากต้องการดูบันทึกของคอนเทนเนอร์ที่กำลังทำงานอยู่ คุณสามารถใช้kubectl logsคำสั่ง:

kubectl logs <pod-name> <container-name>

ตัวอย่างเช่น หากต้องการดูบันทึกของคอนเทนเนอร์ชื่อ “my-app” ในพ็อดชื่อ “my-pod” คุณต้องเรียกใช้:

kubectl logs my-pod my-app

แม้ว่าฟังก์ชันการบันทึกพื้นฐานนี้จะมีประโยชน์สำหรับการดีบักอย่างง่าย แต่สำหรับสภาพแวดล้อมที่ซับซ้อนมากขึ้น คุณอาจต้องใช้แบ็กเอนด์การบันทึกเฉพาะที่รวมบันทึกจากหลายพ็อดและให้คุณสมบัติการสืบค้นและการวิเคราะห์ขั้นสูงเพิ่มเติม ตัวอย่างของแบ็กเอนด์การบันทึกยอดนิยม ได้แก่ Elasticsearch, Fluentd และ Logstash (สแต็ก ELK) รวมถึงโซลูชันบนคลาวด์ เช่น Google Stackdriver และ AWS CloudWatch

4. การใช้แบ็กเอนด์การบันทึก (Logging Backend)

ลองพิจารณา Fluentd ซึ่งเป็นแบ็กเอนด์การบันทึกที่โฮสต์โดย CNCF และเป็นส่วนสำคัญของสถาปัตยกรรมการบันทึก Kubernetes จำนวนมาก Fluentd รวบรวมบันทึกจากแต่ละโหนดและส่งต่อไปยังแบ็กเอนด์ที่คุณเลือก

ในการตั้งค่า Fluentd โดยทั่วไป คุณจะปรับใช้เป็น DaemonSet ในคลัสเตอร์ Kubernetes สิ่งนี้ทำให้แน่ใจว่า Fluentd Pod ทำงานบนแต่ละโหนดในคลัสเตอร์ของคุณ โดยรวบรวมบันทึกจากคอนเทนเนอร์ทั้งหมดที่ทำงานบนโหนดนั้น

เมื่อใช้ร่วมกับ Elasticsearch สำหรับพื้นที่จัดเก็บบันทึกและ Kibana สำหรับการแสดงภาพ Fluentd จะจัดรูปแบบ EFK stack ซึ่งเป็นโซลูชันการบันทึกแบบโอเพ่นซอร์สที่มีประสิทธิภาพสำหรับ Kubernetes นี่คือวิธีที่คุณสามารถสร้างการตั้งค่าดังกล่าว:

  1. ตั้งค่า Elasticsearch และ Kibana : ปรับใช้ Elasticsearch และ Kibana กับคลัสเตอร์ของคุณ คุณสามารถใช้ตัวจัดการแพ็คเกจ Helm เพื่อทำให้การปรับใช้ง่ายขึ้น
  2. ปรับใช้ Fluentd : ถัดไป ปรับใช้ Fluentd เป็น DaemonSet กับคลัสเตอร์ของคุณ กำหนดค่า Fluentd เพื่อรวบรวมบันทึกจากแต่ละโหนดและส่งต่อไปยังบริการ Elasticsearch ของคุณ
  3. กำหนดค่า Fluentd : การกำหนดค่าของ Fluentd จะกำหนดวิธีการรวบรวมและส่งต่อบันทึก ข้อมูลนี้ระบุไว้ใน ConfigMap ซึ่งต่อจากนั้นติดตั้งใน Fluentd Pods เป็นไฟล์กำหนดค่า
  4. การดูบันทึกของคุณใน Kibana : ด้วยการส่งต่อบันทึก Fluentd ไปยัง Elasticsearch คุณสามารถใช้ Kibana เพื่อสำรวจและแสดงภาพบันทึกของคุณ

อย่าลืมรักษาความปลอดภัยส่วนหลังการบันทึกของคุณ ตัวอย่างเช่น คุณควรกำหนดค่าการควบคุมการเข้าถึงสำหรับ Kibana และเข้ารหัสการสื่อสารระหว่าง Fluentd, Elasticsearch และ Kibana

5. การตรวจสอบ (Monitoring) ใน Kubernetes

ตอนนี้เราได้กล่าวถึงการบันทึกแล้ว เรามาให้ความสนใจกับการตรวจสอบกัน การตรวจสอบใน Kubernetes เกี่ยวข้องกับการติดตามเมตริกประสิทธิภาพของคลัสเตอร์ โหนด พ็อด และคอนเทนเนอร์ของคุณ

เช่นเดียวกับการบันทึก Kubernetes ไม่มีโซลูชันในตัวสำหรับการตรวจสอบ แต่จะเปิดเผยเมตริกต่างๆ ที่สามารถรวบรวมและวิเคราะห์โดยเครื่องมือภายนอก เครื่องมือเหล่านี้สามารถช่วยคุณแสดงภาพข้อมูลประสิทธิภาพ ตั้งค่าการแจ้งเตือนสำหรับปัญหาที่อาจเกิดขึ้น และดำเนินการวางแผนกำลังการผลิตในการทำแอพ

6. เมตริก (Metrics) ใน Kubernetes

เมตริกที่ Kubernetes มอบให้สามารถแบ่งออกเป็นสองประเภท:

  1. เมตริกทรัพยากร : เหล่านี้คือเมตริกการใช้ CPU และหน่วยความจำ สถิติดิสก์ I/O และสถิติการใช้งานเครือข่าย เซิร์ฟเวอร์เมตริกซึ่งเป็นตัวรวมข้อมูลการใช้ทรัพยากรทั่วทั้งคลัสเตอร์มักจะให้ข้อมูลเหล่านี้
  2. เมตริกที่กำหนดเอง : เป็นเมตริกตามอำเภอใจของแอปพลิเคชันของคุณ ซึ่งแสดงผ่านรหัสแอปพลิเคชันหรือเอเจนต์การมอนิเตอร์

7. โพรมีธีอุส (Prometheus) และกราฟานา (Grafana)

Prometheus เป็นระบบตรวจสอบโอเพ่นซอร์สและฐานข้อมูลอนุกรมเวลา โดยจะรวบรวมเมตริกจากเป้าหมายที่กำหนดค่าในช่วงเวลาที่กำหนด ประเมินนิพจน์กฎ และสามารถทริกเกอร์การแจ้งเตือนหากพบว่าเงื่อนไขบางอย่างเป็นจริง

ในทางกลับกัน Grafana เป็นแพลตฟอร์มโอเพ่นซอร์สสำหรับการสร้างภาพและการวิเคราะห์ ช่วยให้คุณสามารถสอบถาม แสดงภาพ แจ้งเตือน และทำความเข้าใจเมตริกของคุณ Grafana รองรับ Prometheus และเป็นตัวเลือกยอดนิยมสำหรับการตั้งค่าแดชบอร์ด

ต่อไปนี้คือคำแนะนำในการตั้งค่าโดยย่อ:

  1. ติดตั้ง Prometheus : คุณสามารถติดตั้ง Prometheus ในคลัสเตอร์ Kubernetes โดยใช้ Helm เมื่อติดตั้งแล้ว ให้กำหนดค่า Prometheus เพื่อขูดเมตริกจากแอปพลิเคชันของคุณ
  2. ติดตั้ง Grafana : ติดตั้ง Grafana ในคลัสเตอร์ Kubernetes อีกครั้งโดยใช้ Helm
  3. เพิ่ม Prometheus เป็นแหล่งข้อมูล : ใน Grafana UI ให้เพิ่ม Prometheus เป็นแหล่งข้อมูล
  4. ตั้งค่าแดชบอร์ด : Grafana ให้คุณสร้างแดชบอร์ดแบบกำหนดเอง หรือคุณสามารถนำเข้าแดชบอร์ดที่สร้างไว้ล่วงหน้าที่แบ่งปันโดยชุมชน
  5. ตั้งค่าการแจ้งเตือน : Grafana รองรับการสร้างการแจ้งเตือนตามเมตริกและส่งการแจ้งเตือนเมื่อตรงตามเงื่อนไขบางประการ

Prometheus ยังมี Alertmanager ซึ่งเป็นส่วนประกอบที่จัดการการแจ้งเตือนที่ส่งโดยแอปพลิเคชันไคลเอนต์ โดยเฉพาะเซิร์ฟเวอร์ จะดูแลการขจัดข้อมูลซ้ำ จัดกลุ่ม และกำหนดเส้นทางไปยังเครื่องรับที่ถูกต้อง

8. การตรวจสุขภาพ (Health Checks) ใน Kubernetes

นอกเหนือจากการบันทึกและการตรวจสอบแล้ว Kubernetes ยังมีโพรบสองประเภทเพื่อตรวจสอบความสมบูรณ์ของพ็อด ได้แก่ โพรบความพร้อมและความมีชีวิต

โพรบความพร้อมใช้เพื่อระบุว่าคอนเทนเนอร์พร้อมให้บริการตามคำขอหรือไม่ หากการตรวจสอบความพร้อมล้มเหลว ตัวควบคุมปลายทางจะลบที่อยู่ IP ของพ็อดออกจากจุดสิ้นสุดของบริการทั้งหมดที่ตรงกับพ็อด สถานะความพร้อมเริ่มต้นก่อนการหน่วงเวลาเริ่มต้นคือ ล้มเหลว

Liveness probesใช้เพื่อทราบเมื่อต้องรีสตาร์ทคอนเทนเนอร์ หากการตรวจสอบความคงอยู่ล้มเหลว kubelet จะฆ่าคอนเทนเนอร์ และคอนเทนเนอร์จะอยู่ภายใต้นโยบายการรีสตาร์ท

คุณสามารถกำหนดโพรบในข้อมูลจำเพาะของ Pod ของคุณสำหรับแต่ละคอนเทนเนอร์:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

ในตัวอย่างนี้ Kubernetes จะเริ่มส่งคำขอ HTTP ไปยัง http://:8080/healthz คอนเทนเนอร์ liveness 3 วินาทีหลังจากคอนเทนเนอร์เริ่มทำงาน หากโพรบล้มเหลว Kubernetes จะรีสตาร์ทคอนเทนเนอร์


การบันทึก การตรวจสอบ และการตรวจสอบความสมบูรณ์เป็นรากฐานที่สำคัญของแอปพลิเคชันที่เชื่อถือได้และยืดหยุ่นบน Kubernetes พวกเขาให้ข้อมูลเชิงลึกที่จำเป็นในการทำความเข้าใจพฤติกรรมของแอปพลิเคชันและเพื่อแก้ไขปัญหาและแก้ไขปัญหาได้อย่างทันท่วงที

แม้ว่า Kubernetes จะไม่มีเครื่องมือในตัวสำหรับการบันทึกและการตรวจสอบ แต่ก็มีกลไกและ API ที่อนุญาตให้รวมเข้ากับเครื่องมือโอเพ่นซอร์สและเชิงพาณิชย์ที่มีประสิทธิภาพ การจับคู่ Kubernetes กับระบบต่างๆ เช่น Elasticsearch, Fluentd, Kibana, Prometheus และ Grafana ช่วยให้นักพัฒนาและผู้ดูแลระบบได้รับข้อมูลเชิงลึกเกี่ยวกับระบบของตน ช่วยให้มั่นใจได้ว่าระบบจะทำงานได้อย่างราบรื่นและมีประสิทธิภาพ

การทำความเข้าใจและนำเทคนิคเหล่านี้ไปใช้ คุณกำลังทำแอพบน Kubernetes ที่ไม่เพียงแข็งแกร่งและปรับขนาดได้ แต่ยังสังเกตได้และบำรุงรักษาได้ด้วย ความรู้ของสิ่งที่เกิดขึ้นภายในคลัสเตอร์และแอปพลิเคชันของคุณ ณ ช่วงเวลาใดเวลาหนึ่งคือสิ่งที่แยกแอปพลิเคชันที่ทำงานได้ดีและเชื่อถือได้ออกจากระเบิดเวลาที่รอการหยุดทำงานครั้งต่อไป อย่าลืมสละเวลาและความพยายามในการตั้งค่าการบันทึก การตรวจสอบ และการตรวจสอบสถานะอย่างละเอียดสำหรับแอปพลิเคชัน Kubernetes ซึ่งเป็นการลงทุนที่สำคัญสำหรับความสำเร็จในระยะยาวของการทำแอพของคุณ


Kubernetes คืออะไร

Kubernetes คือ ตอนที่ 7 : RBAC และ ความปลอดภัย
Kubernetes คือ ตอนที่ 9 : แนวทางปฏิบัติที่ดีที่สุดของ Kubernetes