แผนการเรียนรู้
/

สัปดาห์ที่ 12: Monitoring & Logging ใน DevOps

การสร้าง "ตาและหู" ให้กับระบบ เพื่อการเฝ้าระวัง การวิเคราะห์ และการแก้ไขปัญหาในระดับ Production

Agenda วันนี้

  • Day-2 Operations: ความสำคัญของการเฝ้าระวังและบันทึกข้อมูล
  • Observability: เสาหลักทั้ง 3 (Metrics, Logs, Traces)
  • Metrics & Visualization: เจาะลึก Prometheus และ Grafana
  • Log Aggregation: การจัดการ Log รวมศูนย์ด้วย ELK Stack
  • Alerting: การตั้งค่าการแจ้งเตือนและการจัดการวิกฤต
DevOps Course: Week 12

ทบทวนสัปดาห์ที่ 11 (Recap)

ในสัปดาห์ที่ผ่านมา เราเรียนรู้การจัดการ Workloads บน Kubernetes ไปแล้ว

Deployments

ใช้ควบคุมการ Rollout และ Rollback อย่างปลอดภัย

HPA

การสเกลจำนวน Pod อัตโนมัติตามโหลดที่เข้ามา

Ingress

ด่านหน้ารับ Traffic ระดับ Layer 7 เข้าสู่ Cluster

ConfigMaps

แยกตัวแปรและตั้งค่าต่างๆ ออกจาก Code หลัก

Day-2 Operations คืออะไร?

เมื่อคุณ Deploy ระบบขึ้น Production แล้ว (Day 1) งานของ DevOps ยังไม่จบ!

เราเข้าสู่ Application Performance Management (APM) ซึ่งเป็นเสาหลักที่สามของ DevOps Engineering (ถัดจาก Pull Request Automation และ Deployment Automation)

  • คอยตรวจสอบให้แน่ใจว่าระบบยังทำงานได้ดี
  • ตรวจจับข้อผิดพลาดก่อนที่ผู้ใช้จะบ่นบน Twitter
  • ช่วยให้เราสามารถ Rollback หรือปรับสเกลระบบได้ทันท่วงทีเมื่อมีปัญหา

ความสำคัญของ Monitoring & Logging

การทำงานแบบ "ตาบอด"

แม้เราจะมี Code ที่ดีที่สุด แต่ Operational Errors เกิดขึ้นได้เสมอ! ตัวอย่างเช่น มีผู้ใช้พิมพ์ช่องว่าง (Whitespace) เยอะๆ ต่อท้ายโพสต์ จนทำให้ Stack Overflow ล่มมาแล้ว

การมี "ตาและหู"

Monitoring & Logging จะช่วยตอบคำถามว่า: "เกิดอะไรขึ้น?", "ระบบช้าที่ตรงไหน?", "ทำไมผู้ใช้ถึงเจอ Error?" และแจ้งเตือนทีม Engineer ทันทีเพื่อแก้ไข

Monitoring vs Observability

Monitoring (การเฝ้าระวัง)

"ระบบทำงานอยู่หรือไม่? ทรัพยากรใกล้เต็มหรือยัง?"

เน้นการดู Dashboard อาศัยการตั้งค่าล่วงหน้าเพื่อเฝ้าระวังปัญหาที่เรา *คาดว่าจะเกิด* (Known Unknowns)

Observability (ความสามารถในการสังเกต)

"ทำไมระบบถึงทำงานผิดปกติ และต้นตอมาจากไหน?"

เน้นการใช้ข้อมูลภายในเพื่อทำความเข้าใจและไขปัญหาที่เรา *ไม่เคยคาดคิดมาก่อน* (Unknown Unknowns)

3 Pillars of Observability

เสาหลัก 3 ประการที่ทำให้เราสามารถวิเคราะห์ระบบได้อย่างสมบูรณ์

📈

Metrics

ตัวชี้วัดเชิงปริมาณ (ตัวเลข)

📄

Logs

บันทึกเหตุการณ์ (ข้อความ)

🔗

Traces

การตามรอยระหว่าง Services

1. Metrics (ตัวชี้วัด) 📈

Metrics คือจุดข้อมูลที่เป็น "ตัวเลข" ที่วัดได้ในช่วงเวลาต่างๆ (Time Series Data) เพื่อประเมินสุขภาพของระบบ

การเก็บ Metrics ใช้พื้นที่จัดเก็บน้อยมากเมื่อเทียบกับ Logs เพราะเก็บแค่จุดเวลาและตัวเลข

  • Resource Metrics: CPU, Memory, Disk I/O, Network Throughput
  • Application Metrics: จำนวน Request/วินาที, เวลาในการตอบสนอง (Latency), อัตรา Error
  • Business Metrics: จำนวนผู้ใช้งานที่กำลัง Login, รายได้ต่อชั่วโมง

* เกร็ดความรู้: Netflix ต้องเก็บ Metrics แบบ Time Series ถึง 2.5 พันล้านรายการ เพื่อดูแลสุขภาพของระบบระดับโลก!

วิเคราะห์ Metrics อย่างไร? (Quartile Analysis)

บางครั้งค่า "เฉลี่ย" (Average) ก็หลอกตาเรา

สมมติว่าเว็บไซต์โหลดเสร็จเฉลี่ยที่ 1 วินาที ดูเหมือนจะดีใช่ไหม?

  • แต่ผู้ใช้ที่ "ไม่ได้ล็อกอิน" (99%) โหลดเพจใน 0.5 วินาที
  • ผู้ใช้ที่ "ล็อกอินแล้ว" (1%) กลับต้องรอถึง 5 วินาที!

วิธีแก้: ใช้ Quartile / Percentile Analysis

เรามักจะวัดค่า P95 หรือ P99 (ผู้ใช้ที่ช้าที่สุด 1% หรือ 5% ใช้เวลาเท่าไหร่) ทำให้เราเห็นปัญหาของกลุ่มผู้ใช้ส่วนน้อยได้อย่างชัดเจน

2. Logs (บันทึกข้อความ) 📄

ในขณะที่ Metrics บอกเราว่าเกิดปัญหา (เป็นตัวเลข) Logs คือสิ่งที่จะบอกเราว่า "ปัญหาเกิดจากอะไร" (เป็นข้อความ)

  • คือการบันทึกสถานะหรือเหตุการณ์ ณ จุดเวลาหนึ่งๆ
  • มักจะระบุ: Timestamp (เวลา), Severity (INFO, WARN, ERROR), Message (ข้อความ)
  • ใช้สำหรับตอบคำถามยากๆ เช่น "ผู้ใช้คนนี้ (IP นี้) ส่งข้อมูลอะไรเข้ามา ทำให้ระบบพัง?"

*ปัญหา: Logs มีปริมาณมหาศาลมาก ต้องมีระบบค้นหาที่ดี (เช่น ELK Stack)

3. Traces (การตามรอย) 🔗

เมื่อระบบเปลี่ยนเป็น Microservices การใช้แค่ Logs อาจไม่พอ

สมมติการค้นหาใน Google 1 ครั้ง อาจวิ่งผ่าน 5 Services ถ้าผลลัพธ์ช้า เราจะรู้ได้ยังไงว่า Service ไหนเป็นตัวถ่วง?

  • Distributed Tracing: สร้าง Unique ID สำหรับทุก Request
  • ID นี้จะถูกส่งต่อไปยังทุกๆ Service ที่เกี่ยวข้อง (Front-end > Auth > Backend > DB)
  • ทำให้เราสามารถวาด "แผนภาพเวลา" ได้ว่า 1 Request ใช้เวลาอยู่ใน Service ใดบ้าง

เครื่องมือยอดนิยมในวงการ (The Tooling Landscape)

Metrics

Prometheus, DataDog, AWS CloudWatch

Logs

ELK Stack (Elasticsearch, Logstash, Kibana), Fluentd, Loki

Visualization

Grafana, Kibana

ในวิชานี้ เราจะเน้นไปที่ชุด Prometheus + Grafana (สำหรับ Metrics)
และ ELK Stack (สำหรับ Logs)

🔥

Prometheus คืออะไร?

Prometheus เป็นระบบ Monitoring และ Time Series Database แบบ Open-source (ถูกพัฒนาขึ้นครั้งแรกที่ SoundCloud) ปัจจุบันเป็นมาตรฐานหลัก (De-facto) สำหรับ Kubernetes

จุดเด่น:

  • จัดเก็บข้อมูลในรูปแบบ Time Series (ข้อมูลตัวเลขควบคู่กับ Timestamp)
  • สามารถสแกนค้นหา Target (Service Discovery) ได้อัตโนมัติ
  • รองรับการแจ้งเตือน (Alerting) ผ่าน Alertmanager

สถาปัตยกรรมแบบ Pull Model

จุดแตกต่างสำคัญ: Prometheus ใช้แนวคิด "Pull" (ไปดึงมา) ไม่ใช่ "Push" (รอรับข้อมูล)

Target (เช่น Node, Web App)

Expose ข้อมูลที่ /metrics (เช่น Node Exporter)

⬅️ ดึงข้อมูล (Scrape)

Prometheus Server

ตั้งเวลาดึงข้อมูล (เช่น ทุก 15 วินาที)

ข้อดีของ Pull Model:

  • รู้ได้ทันทีว่า Service ตาย เพราะ Prometheus จะดึงข้อมูลไม่ได้ (Connection Refused)
  • Application ไม่ต้องรู้เลยว่ามีใครมา Monitor ตัวมันอยู่ ทำให้โค้ดไม่รก

PromQL (Prometheus Query Language)

Prometheus มาพร้อมกับภาษาเฉพาะ (PromQL) สำหรับดึงและคำนวณข้อมูล

# ดึงข้อมูล CPU Usage ของ Node ทั้งหมด

node_cpu_seconds_total


# คำนวณหา อัตราการใช้ CPU ในช่วง 5 นาที (Rate)

rate(node_cpu_seconds_total[5m])


# กรองเฉพาะ HTTP 500 Errors จาก Service ชื่อ "backend"

http_requests_total{status="500", job="backend"}

คำสั่งเหล่านี้จะถูกส่งไปยัง Time Series Database (TSDB) ภายใน Prometheus เพื่อวิเคราะห์

Grafana (Visualization) 📊

Prometheus เก่งเรื่องการเก็บและคำนวณ แต่ UI ไม่สวย Grafana จึงเข้ามาอุดช่องโหว่นี้

  • เป็นเครื่องมือสำหรับสร้าง Dashboard ระดับโลก
  • รองรับ Data Sources หลากหลาย (ไม่ได้มีแค่ Prometheus แต่ต่อกับ MySQL, PostgreSQL, Elasticsearch ได้ด้วย)
  • มี Template Dashboard สำเร็จรูป (Community Dashboards) โหลดมาใช้งานได้ทันที

การทำงานร่วมกัน: Prometheus + Grafana

Grafana จะทำหน้าที่เป็น "หน้าต่าง" ดึงข้อมูลจาก Prometheus มาวาดกราฟ

App / Node

Expose Metrics

➡️

Prometheus

Scrape & Store TSDB

➡️

Grafana

Query PromQL & Plot Graphs

*ในขั้นตอน Lab เราจะทำการเพิ่ม Prometheus เป็น Data Source ในหน้า UI ของ Grafana และสร้าง Dashboard สำหรับดูสถานะ Server (Node Exporter)

ทำไมต้องทำ Log Aggregation?

ยุค Server ตัวเดียว

เมื่อก่อนเราแค่ SSH เข้าไปใน Server พิมพ์ tail -f /var/log/syslog ก็แก้ปัญหาได้แล้ว

ยุค Microservices & K8s

มี Pod 50 ตัว รันกระจายกัน ถ้ามีคนบอกว่า "ล็อกอินไม่ได้" เราจะ SSH เข้าไปหา log ใน Pod ตัวไหน? การค้นหาแบบ Manual เป็นไปไม่ได้อีกต่อไป

ELK Stack คืออะไร? 🌲

ELK Stack เป็นกลุ่มโปรแกรม Open-source ยอดนิยมสำหรับทำ Centralized Logging (รวบรวม Logs ไว้ที่เดียว)

  • E - Elasticsearch: ฐานข้อมูล (Search Engine)
  • L - Logstash: ตัวรวบรวมและแปลงข้อมูล (Data Processor)
  • K - Kibana: หน้าจอแสดงผลและค้นหาข้อมูล (Dashboard)

*ผู้ใช้จะส่ง Log จากทุกระบบมาที่ Logstash -> แปลงเสร็จส่งให้ Elasticsearch -> ดูผลผ่าน Kibana

L - Logstash (The Processor)

Log ที่มาจากระบบต่างๆ มักจะเป็น Text ธรรมดาที่อ่านยาก Logstash ทำหน้าที่ สกัด (Parse) ให้เป็นโครงสร้าง (Structured Data)

# ขาเข้า (Raw Text)

192.168.1.1 - - [10/Oct/2026:13:55:36] "GET /api/v1/users HTTP/1.1" 500 45

⬇️ Grok Parsing

# ขาออก (JSON) ที่จะถูกส่งต่อให้ Elasticsearch

{

  "client_ip": "192.168.1.1",

  "timestamp": "2026-10-10T13:55:36Z",

  "path": "/api/v1/users",

  "status": 500

}

E - Elasticsearch (The Storage)

เมื่อข้อมูลถูกแปลงเป็น JSON แล้ว จะถูกนำมาเก็บไว้ที่ Elasticsearch

  • เป็นฐานข้อมูล NoSQL ประเภท Search Engine (สร้างมาจาก Apache Lucene)
  • เก่งมากเรื่องการค้นหาข้อความ (Full-Text Search) อย่างรวดเร็วมหาศาล
  • เก็บข้อมูลเป็น Index (คล้ายๆ Table ใน SQL)

K - Kibana (The Visualization)

หน้ากาก (UI) ที่ใช้เชื่อมต่อกับ Elasticsearch

  • แทนที่คุณจะต้องเขียน Query โค้ดส่งไปหา Database คุณสามารถพิมพ์หาคำว่า "error" AND status:500 บนหน้าจอ Kibana ได้เลย
  • สามารถสร้าง Dashboard สวยๆ เพื่อดูสถิติ (เช่น กราฟแท่งแสดงปริมาณ Error ย้อนหลัง 24 ชม.)
  • คำเตือน: Kibana เก็บข้อมูลสำคัญ ควรตั้งค่า Authentication (เช่นผ่าน Nginx Reverse Proxy หรือ Elastic X-Pack) ไม่ให้ใครเข้าถึงได้อิสระ

Alerting (การแจ้งเตือน) 🚨

มี Dashboard ที่สวยงามไปก็ไร้ประโยชน์ ถ้าไม่มีใครนั่งดูมัน!

หลักการของ Alerting คือการให้ระบบคอมพิวเตอร์เฝ้าดูกราฟแทนเรา เมื่อเงื่อนไขทาง Metrics แตะจุดวิกฤต (Threshold) ให้ทำการปลุก หรือแจ้งเตือน On-call Engineer ทันที

Prometheus Alertmanager

Prometheus มีเครื่องมือแยกที่ชื่อ Alertmanager เพื่อจัดการเรื่องการแจ้งเตือน

# ตัวอย่างการตั้งเงื่อนไข (Alerting Rule)

alert: HighCpuUsage

expr: rate(node_cpu_seconds_total[5m]) > 0.8

for: 5m # ต้องเป็นไปตามเงื่อนไขนาน 5 นาทีถึงจะแจ้ง (ป้องกันการแกว่งชั่วคราว)

labels:

  severity: critical

เมื่อถูก Trigger จะมีการ Routing (ส่งต่อ) ไปยังระบบแจ้งเตือนภายนอก เช่น Slack, Microsoft Teams, Email, PagerDuty หรือ SMS (Twilio)

ข้อควรระวัง: Alert Fatigue

"ความเหนื่อยล้าจากการแจ้งเตือน"

หากเราตั้งค่าให้ระบบแจ้งเตือนทุกครั้งที่มี CPU พุ่งนิดหน่อย หรือมี Error เล็กๆ น้อยๆ โทรศัพท์ของ Engineer จะดังทั้งวันทั้งคืน

  • สุดท้าย Engineer จะเพิกเฉย (Ignore) หรือ ปิดเสียง (Mute) การแจ้งเตือนนั้น
  • เมื่อระบบล่มจริงๆ (Critical) ก็จะไม่มีใครเข้าไปแก้ไข!

Best Practice:

แจ้งเตือนเฉพาะเมื่อ User Impact เกิดขึ้นแล้วเท่านั้น (เช่น ผู้ใช้เข้าเว็บไม่ได้เลย) และควรรวม Alert ที่เกิดพร้อมกันเป็นก้อนเดียว (Grouping)

สรุปบทเรียน (Summary)

  • Monitoring & Logging คือตาและหูของ DevOps ใน Day-2 Operations เพื่อรักษาสุขภาพของระบบ
  • เราประเมินระบบผ่าน 3 Pillars of Observability: Metrics, Logs และ Traces
  • ใช้ Prometheus + Grafana สำหรับดึงข้อมูลตัวเลข (Metrics) มาแสดงผลบน Dashboard
  • ใช้ ELK Stack (Elasticsearch, Logstash, Kibana) เพื่อรวมศูนย์การค้นหา Logs ที่กระจัดกระจาย
  • ตั้งค่า Alerting ที่แม่นยำ แจ้งเตือนเมื่อวิกฤต และระวังการเกิด Alert Fatigue

เตรียมตัวทำ Lab! 🔬

ภารกิจปฏิบัติการสัปดาห์ที่ 12:

ติดตั้ง "หอคอยเฝ้าระวัง" ให้กับ Kubernetes Cluster ของเรา

  • ✅ ติดตั้ง Prometheus และ Grafana ลงบน Local Cluster (เช่น Minikube)
  • ✅ ตั้งค่า Prometheus ให้เชื่อมต่อและดึงข้อมูล Metrics ของระบบ (Node Metrics / cAdvisor)
  • ✅ สร้าง Grafana Dashboard แรกของคุณ เพื่อแสดงกราฟ CPU และ Memory ของเครื่อง
  • ✅ ทดลองสร้าง Alert ง่ายๆ ในระบบ
ทบทวนคำสั่ง kubectl และการทำ Port Forwarding มาให้พร้อม แล้วเจอกันใน Lab!

Lab: Monitoring & Observability 📊

สร้างระบบเฝ้าระวัง (Monitoring Stack) ของคุณเองด้วย Prometheus, Grafana และ cAdvisor

🎯 เป้าหมายของ Lab

  • ✅ ติดตั้ง Prometheus และ Grafana ด้วย Docker Compose
  • ✅ รัน cAdvisor เพื่อเป็น Exporter สำหรับดึงข้อมูล Metrics ของ Docker Containers
  • ✅ ตั้งค่า Prometheus (prometheus.yml) ให้ทำการ Scrape ข้อมูลจาก Node
  • ✅ เชื่อมต่อ Grafana กับ Prometheus และสร้าง Dashboard พื้นฐาน

Step 1: เตรียมพื้นที่โปรเจกต์ (Workspace)

สร้างโฟลเดอร์สำหรับเก็บไฟล์ Configuration ของ Monitoring Stack

# 1. สร้างโฟลเดอร์ใหม่และเข้าไปข้างใน

$ mkdir monitoring-stack && cd monitoring-stack


# 2. สร้างไฟล์เปล่าเตรียมไว้สำหรับ Docker Compose และ Prometheus

$ touch docker-compose.yml prometheus.yml


# 3. ตรวจสอบว่าไฟล์ถูกสร้างเรียบร้อยแล้ว

$ ls -l

-rw-r--r-- 1 user group 0 Oct 24 10:00 docker-compose.yml

-rw-r--r-- 1 user group 0 Oct 24 10:00 prometheus.yml

Step 2: เขียนไฟล์ prometheus.yml

ตั้งค่าให้ Prometheus ไปดึง (Scrape) ข้อมูลจากตัวเอง และจาก cAdvisor

# แก้ไขไฟล์ prometheus.yml

$ nano prometheus.yml


global:

  scrape_interval: 15s # ดึงข้อมูลทุกๆ 15 วินาที


scrape_configs:

  # 1. ให้ Prometheus มอนิเตอร์ตัวเอง

  - job_name: 'prometheus'

    static_configs:

      - targets: ['localhost:9090']


  # 2. ให้ดึงข้อมูลจาก cAdvisor ที่จะรันในพอร์ต 8080

  - job_name: 'cadvisor'

    static_configs:

      - targets: ['cadvisor:8080'] # ใช้ชื่อ Service จาก Docker Compose

Step 3: เขียนไฟล์ Docker Compose

ประกอบร่าง 3 บริการ (Prometheus, Grafana, cAdvisor) ให้อยู่ใน Stack เดียวกัน

version: '3.8'

services:

  prometheus:

    image: prom/prometheus:latest

    volumes:

      - ./prometheus.yml:/etc/prometheus/prometheus.yml # Mount ไฟล์ Config เข้าไป

    ports:

      - "9090:9090"


  grafana:

    image: grafana/grafana:latest

    ports:

      - "3000:3000"

    depends_on:

      - prometheus


  cadvisor: # เครื่องมือดึง Metrics ของ Docker

    image: gcr.io/cadvisor/cadvisor:latest

    ports:

      - "8080:8080"

    volumes:

      - /:/rootfs:ro

      - /var/run:/var/run:rw

      - /sys:/sys:ro

      - /var/lib/docker/:/var/lib/docker:ro

Step 4: รันระบบและตรวจสอบสถานะ

ใช้คำสั่งเพื่อรันทั้ง Stack ขึ้นมาแบบ Background

$ docker-compose up -d

Creating network "monitoring-stack_default" with the default driver

Creating monitoring-stack_cadvisor_1 ... done

Creating monitoring-stack_prometheus_1 ... done

Creating monitoring-stack_grafana_1 ... done


# ตรวจสอบว่าคอนเทนเนอร์รันอยู่ครบ 3 ตัวหรือไม่

$ docker-compose ps

NAME COMMAND STATE PORTS monitoring-stack_cadvisor_1 /usr/bin/cadvisor -log Up 0.0.0.0:8080->8080/tcp monitoring-stack_grafana_1 /run.sh Up 0.0.0.0:3000->3000/tcp monitoring-stack_prometheus_1 /bin/prometheus --conf Up 0.0.0.0:9090->9090/tcp

Step 5: ยืนยันการเชื่อมต่อใน Prometheus UI

ต้องแน่ใจว่า Prometheus สามารถดึงข้อมูลจาก cAdvisor ได้สำเร็จ

เข้าถึง Prometheus:

  1. เปิดเบราว์เซอร์ไปที่ http://localhost:9090
  2. คลิกที่เมนู Status ด้านบน
  3. เลือก Targets
  4. ตรวจสอบให้แน่ใจว่า Endpoint ของทั้ง prometheus และ cadvisor มีสถานะเป็น UP
Targets Status
cadvisor (1/1 up)
UP http://cadvisor:8080/metrics
prometheus (1/1 up)
UP http://localhost:9090/metrics

Step 6: เข้าสู่ระบบ Grafana และเพิ่ม Data Source

1. เข้าสู่ระบบ (Login)

เปิด http://localhost:3000 แล้วล็อกอินด้วย Username: admin / Password: admin (ระบบจะบังคับให้เปลี่ยนรหัสผ่านใหม่)

2. เชื่อมต่อฐานข้อมูล (Add Data Source)

  • ไปที่เมนู Connections > Data sources (รูปเฟืองซ้ายมือ)
  • คลิก Add data source และเลือก Prometheus
  • ในช่อง Prometheus server URL ให้พิมพ์ http://prometheus:9090
    (ต้องใช้ชื่อ Service ตาม Docker Compose ไม่ใช่ localhost นะ!)
  • เลื่อนลงไปล่างสุดแล้วคลิก Save & test

✅ ควรจะขึ้นกล่องสีเขียวว่า "Data source is working"

Step 7: สร้าง Dashboard ดูการใช้ CPU ของ Container

  1. คลิก + (Create) ที่เมนูซ้ายมือ เลือก Dashboard
  2. คลิก Add visualization
  3. เลือก Data source เป็น Prometheus
  4. ในช่อง Metrics browser (PromQL) ให้ใส่ Code ทางขวามือ
  5. คลิก Run queries (หรือกด Shift+Enter) กราฟจะแสดงขึ้นมาทันที!
  6. ตั้งชื่อ Panel ว่า "Container CPU Usage" แล้วกด Save

# คำสั่ง PromQL คำนวณ CPU Usage (%) ของแต่ละ Container

sum(rate(container_cpu_usage_seconds_total{name!=""}[1m])) by (name) * 100

💡 Pro Tip (ทำ Dashboard อัตโนมัติ):

แทนที่จะสร้างเองทีละกราฟ คุณสามารถไปที่ Dashboards > Import แล้วใส่ ID 893 (หรือ 14282) เพื่อโหลด Dashboard ของ Docker Container (cAdvisor) แบบสำเร็จรูปสวยๆ จาก Grafana.com ได้เลย!

🎉

Lab Complete! การส่งงาน

สิ่งที่ต้องส่ง (Submission):

  • Source Code (.zip):
    • ไฟล์ docker-compose.yml
    • ไฟล์ prometheus.yml
  • Screenshots (รวมเป็น PDF):
    • ภาพหน้า Targets ใน Prometheus (แสดงสถานะ UP ของ cadvisor และ prometheus)
    • ภาพหน้า Data sources ใน Grafana (แสดงกล่องเขียว Data source is working)
    • ภาพ Grafana Dashboard ที่สร้างขึ้น (ที่มีกราฟแสดง CPU หรือนำเข้าจาก ID 893 สำเร็จ)
"การที่คุณเห็นกราฟข้อมูลแปลว่า คุณได้มอบ 'ดวงตา' ให้กับระบบ DevOps ของคุณเรียบร้อยแล้ว!"