[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-golang-the-series-ep167-monitoring-ai-performance-all--*":3,"academy-blog-translations-alxa6bnvrti9g4h":95},{"data":4,"page":80,"perPage":80,"totalItems":80,"totalPages":80},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":88,"keywords":89,"locale":60,"published_at":90,"scheduled_at":76,"school_blog":84,"short_description":91,"status":82,"title":92,"updated":93,"updated_by":94,"slug":85,"views":87},"ระบบติดตามวัดผล AI Latency ด้วย Prometheus Metrics ในภาษา Go","sclblg987654321","school_blog_translations","\u003Cp>ยินดีต้อนรับเข้าสู่ EP.167 ครับ! ผ่านมาแล้ว \u003Ca rel=\"noopener noreferrer\" href=\"https:\u002F\u002Fwww.superdevacademy.com\u002Fblogs\u002Fgolang-the-series-ep166-circuit-breaker-pattern\">166 ตอน\u003C\u002Fa> ระบบ AI Backend ใน Go ของเรามีครบทั้ง Multi-LLM, Redis Caching, Rate Limiting, Load Balancing ไปจนถึง Circuit Breaker พร้อมลุยสเกลระดับ Enterprise เรียบร้อยแล้ว\u003C\u002Fp>\u003Cp>แต่ในโลกของ Production มีประโยคคลาสสิกของนักพัฒนาระบบกล่าวไว้ว่า \u003Cem>\"If you can't measure it, you can't improve it\"\u003C\u002Fem> (ถ้าคุณวัดผลมันไม่ได้ คุณก็ปรับปรุงมันไม่ได้)\u003C\u002Fp>\u003Cp>ผมจำได้เลยว่าตอนที่ปล่อยระบบ AI ขึ้น Production ครั้งแรก พอถึงช่วงที่คนใช้งานพร้อมกันเยอะๆ ระบบเกิดอืดขึ้นมาอย่างไม่ทราบสาเหตุ กว่าจะควานหาเจอว่า AI Provider เจ้าไหนกำลังคอขวดก็เสียเวลาไปหลายชั่วโมงเลยครับ\u003C\u002Fp>\u003Cp>ระบบ AI มีความท้าทายเรื่อง Latency ที่ต่างจาก CRUD API ทั่วไปอย่างสิ้นเชิง API ปกติอาจตอบกลับในระดับ 50ms แต่ LLM อาจใช้เวลาตั้งแต่ 500ms ไปจนถึง 10 วินาที ขึ้นอยู่กับขนาด Prompt, ความยาว Context และจำนวน Output Tokens หากไม่มีระบบ \u003Cem>Observability &amp; Monitoring\u003C\u002Fem> ที่ดี เราไม่มีทางรู้ได้เลยว่า:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>LLM เจ้าไหนเริ่มตอบช้าลงในจังหวะ Peak Load?\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>ค่า Latency ที่กระจายตัวกัน (\u003Cem>Percentiles: p50, p90, p99\u003C\u002Fem>) อยู่ในระดับที่ SLA รับได้หรือไม่?\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>อัตราส่วน Cache Hit\u002FMiss หรือการสับ Circuit Breaker เกิดขึ้นบ่อยแค่ไหน?\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>วันนี้เราจะมาติด \u003Cem>\"ตัววัดชีพจร\"\u003C\u002Fem> ให้กับแอปพลิเคชัน Go ของเราด้วย Prometheus Metrics กันครับ!\u003C\u002Fp>\u003Ch2>ทำความรู้จัก Metrics Types ใน Prometheus\u003C\u002Fh2>\u003Cp>Prometheus มีประเภทของ Metric ให้เลือกใช้งานตามวัตถุประสงค์ ในการวัดผล AI Performance เราจะเน้น 3 ตัวหลัก:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>Counter:\u003C\u002Fstrong> ค่าที่นับเพิ่มขึ้นเรื่อยๆ ไม่มีวันลดลง (ยกเว้น Restart Service) เหมาะสำหรับนับจำนวน Request รวม (\u003Ccode>ai_requests_total\u003C\u002Fcode>) หรือนับจำนวน Tokens รวมที่ใช้งานไป\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Gauge:\u003C\u002Fstrong> ค่าที่ขึ้นๆ ลงๆ ได้ตลอดเวลา เหมาะสำหรับวัดจำนวน Request ที่กำลังประมวลผลอยู่ ณ ขณะนั้น (\u003Ccode>ai_concurrent_requests\u003C\u002Fcode>)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>Histogram:\u003C\u002Fstrong> จัดกลุ่มข้อมูลใส่ \"ถัง\" (\u003Cem>Buckets\u003C\u002Fem>) เพื่อคำนวณแจกแจงค่าทางสถิติ เหมาะที่สุดสำหรับการวัด Latency หรือ Processing Duration (\u003Ccode>ai_request_duration_seconds\u003C\u002Fcode>)\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>การติดตั้ง Dependency\u003C\u002Fh2>\u003Cp>เราจะใช้ Official Library ของ Prometheus สำหรับภาษา Go:\u003C\u002Fp>\u003Cp>Bash\u003C\u002Fp>\u003Cpre>\u003Ccode>go get github.com\u002Fprometheus\u002Fclient_golang\u002Fprometheus\ngo get github.com\u002Fprometheus\u002Fclient_golang\u002Fprometheus\u002Fpromhttp\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>โครงสร้างและการเขียน Go ฝัง Prometheus Metrics\u003C\u002Fh2>\u003Cp>เราจะสร้าง Custom Metrics เพื่อจับเวลาการตอบสนองของ AI แต่ละ Provider (เช่น OpenAI, Anthropic, Ollama Local) พร้อมแยกตามสถานะการตอบกลับ (Success \u002F Error)\u003C\u002Fp>\u003Ch3>ส่วนที่ 1: ประกาศตัวแปร Prometheus Metrics และฟังก์ชันจำลองการเรียกใช้ AI\u003C\u002Fh3>\u003Cp>Go\u003C\u002Fp>\u003Cpre>\u003Ccode>package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"math\u002Frand\"\n\t\"net\u002Fhttp\"\n\t\"time\"\n\n\t\"github.com\u002Fprometheus\u002Fclient_golang\u002Fprometheus\"\n\t\"github.com\u002Fprometheus\u002Fclient_golang\u002Fprometheus\u002Fpromauto\"\n\t\"github.com\u002Fprometheus\u002Fclient_golang\u002Fprometheus\u002Fpromhttp\"\n)\n\nvar (\n\t\u002F\u002F 1. Counter: นับจำนวน Request ทั้งหมด แยกตาม provider และ status\n\taiRequestsTotal = promauto.NewCounterVec(\n\t\tprometheus.CounterOpts{\n\t\t\tName: \"ai_requests_total\",\n\t\t\tHelp: \"จำนวนครั้งทั้งหมดที่มีการเรียกใช้งาน AI API\",\n\t\t},\n\t\t[]string{\"provider\", \"status\"},\n\t)\n\n\t\u002F\u002F 2. Histogram: วัดเวลาในการประมวลผล (Latency) แยกตาม provider\n\taiRequestDuration = promauto.NewHistogramVec(\n\t\tprometheus.HistogramOpts{\n\t\t\tName:    \"ai_request_duration_seconds\",\n\t\t\tHelp:    \"ระยะเวลาประมวลผลของ AI API ในหน่วยวินาที\",\n\t\t\t\u002F\u002F กำหนดช่วง Buckets ทางสถิติ ตั้งแต่ 0.1s ไปจนถึง 10s\n\t\t\tBuckets: []float64{0.1, 0.5, 1.0, 2.0, 5.0, 10.0},\n\t\t},\n\t\t[]string{\"provider\"},\n\t)\n\n\t\u002F\u002F 3. Gauge: วัดจำนวน Request ที่กำลังรันขนานกันอยู่ในขณะนั้น\n\taiActiveRequests = promauto.NewGaugeVec(\n\t\tprometheus.GaugeOpts{\n\t\t\tName: \"ai_active_requests\",\n\t\t\tHelp: \"จำนวน Request ที่กำลังประมวลผลอยู่พร้อมกัน\",\n\t\t},\n\t\t[]string{\"provider\"},\n\t)\n)\n\n\u002F\u002F simulateAICall จำลองการยิงหา AI Provider พร้อมจับเวลาประมวลผล\nfunc simulateAICall(provider string) (string, error) {\n\t\u002F\u002F เพิ่มจำนวน Active Request ใน Gauge\n\taiActiveRequests.WithLabelValues(provider).Inc()\n\tdefer aiActiveRequests.WithLabelValues(provider).Dec()\n\n\t\u002F\u002F เริ่มจับเวลา\n\tstartTime := time.Now()\n\n\t\u002F\u002F จำลองเวลาประมวลผลของ AI (0.2s ถึง 3.0s)\n\tprocessingTime := time.Duration(200+rand.Intn(2800)) * time.Millisecond\n\ttime.Sleep(processingTime)\n\n\tduration := time.Since(startTime).Seconds()\n\n\t\u002F\u002F บันทึก Latency ลงใน Histogram Bucket\n\taiRequestDuration.WithLabelValues(provider).Observe(duration)\n\n\t\u002F\u002F จำลองโอกาสเกิด Error 10%\n\tif rand.Float32() &lt; 0.1 {\n\t\taiRequestsTotal.WithLabelValues(provider, \"error\").Inc()\n\t\treturn \"\", fmt.Errorf(\"AI Provider %s Timeout \u002F Service Unavailable\", provider)\n\t}\n\n\taiRequestsTotal.WithLabelValues(provider, \"success\").Inc()\n\treturn fmt.Sprintf(\"คำตอบจาก %s (ใช้เวลา %.2fs)\", provider, duration), nil\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>ส่วนที่ 2: ส่วนการทำ HTTP Endpoints และบริการให้ Prometheus เข้ามาดึงข้อมูล (Scraping): main.go\u003C\u002Fh3>\u003Cp>Go\u003C\u002Fp>\u003Cpre>\u003Ccode>func main() {\n\t\u002F\u002F 1. Endpoint สำหรับให้ Prometheus Server มา Scraping ดึงข้อมูล Metrics\n\thttp.Handle(\"\u002Fmetrics\", promhttp.Handler())\n\n\t\u002F\u002F 2. Endpoint จำลอง API สำหรับประมวลผล AI\n\thttp.HandleFunc(\"\u002Fapi\u002Fv1\u002Fgenerate\", func(w http.ResponseWriter, r *http.Request) {\n\t\tprovider := r.URL.Query().Get(\"provider\")\n\t\tif provider == \"\" {\n\t\t\tprovider = \"openai\" \u002F\u002F Default Provider\n\t\t}\n\n\t\tresp, err := simulateAICall(provider)\n\t\tif err != nil {\n\t\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\t\treturn\n\t\t}\n\n\t\t_, _ = w.Write([]byte(resp))\n\t})\n\n\tlog.Println(\"📊 Prometheus Metrics Endpoint รันอยู่ที่ http:\u002F\u002Flocalhost:2112\u002Fmetrics\")\n\tlog.Println(\"🚀 AI Service API พร้อมรับ Request ที่ http:\u002F\u002Flocalhost:2112\u002Fapi\u002Fv1\u002Fgenerate\")\n\tlog.Fatal(http.ListenAndServe(\":2112\", nil))\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>การนำข้อมูลไปสร้าง Dashboard บน Grafana (PromQL)\u003C\u002Fh2>\u003Cp>เมื่อ Prometheus ดึง Metrics จาก \u003Ccode>\u002Fmetrics\u003C\u002Fcode> Endpoint ของเราไปเก็บไว้ใน Time-Series Database แล้ว เราสามารถใช้คำสั่ง \u003Cem>PromQL (Prometheus Query Language)\u003C\u002Fem> บน Grafana เพื่อสร้าง Dashboard แสดงผลได้อย่างเรียบหรู:\u003C\u002Fp>\u003Ch3>1. คำนวณค่า Latency Percentile 95th (95% ของผู้ใช้งานได้รับตอบสนองภายในกี่วินาที)\u003C\u002Fh3>\u003Cp>ข้อมูลโค้ด\u003C\u002Fp>\u003Cpre>\u003Ccode>histogram_quantile(0.95, sum(rate(ai_request_duration_seconds_bucket[5m])) by (le, provider))\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch3>2. คำนวณอัตราความสำเร็จ (Success Rate %)\u003C\u002Fh3>\u003Cp>ข้อมูลโค้ด\u003C\u002Fp>\u003Cpre>\u003Ccode>(sum(rate(ai_requests_total{status=\"success\"}[5m])) \u002F sum(rate(ai_requests_total[5m]))) * 100\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Ch2>🎯 ท้าให้ลอง (Daily Mission)\u003C\u002Fh2>\u003Cp>ลองรันโค้ดด้านบน แล้วใช้ cURL ยิง Request เข้าไปหลายๆ ครั้งโดยสลับค่า Provider:\u003C\u002Fp>\u003Cp>Bash\u003C\u002Fp>\u003Cpre>\u003Ccode>curl \"http:\u002F\u002Flocalhost:2112\u002Fapi\u002Fv1\u002Fgenerate?provider=openai\"\ncurl \"http:\u002F\u002Flocalhost:2112\u002Fapi\u002Fv1\u002Fgenerate?provider=gemini\"\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>จากนั้นเปิดเบราว์เซอร์เข้าไปที่ \u003Ca rel=\"noopener noreferrer\" href=\"http:\u002F\u002Flocalhost:2112\u002Fmetrics\">\u003Ccode>http:\u002F\u002Flocalhost:2112\u002Fmetrics\u003C\u002Fcode>\u003C\u002Fa>\u003C\u002Fp>\u003Cp>\u003Cstrong>การบ้านชวนคิด:\u003C\u002Fstrong> ลองค้นหาข้อความ \u003Ccode>ai_request_duration_seconds_bucket\u003C\u002Fcode> บนหน้าเว็บ \u003Ccode>\u002Fmetrics\u003C\u002Fcode> แล้วสังเกตว่าข้อมูลการนับในแต่ละ Bucket สอดคล้องกับเวลาประมวลผลจริงเพียงใด? และหากในอนาคตคุณต้องการวัด \u003Cem>\"จำนวน Token ที่ใช้ไป\" (Token Usage)\u003C\u002Fem> เพิ่มเติมเพื่อนำไปคำนวณต้นทุน (Cost) รายวัน คุณคิดว่าควรเลือกใช้ Metric Type ชนิดใดระหว่าง Counter, Gauge หรือ Histogram? ลองออกแบบโครงสร้างกันดูนะครับ!\u003C\u002Fp>\u003Ch2>🙋‍♂️ FAQ คำถามที่พบบ่อย\u003C\u002Fh2>\u003Ch3>ทำไมถึงไม่ใช้การพิมพ์ Log ธรรมดาเพื่อจับเวลา ทำไมต้องยุ่งยากใช้ Prometheus?\u003C\u002Fh3>\u003Cp>การใช้ Log พิมพ์ระยะเวลา (เช่น \u003Ccode>log.Printf(\"ใช้เวลา %v\", duration)\u003C\u002Fcode>) ทำได้ง่ายในตอนเริ่มต้นครับ แต่เมื่อระบบมีผู้ใช้งานระดับพันหรือหมื่น Request ต่อวินาที Log จะมีขนาดมหาศาลมาก การจะนำ Log เหล่านั้นมาคำนวณหาค่าเฉลี่ยหรือ P95 แบบ Real-time จะกินทรัพยากรสูงมาก Prometheus ถูกออกแบบมาเพื่อเก็บเป็น Time-Series Data ซึ่งประหยัดพื้นที่กว่า และดึงข้อมูลมาแสดงเป็นกราฟได้ไวกว่าอย่างเห็นได้ชัดครับ\u003C\u002Fp>\u003Ch3>ค่า Buckets ใน Histogram ควรตั้งอย่างไรสำหรับ AI ทั่วไป?\u003C\u002Fh3>\u003Cp>สำหรับ AI จะใช้เวลาตอบสนองนานกว่า API ปกติครับ การตั้ง Bucket ที่ระดับมิลลิวินาที (เช่น \u003Ccode>0.01s\u003C\u002Fcode>, \u003Ccode>0.05s\u003C\u002Fcode>) อาจจะไม่ค่อยมีประโยชน์เท่าไหร่ แนะนำให้ตั้งค่าที่ครอบคลุมช่วงการประมวลผลของ LLM จริงๆ เช่น \u003Ccode>[0.5, 1.0, 2.0, 5.0, 10.0, 30.0, 60.0]\u003C\u002Fcode> วินาที เพื่อให้รองรับไปจนถึง Prompt ขนาดใหญ่มากๆ ได้\u003C\u002Fp>\u003Ch3>การให้ Prometheus เข้ามาดึงข้อมูล (Scrape) บ่อยๆ จะทำให้ Server อืดไหม?\u003C\u002Fh3>\u003Cp>ไม่เลยครับ! ตัว \u003Ccode>\u002Fmetrics\u003C\u002Fcode> endpoint ถูกออกแบบมาให้เบาและรวดเร็วมาก การตั้งให้ Prometheus เข้ามาดึงข้อมูลทุกๆ 10 หรือ 15 วินาที เป็น Best Practice พื้นฐานที่ไม่ได้ส่งผลกระทบต่อประสิทธิภาพการทำงานหลักของเซิร์ฟเวอร์เราเลยครับ\u003C\u002Fp>\u003Cdiv data-type=\"horizontalRule\">\u003Chr>\u003C\u002Fdiv>\u003Ch2>📝 สรุป\u003C\u002Fh2>\u003Cp>ในบทความนี้เราได้เรียนรู้วิธีการติดอาวุธให้ระบบ Go Backend ของเราด้วยการทำ Observability เพื่อตรวจสอบประสิทธิภาพการทำงานของ AI ผ่าน \u003Cstrong>Prometheus Metrics\u003C\u002Fstrong> เราได้รู้จักกับ Metric Types ทั้ง 3 ชนิด (Counter, Gauge, Histogram) รู้วิธีการเขียนโค้ดจับเวลา Latency อย่างถูกวิธี พร้อมทั้งการนำไปประยุกต์เขียนสูตร PromQL บน Grafana เพื่อคำนวณค่าทางสถิติระดับโปร (P95 และ Success Rate) ตอนนี้ระบบของคุณพร้อมสำหรับการสเกลบน Production และสามารถตอบคำถามทีม Business ได้อย่างมั่นใจแล้วครับว่าระบบทำงานได้ดีแค่ไหน!\u003C\u002Fp>\u003Cp>\u003Cstrong>ในตอนต่อไป (EP.168):\u003C\u002Fstrong> เรามีระบบวัดผล Performance ที่ดีเยี่ยมแล้ว แต่ปัญหาปวดหัวที่สุดอย่างหนึ่งของนักพัฒนา AI คือ \"AI ไม่ได้ตอบข้อผิดพลาดเป็น HTTP Status Code เสมอไป\" บางครั้ง API ตอบกลับ 200 OK แต่ข้อความข้างในกลับเป็น \"ขออภัย ฉันไม่สามารถทำตามคำสั่งนี้ได้\" หรือตอบ JSON ออกมาผิด Structure จนระบบ Go ไม่สามารถ Parse (แปลง) ข้อมูลได้! ตอนหน้าเราจะมาลุยเรื่อง \"Error Handling in AI — การจัดการและตั้งรับเมื่อ AI ตอบกลับสิ่งที่ไม่คาดคิด\" พลาดไม่ได้เด็ดขาดครับ Gophers!\u003C\u002Fp>\u003Cp>\u003Cstrong>ฝากกดติดตามพวกเราได้ที่ Superdev Academy\u003C\u002Fstrong> ในทุกช่องทางนะครับ!\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cp>\u003Cstrong>🔵 Facebook: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.facebook.com\u002Fsuperdev.academy.th\">\u003Cstrong>Superdev Academy Thailand\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(อัปเดตข่าวสารและบทความใหม่)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🎬 YouTube: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.youtube.com\u002F@SuperdevAcademy\">\u003Cstrong>Superdev Academy Channel\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(ติวเข้มแบบวิดีโอ)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>📸 Instagram: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.instagram.com\u002Fsuperdevacademy\u002F\">\u003Cstrong>@superdevacademy\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(เกร็ดความรู้สั้นๆ และเบื้องหลังการทำงาน)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🎬 TikTok: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener\" class=\"ng-star-inserted\" href=\"https:\u002F\u002Fwww.tiktok.com\u002F@superdevacademy?lang=th-TH\">\u003Cstrong>@superdevacademy\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(Tips &amp; Tricks ฉบับย่อยง่าย)\u003C\u002Fp>\u003C\u002Fli>\u003Cli>\u003Cp>\u003Cstrong>🌐 Website: \u003C\u002Fstrong>\u003Ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"http:\u002F\u002Fsuperdevacademy.com\">\u003Cstrong>superdevacademy.com\u003C\u002Fstrong>\u003C\u002Fa>\u003Cstrong> \u003C\u002Fstrong>(คลังบทความและคอร์สเรียนฉบับเต็ม)\u003C\u002Fp>\u003C\u002Fli>\u003C\u002Ful>\u003Cp>\u003C\u002Fp>","53gcp0gecwwr_48p6tibrvz.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002Ffg5dhnn2ja5sz6h\u002F53gcp0gecwwr_48p6tibrvz.png","2026-08-04 04:50:47.266Z","76qprkevbgfdps8",{"keywords":15,"locale":54,"school_blog":64},[16,23,28,33,37,41,46,50],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:20:14.253Z","ah6lvy4x8qe08l5","Golang","2026-06-07 06:45:08.193Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:45:38.382Z","8uz7io97gj0jusq","Prometheus","2026-06-07 06:46:52.110Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:44:11.548Z","ezm3p0vsuowuadd","Latency","2026-06-07 06:46:28.821Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":34,"updated_by":13},"2026-08-04 04:48:50.963Z","vnovu11bx80yr0h","AI Performance",{"collectionId":17,"collectionName":18,"created":38,"created_by":13,"id":39,"name":40,"updated":38,"updated_by":13},"2026-08-04 04:49:10.806Z","wkf0f2sfoww4cky","Go Backend",{"collectionId":17,"collectionName":18,"created":42,"created_by":13,"id":43,"name":44,"updated":45,"updated_by":13},"2026-03-04 08:44:34.753Z","l1a17htphmxe52a","Observability","2026-06-07 06:46:35.412Z",{"collectionId":17,"collectionName":18,"created":47,"created_by":13,"id":48,"name":49,"updated":47,"updated_by":13},"2026-07-13 01:22:42.953Z","hcbz61drlwxlj06","สอน Golang",{"collectionId":17,"collectionName":18,"created":51,"created_by":13,"id":52,"name":53,"updated":51,"updated_by":13},"2026-07-29 04:34:11.928Z","t8naihqgaknjfz4","AI Infrastructure",{"code":55,"collectionId":56,"collectionName":57,"created":58,"flag":59,"id":60,"is_default":61,"label":62,"updated":63},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":65,"collectionId":66,"collectionName":67,"created":68,"expand":69,"id":84,"slug":85,"updated":86,"views":87},"wqxt7ag2gn7xcmk","pbc_2105096300","school_blogs","2026-08-04 04:50:46.945Z",{"category":70},{"blogIds":71,"collectionId":72,"collectionName":73,"created":74,"created_by":13,"id":65,"image":75,"image_alt":76,"image_path":77,"label":78,"name":79,"priority":80,"publish_at":81,"scheduled_at":76,"status":82,"updated":83,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:33:53.210Z","59ty92ns80w_15oc1implw.png","","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fwqxt7ag2gn7xcmk\u002F59ty92ns80w_15oc1implw.png",{"en":79,"th":79},"Golang The Series",1,"2026-03-16 04:39:38.440Z","published","2026-06-07 06:45:03.856Z","alxa6bnvrti9g4h","golang-the-series-ep167-monitoring-ai-performance","2026-08-10 12:00:09.403Z",115,"fg5dhnn2ja5sz6h",[20,25,30,35,39,43,48,52],"2026-08-10 10:11:06.402Z","เทคนิคการติดตั้ง Observability ด้วย Prometheus Metrics ในระบบ Go Backend เพื่อวัดค่า Latency, Percentiles (p95\u002Fp99) และ Request Success Rate สำหรับ AI Infrastructure พร้อมตัวอย่าง PromQL บน Grafana","Golang The Series EP.167: Monitoring AI Performance ใช้ Prometheus วัดความเร็ว Latency","2026-08-10 10:11:06.403Z","423vhnv3ckczcyn",{"th":85,"en":85}]