📡 Obs · Zero→Hero
หน้าแรก/🎯 1 · แนวคิดหลัก/SLI / SLO / SLA & Error Budget
📖 บทเรียน⏱ ~15 นาที

SLI / SLO / SLA & Error Budget

จนถึงตอนนี้เรารู้แล้วว่า วัดอะไร คำถามถัดไปคือ "แล้วเท่าไหร่ถึงเรียกว่า ดีพอ?" นี่คือที่มาของ SLI/SLO/SLA — หัวใจของ SRE ที่เปลี่ยน "ความน่าเชื่อถือ" จากความรู้สึก เป็น ตัวเลขที่ตัดสินใจได้

3 ตัวย่อที่ต้องแยกให้ออก

ตัวย่อ ชื่อเต็ม คืออะไร ใครสนใจ
SLI Service Level Indicator ตัวเลขที่วัดได้จริง ว่าบริการดีแค่ไหน วิศวกร
SLO Service Level Objective เป้าหมาย ที่เราตั้งให้ SLI วิศวกร + ทีม
SLA Service Level Agreement สัญญา กับลูกค้า มีบทลงโทษถ้าทำไม่ได้ ลูกค้า + ฝ่ายกฎหมาย

วิธีจำง่ายๆ:

SLI คือสิ่งที่คุณ วัด · SLO คือสิ่งที่คุณ ตั้งเป้า · SLA คือสิ่งที่คุณ สัญญา (แล้วถ้าผิดสัญญาต้องจ่ายเงินคืน)

SLI — ตัววัดจริง

SLI ที่ดีคือ สัดส่วนของเหตุการณ์ที่ "ดี" ต่อเหตุการณ์ทั้งหมด เป็น % ระหว่าง 0–100

SLI = (จำนวน event ที่ดี / จำนวน event ทั้งหมด) × 100%

ตัวอย่าง SLI ยอดนิยม (มักอิงจาก Golden Signals):

  • Availability: (request ที่ตอบ 2xx/3xx) / (request ทั้งหมด) → 99.95%
  • Latency: (request ที่เร็วกว่า 300ms) / (request ทั้งหมด) → 99%
  • Quality/Correctness: (response ที่ข้อมูลถูกต้อง) / (ทั้งหมด)

SLI ที่ดีควรสะท้อน ประสบการณ์ของผู้ใช้ ไม่ใช่ metric ภายในเครื่อง — "CPU 99% ของเวลาต่ำกว่า 80%" ไม่ใช่ SLI ที่ดี เพราะผู้ใช้ไม่สนใจ CPU เขาสนใจว่าเว็บโหลดขึ้นไหมและเร็วไหม

SLO — เป้าหมาย

SLO คือเส้นที่คุณลากว่า "SLI ต้องไม่ต่ำกว่านี้" เช่น:

SLO: availability ≥ 99.9% ต่อ 30 วัน

เลข 9 แต่ละตัวมีความหมายเรื่อง downtime ที่ยอมได้มหาศาล — ตารางนี้ต้องจำ:

SLO (availability) Downtime ต่อเดือน (~30 วัน) Downtime ต่อปี
99% ("two nines") ~7 ชั่วโมง 18 นาที ~3.65 วัน
99.9% ("three nines") ~43 นาที ~8.76 ชั่วโมง
99.95% ~21 นาที ~4.38 ชั่วโมง
99.99% ("four nines") ~4.3 นาที ~52.6 นาที
99.999% ("five nines") ~26 วินาที ~5.26 นาที

อย่าตั้ง SLO ที่ 100% — มัน เป็นไปไม่ได้ และการไล่ตามมันจะทำให้ทีมไม่กล้า deploy อะไรเลย (เพราะทุกการเปลี่ยนแปลงมีความเสี่ยง) SLO ที่ดีคือ "ต่ำพอที่จะยอมให้ล้มเหลวได้บ้าง แต่สูงพอที่ลูกค้าพอใจ"

Error Budget — พระเอกของเรื่อง

นี่คือแนวคิดที่ทรงพลังที่สุด: ถ้า SLO = 99.9% แปลว่าคุณ ได้รับอนุญาตให้พังได้ 0.1% — นั่นคือ error budget

Error Budget = 100% − SLO
             = 100% − 99.9%
             = 0.1%   (≈ 43 นาที/เดือน ที่ "พังได้")

Error budget เปลี่ยนวิธีตัดสินใจของทั้งทีม:

  • ยัง budget เหลือเยอะ? → กล้า deploy feature ใหม่, ทดลอง, ลองของเสี่ยงได้
  • budget ใกล้หมด/หมดแล้ว? → หยุด feature ใหม่, หันมา fix ความเสถียร, freeze การ deploy

Error budget ยุติสงครามคลาสสิกระหว่าง Dev (อยากปล่อยของเร็วๆ) กับ Ops (อยากให้ระบบนิ่ง) — แทนที่จะเถียงกันด้วยความรู้สึก ทั้งคู่ดูตัวเลขเดียวกัน: "budget เหลือเท่าไหร่" ถ้าเหลือก็ปล่อยได้ ถ้าหมดก็เบรก

Burn rate — budget กำลังไหม้เร็วแค่ไหน

Burn rate คือความเร็วที่ error budget ถูกใช้ไป ใช้ตั้ง alert ที่ฉลาดกว่าการ alert ทุก error:

  • burn rate = 1 → ใช้ budget พอดีตามแผน (จะหมดพอดีสิ้นเดือน)
  • burn rate = 10 → ไหม้เร็วกว่าแผน 10 เท่า (จะหมดใน 3 วัน) → alert ด่วน!

เราจะใช้ concept นี้ตอนตั้ง alert ในบทที่ 14

SLA — สัญญาที่มีเงินเป็นเดิมพัน

SLA คือ SLO ที่เขียนเป็นสัญญากับลูกค้า พร้อมบทลงโทษ เช่น "ถ้า uptime ต่ำกว่า 99.9% ในเดือนนั้น เราคืนเงินค่าบริการ 10%"

กฎทอง: ตั้ง SLA ให้ "หลวม" กว่า SLO ภายในเสมอ เช่น SLO ภายใน = 99.95% แต่ SLA ที่สัญญากับลูกค้า = 99.9% — เผื่อ buffer ไว้ ถ้า SLO ภายในเริ่มพลาด คุณจะรู้ตัวและแก้ทันก่อนที่จะผิด SLA (เสียเงิน/เสียชื่อ)

เอาไปใช้จริง: ตัวอย่างครบชุด

สมมติทำ API ร้านค้า:

  • SLI: สัดส่วน request /checkout ที่ตอบ 2xx และเร็วกว่า 500ms
  • SLO: SLI ≥ 99.9% วัดแบบ rolling 30 วัน
  • Error budget: 0.1% ของ request ต่อเดือน
  • SLA (กับลูกค้า enterprise): 99.5% ไม่งั้นลด bill 5%
  • Alert: เมื่อ burn rate สูงจน budget จะหมดใน < 24 ชม.

สรุป

  • SLI = ตัวเลขที่วัด (สัดส่วน event ที่ดี) · SLO = เป้าที่ตั้ง · SLA = สัญญาที่มีบทลงโทษ
  • อย่าตั้ง SLO = 100% — ต้องเผื่อ error budget ไว้เพื่อกล้าพัฒนา
  • Error budget = 100% − SLO ใช้ตัดสินใจว่าจะปล่อยของหรือเบรก
  • SLA ต้องหลวมกว่า SLO ภายในเสมอ
  • Burn rate = ความเร็วที่ budget ไหม้ ใช้ตั้ง alert ที่ฉลาด (บทที่ 14)

บทหน้า เจาะเทคนิค: metric มีกี่ชนิด และกับดัก cardinality ที่ทำให้ระบบ monitoring ล่มเอง