한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › L13 สถาปัตยกรรมเซิร์ฟเวอร์และการดูแลระบบ

log และระบบมอนิเตอร์โหลดเกิน Logging / monitoring overhead

ID สาเหตุ in-monitoring · ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

เมื่อเกิดเหตุขัดข้อง log จะพุ่งขึ้นมาก และเซิร์ฟเวอร์ที่ส่ง log แบบ synchronous จะยิ่งช้าลงเพราะ log

ทำไม เกิด error แล้วปริมาณ log และเมตริกที่ส่งออกพุ่ง → ผลคือ log collector รับไม่ทัน เซิร์ฟเวอร์ที่ส่งแบบ synchronous ต้องรอ → บนหน้าจอ ตอนเกิดเหตุขัดข้อง อาการกระตุกและค้างยิ่งหนักขึ้นเพราะ log

อาการ
กระตุก, ค้าง
ปัจจัย
การหยุดชะงัก
ใครเจอ
ทั้งเซิร์ฟเวอร์
เกิดเมื่อไร
ตอนคนแห่มารวมกัน, สุ่มเป็นครั้งคราว
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา)
งานฝั่งทีมพัฒนาเกม
ส่งแบบ async, ทำ sampling, ทิ้งเมื่อบัฟเฟอร์ล้น, รวม log ของ error เดียวกันแล้วส่งครั้งเดียว
งานฝั่งทีมอินฟรา
เตรียมความจุของ log collector โดยคิดจากปริมาณที่พุ่งตอนเกิดเหตุขัดข้อง, ตั้ง alert เมื่อ log collector มีงานสะสม
บนกราฟ
พุ่งแบบสุ่มเป็นครั้งคราว · ปริมาณ log ที่ส่ง, คิวของ log collector
จุดที่ต้องดู
จำนวนบรรทัดและไบต์ของ log ต่อวินาทีบนเซิร์ฟเวอร์ กับคิวและจำนวนที่ถูกทิ้งของ agent เก็บ log ดูคู่กับเวลาต่อทิก ถ้ามีเธรดที่หยุดอยู่ ใช้ bcc offcputime -p ดูว่ารอที่การเขียนหรือส่ง log หรือไม่
สัญญาณว่าใช่
ช่วงที่ทิกพุ่ง ปริมาณ log พุ่งเป็นหลายสิบเท่าของปกติ และเวลารอของเธรดเกมกระจุกอยู่ที่ call stack ของการเขียนหรือส่ง log
สัญญาณว่าไม่ใช่
ปริมาณ log เท่าปกติ หรือเธรดเกมไม่ได้รอที่ฝั่ง log: log ที่พุ่งเป็นแค่ผลของเหตุขัดข้อง ให้หาสาเหตุที่ทำให้เกิด error แรกแยกต่างหาก
วิธีตรวจ
ใช้เครื่องมือฝั่งอินฟรา (ไม่ต้องใช้โค้ดเกม)

แหล่งอ้างอิง

  1. Logging in C# Microsoft
    เมธอด log ของ .NET เป็นแบบ synchronous ถ้าที่เก็บช้า แนะนำให้เขียนลงที่เก็บที่เร็วก่อนแล้วค่อยย้ายทีหลัง
  2. Asynchronous loggers Apache Software Foundation
    async logging ดูดซับ log ที่พุ่งช่วงสั้น ๆ ด้วยคิว แต่ถ้าปลายทาง (output) ช้าต่อเนื่อง คิวจะเต็มแล้วความเร็วลดลงเหลือเท่าปลายทางที่ช้าที่สุด หรือทิ้ง log ตามนโยบาย (Discard)
  3. Demonstrations of offcputime, the Linux eBPF/bcc version IO Visor
    รวมเวลาที่เธรดหยุดอยู่นอก CPU (off-CPU) แยกตาม call stack, -p ระบุโปรเซส

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: L13 สถาปัตยกรรมเซิร์ฟเวอร์และการดูแลระบบ

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กระตุก)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง