Healthchecks in ASP.NET Core with docker compose and K8s

Keattisak Chinburarat
2 min readOct 13, 2020

สำหรับเนื้อหานี้ผมตั้งใจจะทำเป็น 3 ถึง 4 ตอน

Part 1: Health checks in ASP.NET Core(this post)

Part 2: Adding health checks with Liveness, Readiness, and Startup probes

Part 3: Running application on Docker compose

Part 4: Running application on k8s local using minikube

โดยปกติการพัฒนา Application แบบ Mini Service, Micro Service หรือ Modular Application นั้นมักจะมีขบวนการเพื่อตรวจสอบระบบงานของเราว่ายังพร้อมที่จะให้บริการมั้ย หรือมีสุขภาพที่ดีอยู่หรือป่าว (heartbeats or health checks) จากที่ผมทำระบบมาเราสามารถทำ Healthchecks ได้หลากหลายมาก บางครั้งเราก็ทำแบบ Endpoint ธรรมดาที่ return response code 200 กับ Content “Healthy” หรือจะเป็นการ CPU usage, RAM usage จนไปถึง Check สุขภาพของ Upstream service ก็ได้

แต่สำหรับ Asp.net core นั้นเราสามารถทำได้หลากหลายเช่นกัน โดยตัวอย่างที่ผมนำเสนอในบทความนี้จะเป็นตัวอย่างที่จะนำไปใช้ทดสอบบน K8sด้วยในบทความตอนสุดท้าย โดยผมจะตั้ง Project นี้ว่า “AspnetCoreHealthCheckK8sProbes” มาเริ่มกันเลยดีว่า ขันแรกเริ่มจากการสร้าง Solution และ Project files

จากนั้นทำการ add package

Step: ConfigureServices

จากนั้นทำการก็ใส่ Code ที่ ConfigureServices ตามด้านล่าง

อธิบาย code ดังนี้นะครับ

  1. Add WarmupService
  • services.AddSingleton<WarmupState>();
  • services.AddHostedService<WarmupService>();

ผมเอาไว้ทำ process จำลองว่าตอน application start จะมีการ warmup อะไรสักอย่างที่จะใช้เวลา 30 วินาทีแล้วจะทำเสร็จ โดยใช้ Hosted service ทำ back ground process ไว้ดังนี้

Note: เท่าที่ผมลองถ้าเราใช้ Task.Delay(30000) มันจะ block ไม่ให้ ้ Host start เลยเลี่ยงมาใช้ Timer แทน

2. AddHealthChecks

ผมทำ healthcheckไว้ 3 ตัวคือ memory , warmup (Startup Probe),Liveness

สำหรับเรื่อง healthcheck โดยละเอียดสามารถตามไปอ่านได้ที่ Microsoft and AspNetCore.Diagnostics.HealthChecks ให้สังเกตว่าเรามีการใส่ Tags เพื่อทำการแยกกลุ่มของ healthcheck

3. Add Healthcheck UI (Bonus สำหรับบทความนี้นะครับ)

จากนั้นให้เรา เพิ่ม configuration ไปที่ appsettings.json

Configuration นี้เพื่อบอก Angular UI ให้ทำยิงไปที่ http://localhost:5000/healthz เพื่อนำผลลัพท์มาแสดง ซึ่งจะต้องทำการ Use service ที่ Configure Method ที่จะพูดถึงต่อไป โดยให้ยิงทุก 10 secs

Step: Configure

ทำการใส่ Code ที่

จากนั้นลอง run application ไปที่ https://localhost:5000//healthchecks-ui ผลลัพท์สำหรับการทำทั้งหมดจะได้ UI ประมาณนี้

จะสังเกตว่า Startp Probe จะยังไม่ Healthy จนว่าจะผ่านไป 30 secs ก่อนครับ

--

--