Skip to content

14.11 Known recurring issues + scorecard

บทนี้รวบรวมปัญหาที่เกิดซ้ำในระบบ VTRC, แนวทางการป้องกัน, และ scorecard สรุปความพร้อมของทีมปฏิบัติการ

ปัญหาที่เกิดซ้ำ (recurring issues)

ตารางนี้เก็บปัญหาที่พบบ่อยจนเป็น pattern — ควรอัปเดตทุกครั้งที่เกิด incident ใหม่

#ปัญหาความถี่root causemitigation ระยะสั้นprevention ระยะยาว
R-1LDAP bind ล้มเหลวเป็นบางครั้งสัปดาห์ละครั้งnetwork ระหว่าง GCP กับ on-prem ไม่เสถียรrestart cu-central-apiVPN ที่เสถียรกว่า, retry logic
R-2PDF payslip ไม่ออกเดือนละครั้ง (ตอนออกเงินเดือน)qpdf + อักขระพิเศษใน passwordrestart replicaescape shell arg ที่ถูกต้อง
R-3Service OOM บาง replicaไม่แน่นอนmemory leak ใน Noderestartprofile memory, แก้ leak
R-4disk ใกล้เต็มเดือนละครั้งlog ไม่ rotateลบ log เก่าlogrotate + alert
R-5SSL cert ใกล้หมดอายุปีละครั้งต่อ certไม่มี auto-renewต่ออายุ manualLet's Encrypt + certbot
R-6deploy แล้ว service crashทุกครั้งที่ deployenv var ขาด, image tag ผิดrollbackautomated test ก่อน deploy
R-7fund-rate / cu-central cron ไม่รันเดือนละครั้งAPP_NO=1 ตาย (gate เฉพาะ job เหล่านี้; delegate/stat รันทุก replica)restart APP_NO=1distributed lock, monitoring
R-8Database connection pool เต็มไม่แน่นอนquery ค้างนานkill processเพิ่ม index, ลด pool size
R-9GraphQL query ช้าสัปดาห์ละครั้งN+1 query, ไม่มี indexrestartแก้ query, เพิ่ม index
R-10ผู้ใช้ไม่ได้รับ OTPสัปดาห์ละครั้งSMS gateway เงียบtrigger OTP manualเปลี่ยน gateway, retry

ปัญหาด้านการดำเนินงาน

OPS-1 · ไม่มี monitoring

ปัจจุบันไม่มี tool ตรวจสอบสถานะระบบอัตโนมัติ — ทุกอย่างตรวจด้วยมือ

ผลกระทบ: ตรวจพบปัญหาช้า, ผู้ใช้แจ้งก่อนทีมงานรู้

ผลกระทบต่อ operations: ทีมต้องนั่ง monitor manual, ตอบ react แทน proactive

OPS-2 · ไม่มี alerting

ไม่มีระบบแจ้งเตือนเมื่อ service down, disk เต็ม, cert จะหมดอายุ

ผลกระทบ: ปัญหาเล็กกลายเป็นใหญ่ก่อนจะสังเกตเห็น

OPS-3 · deploy manual

deploy ทุก service ทำด้วยมือ — ความเสี่ยง human error สูง

OPS-4 · ไม่มี staging ที่เท่า production

UAT ใช้ dataset ที่ต่างจาก production — บางบักตรวจไม่เจอใน UAT

OPS-5 · runbook ไม่สมบูรณ์

Volume นี้พยายามเติมช่องว่าง แต่ยังต้องการ:

  • ชื่อและช่องทางติดต่อผู้ประสานงานจริง
  • host path และ IP ที่แท้จริง
  • credentials ที่จัดการในตัวจัดการรหัสผ่าน (ไม่ใช่ในเอกสาร)

OPS-6 · ทีมปฏิบัติการเล็ก

จากการสังเกตจาก structure ของระบบ ทีมปฏิบัติการดูเล็ก — การ on-call อาจตกอยู่กับคนไม่กี่คน

สิ่งที่ทีมควรลงทุนทำ (ranked by ROI)

ลำดับสิ่งที่ต้องทำROIeffort
1ตั้ง uptime monitoring (UptimeRobot, Pingdom)สูงมากต่ำ — 1 ชม.
2ตั้ง alert เมื่อ disk เต็มสูงมากต่ำ — 1 ชม.
3ตั้ง alert เมื่อ cert จะหมดอายุสูงมากต่ำ — 2 ชม.
4ทำ logrotate ทุก hostสูงต่ำ — 2 ชม.
5สร้าง backup script อัตโนมัติสูงมากปานกลาง — 1 วัน
6ทดสอบ restore เดือนละครั้งสูงมากปานกลาง — 4 ชม./เดือน
7เพิ่ม health endpoint ในทุก serviceสูงปานกลาง — 1 วัน
8สร้าง deploy script แทน manualสูงปานกลาง — 2 วัน
9ตั้ง centralized logging (Loki, ELK)สูงสูง — 1 สัปดาห์
10เปลี่ยนไป Let's Encrypt + certbotสูงปานกลาง — 1 วัน
11สร้าง CI/CD สำหรับทุก repoสูงสูง — 1 สัปดาห์
12สร้าง DR siteสูงมากสูงมาก — 1 เดือน

Scorecard — ความพร้อมของทีมปฏิบัติการ

หมวดเกณฑ์สถานะ VTRCคะแนน
Monitoringมี uptime monitor 24/7ไม่มี0/10
มี error rate alertไม่มี0/10
มี disk/cpu/memory alertไม่มี0/10
มี slow query alertไม่มี0/10
Backupทำ backup อัตโนมัติทุกวันไม่แน่ใจ3/10
เก็บ off-siteไม่แน่ใจ2/10
ทดสอบ restore เดือนละครั้งไม่มี0/10
มี RTO/RPO ที่กำหนดไม่มี0/10
Deploydeploy อัตโนมัติผ่าน CI/CD2/5 repos4/10
มี staging ที่เท่า productionไม่มี2/10
มี rollback ที่ทดสอบแล้วไม่แน่ใจ3/10
มี deploy runbookVolume นี้6/10
Loggingมี centralized loggingไม่มี0/10
log เก็บอย่างน้อย 90 วันไม่แน่ใจ3/10
ไม่มี PII ใน logมี PII2/10
log format consistentไม่ consistent3/10
Securitycert ไม่เคยหมดอายุโดยไม่รู้ต้อง monitor manual4/10
ไม่มี default passwordมี JWT_SECRET='secret'3/10
port managementphpMyAdmin เปิดสาธารณะ3/10
DRมี DR runbookVolume นี้เริ่มต้น5/10
มี DR siteไม่มี0/10
ทดสอบ DR ปีละครั้งไม่เคย0/10
Documentationrunbook สมบูรณ์Volume นี้6/10
architecture docVolume 28/10
inventory ปัจจุบันVolume 13.16/10

คะแนนรวม: 67/170 (39%) — ต่ำกว่ามาตรฐานอุตสาหกรรม (ควร ≥ 80%)

แผนปรับปรุง 30 วัน

สิ่งที่ทำได้ใน 30 วันแรก โดยใช้ทรัพยากรน้อย:

สัปดาห์ที่ 1 — มองเห็นระบบ

  • [ ] ตั้ง UptimeRobot หรือ Pingdom สำหรับทุก domain
  • [ ] ตั้ง disk alert ที่ 80% บนทุก host
  • [ ] ตรวจ SSL cert expiry ของทุก domain และบันทึก
  • [ ] เขียน inventory ของ host และ IP จริง

สัปดาห์ที่ 2 — สำรองข้อมูล

  • [ ] สร้าง backup script ตามบท 13.10
  • [ ] ตั้ง cron ให้รันทุกคืน
  • [ ] เก็บ backup ลง GCS bucket
  • [ ] ทดสอบ restore database

สัปดาห์ที่ 3 — ลดความเสี่ยงด่วน

  • [ ] เปลี่ยน JWT_SECRET จาก 'secret' เป็นค่าจริง
  • [ ] จำกัด phpMyAdmin ให้เข้าได้เฉพาะบาง IP
  • [ ] ตั้ง logrotate ทุก host
  • [ ] ตั้ง cert expiry alert (30 วันล่วงหน้า)

สัปดาห์ที่ 4 — ทำให้ deploy ปลอดภัยขึ้น

  • [ ] เขียน deploy script สำหรับ vtrc-api
  • [ ] ทดสอบ rollback ใน UAT
  • [ ] เอกสาร commit + tag ก่อน deploy
  • [ ] เริ่มวางแผน CI/CD สำหรับ repo อื่น

แผนระยะยาว (90 วัน)

  • [ ] สร้าง centralized logging (Loki + Grafana)
  • [ ] สร้าง APM (Jaeger หรือ Datadog)
  • [ ] เพิ่ม health endpoint ในทุก service
  • [ ] ย้ายไป Let's Encrypt สำหรับ domain ที่เป็น public
  • [ ] สร้าง CI/CD pipeline สำหรับทุก repo
  • [ ] เลือกและทดสอบ DR site

รายละเอียดเพิ่มเติมอยู่ใน Volume 15 (Modernization Plan)

สรุป Volume 14

Volume นี้เป็นจุดเริ่มต้นของการจัดระเบียบ operations — ไม่ใช่จุดสิ้นสุด

สิ่งที่ผู้อ่านควรนำไปใช้:

  1. bookmark บท 13.1 สำหรับ quick reference
  2. ทดสอบ runbook ใน UAT ก่อนใช้จริงใน production
  3. ปรับปรุง runbook ตามสภาพจริงของทีมและ infrastructure
  4. เริ่มจากสิ่งที่ ROI สูงและ effort ต่ำ — ตามตารางด้านบน
  5. บันทึก incident ทุกครั้งเพื่อเรียนรู้

Volume ถัดไป (Volume 14 · Tech Debt Register) จะลงรายละเอียดของหนี้เทคนิคที่ส่งผลต่อ operations ในระยะยาว