SiamCafe · Blog
คู่มือตั้งค่า SigNoz Observability บน Service Mesh ขั้นสูง
บทความ

คู่มือตั้งค่า SigNoz Observability บน Service Mesh ขั้นสูง

เผยแพร่ 21 กุมภาพันธ์ 2569

เมื่อคุณบริหารระบบ Kubernetes ขนาดใหญ่ที่มีหลายบริการทำงานพร้อมกัน ปัญหาที่เกิดขึ้นมักจะซับซ้อนและยากต่อการติดตามเพราะข้อมูลกระจัดกระจายไปทั่วทั้งระบบ SigNoz เป็นเครื่องมือ Observability ที่ช่วยให้คุณเห็นภาพรวมของสิ่งที่เกิดขึ้นในทั้งระบบ รวมถึงการทำงานของแต่ละบริการและความเชื่อมโยงระหว่างกัน

Service Mesh เช่น Istio นั้นเป็นเลเยอร์พิเศษที่จัดการการสื่อสารระหว่างบริการต่างๆ โดยให้ความสามารถในการควบคุมการไหลของข้อมูล ความปลอดภัย และการติดตาม แต่ถ้าไม่มีเครื่องมือสำหรับสังเกตการณ์ คุณจะไม่รู้ว่าเกิดอะไรขึ้นจริงๆ บทความนี้จะแสดงวิธีการตั้งค่า SigNoz เพื่อให้มองเห็นและตรวจสอบ Service Mesh ของคุณได้อย่างชัดเจน

ข้อดีของการรวม SigNoz กับ Service Mesh คือคุณสามารถเห็นการไหลของคำขอทั้งหมด ความเร็วของการตอบสนอง อัตราข้อผิดพลาด และแม้กระทั่งปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นในการสื่อสารระหว่างบริการ

SigNoz คืออะไร และทำไมจึงสำคัญสำหรับ Service Mesh

SigNoz เป็นแพลตฟอร์ม Observability ที่เป็น Open Source ซึ่งหมายความว่าคุณสามารถดาวน์โหลดและใช้งานได้โดยไม่ต้องจ่ายค่าใบอนุญาต มันถูกออกแบบมาเพื่อรวบรวมและวิเคราะห์ข้อมูลสามประเภทหลัก ได้แก่ Metrics (ตัวเลขที่แสดงประสิทธิภาพ) Traces (เส้นทางของคำขอผ่านบริการต่างๆ) และ Logs (บันทึกข้อความของระบบ)

เมื่อคุณใช้ SigNoz กับ Service Mesh คุณจะได้ประโยชน์จากความสามารถในการมองเห็นการทำงานของทั้งระบบ ตั้งแต่ระดับเครือข่ายไปจนถึงระดับแอปพลิเคชัน นี่เป็นสิ่งสำคัญเพราะปัญหาบางอย่างอาจเกิดขึ้นที่จุดเชื่อมต่อระหว่างบริการ ไม่ใช่ในบริการเดียว

ส่วนประกอบหลักของ SigNoz

SigNoz ประกอบด้วยส่วนต่างๆ หลายส่วนที่ทำงานร่วมกัน OTel Collector เป็นตัวรับข้อมูล Telemetry จากแต่ละบริการ ClickHouse เป็นฐานข้อมูลที่เก็บข้อมูลทั้งหมด Query Service เป็นตัวค้นหาข้อมูล และ Dashboard เป็นอินเทอร์เฟซที่แสดงข้อมูลให้คุณมองเห็น

ความเชื่อมโยงระหว่าง SigNoz และ Istio

Istio ทำหน้าที่เป็นตัวจัดการการสื่อสารระหว่างบริการ มันติดตั้ง Proxy เล็กๆ (เรียกว่า Sidecar) ในแต่ละ Pod เพื่อควบคุมการไหลของข้อมูล Proxy เหล่านี้สามารถส่งข้อมูลเกี่ยวกับการสื่อสารไปยัง SigNoz เพื่อให้คุณเห็นว่าเกิดอะไรขึ้น

ขั้นตอนการติดตั้ง SigNoz บน Kubernetes

การติดตั้ง SigNoz บน Kubernetes นั้นค่อนข้างตรงไปตรงมา เราจะใช้ Helm ซึ่งเป็นเครื่องมือที่ช่วยให้การติดตั้งแอปพลิเคชันบน Kubernetes ง่ายขึ้น

ขั้นตอนแรก เพิ่ม Repository ของ SigNoz

ก่อนอื่นคุณต้องบอกให้ Helm รู้ว่าจะหา SigNoz ได้ที่ไหน เปิด Terminal และพิมพ์คำสั่งต่อไปนี้

helm repo add signoz https://charts.signoz.io
helm repo update

คำสั่งแรกเพิ่ม Repository ของ SigNoz คำสั่งที่สองอัปเดตข้อมูลให้เป็นเวอร์ชันล่าสุด

ขั้นตอนที่สอง ติดตั้ง SigNoz

ตอนนี้เราจะติดตั้ง SigNoz ลงในคลัสเตอร์ Kubernetes ของคุณ

helm install signoz signoz/signoz \
 --namespace signoz \
 --create-namespace

คำสั่งนี้จะสร้าง Namespace ใหม่ชื่อ signoz และติดตั้ง SigNoz ลงไป หลังจากนั้นคุณสามารถตรวจสอบสถานะของการติดตั้งได้ด้วยคำสั่ง kubectl get pods -n signoz

ขั้นตอนที่สาม ติดตั้ง Istio

ต่อไปเราต้องติดตั้ง Istio ซึ่งเป็น Service Mesh ที่จะจัดการการสื่อสารระหว่างบริการ

สรุปแนวคิด: istioctl install --set profile=demo -y kubectl label namespace default istio-injection=enabled

คำสั่งแรกติดตั้ง Istio โดยใช้โปรไฟล์ demo ซึ่งเหมาะสำหรับการทดลอง คำสั่งที่สองบอกให้ Istio ติดตั้ง Sidecar Proxy โดยอัตโนมัติในทุก Pod ใน Namespace default

การตั้งค่า Istio เพื่อส่งข้อมูลไปยัง SigNoz

หลังจากติดตั้ง SigNoz และ Istio แล้ว เราต้องบอกให้ Istio ส่งข้อมูลไปยัง SigNoz เพื่อให้ SigNoz สามารถเห็นและวิเคราะห์ข้อมูลได้

การกำหนดค่า Telemetry

Istio มีฟีเจอร์ Telemetry ที่ช่วยให้คุณตัดสินใจว่าจะส่งข้อมูลอะไรไปยัง SigNoz คุณสามารถกำหนดให้ส่ง Traces ซึ่งแสดงเส้นทางของคำขอผ่านบริการต่างๆ

การตั้งค่าพื้นฐานคือการสร้าง Telemetry Resource ในคลัสเตอร์ของคุณ ซึ่งจะบอกให้ Istio ส่งข้อมูล Traces ไปยัง OTel Collector ของ SigNoz OTel Collector นี้จะรับข้อมูลและส่งต่อไปยัง ClickHouse เพื่อเก็บไว้

การตั้งค่า OpenTelemetry Collector

OpenTelemetry Collector เป็นตัวกลางที่รับข้อมูล Telemetry จากแหล่งต่างๆ และส่งต่อไปยังที่เก็บข้อมูล SigNoz มี OTel Collector ในตัวอยู่แล้ว ซึ่งหมายความว่าคุณไม่ต้องติดตั้งเพิ่มเติม

สิ่งที่คุณต้องทำคือให้แน่ใจว่า Istio ส่งข้อมูลไปยังที่อยู่ที่ถูกต้องของ OTel Collector ซึ่งมักจะเป็นที่อยู่ภายในคลัสเตอร์ Kubernetes

Dashboard และการติดตาม Metrics

เมื่อ SigNoz และ Istio ทำงานร่วมกันแล้ว คุณสามารถเข้าถึง Dashboard ของ SigNoz เพื่อดูข้อมูลต่างๆ Dashboard นี้จะแสดงข้อมูลสำคัญหลายอย่างที่ช่วยให้คุณเข้าใจสถานะของระบบ

ตัวชี้วัดที่สำคัญในการติดตาม

มีตัวชี้วัดหลายตัวที่คุณควรติดตาม เช่น Request Rate ซึ่งแสดงจำนวนคำขอต่อวินาที Error Rate ซึ่งแสดงเปอร์เซ็นต์ของคำขอที่ล้มเหลว และ Latency ซึ่งแสดงเวลาที่ใช้ในการตอบสนอง

ตัวชี้วัด ความหมาย ค่าปกติ เมื่อควรตั้งสัญญาณเตือน
Request Rate (RPS) จำนวนคำขอต่อวินาที ขึ้นอยู่กับแอปพลิเคชัน ลดลงกว่า 50% จากปกติ
Error Rate เปอร์เซ็นต์ของคำขอที่ล้มเหลว ต่ำกว่า 0.5% สูงกว่า 1%
Latency P99 เวลาที่ 99% ของคำขอตอบสนอง ต่ำกว่า 200ms สูงกว่า 500ms
mTLS Success Rate เปอร์เซ็นต์การเชื่อมต่อที่ปลอดภัย 100% ต่ำกว่า 99%

Service Map และการมองเห็นความเชื่อมโยง

หนึ่งในฟีเจอร์ที่มีประโยชน์ที่สุดของ SigNoz คือ Service Map ซึ่งแสดงแผนที่ของบริการทั้งหมดและความเชื่อมโยงระหว่างกัน คุณสามารถมองเห็นว่าบริการใดกำลังติดต่อกับบริการใด และมีปัญหาอะไรเกิดขึ้นในการเชื่อมต่อ

Service Map นี้ถูกสร้างขึ้นโดยอัตโนมัติจากข้อมูล Traces ที่ SigNoz รวบรวม ซึ่งหมายความว่าคุณไม่ต้องตั้งค่าเพิ่มเติม เพียงแค่ปล่อยให้ SigNoz รวบรวมข้อมูล

Trace Explorer และการสืบสอบปัญหา

เมื่อมีปัญหาเกิดขึ้น Trace Explorer จะช่วยให้คุณหาสาเหตุ คุณสามารถค้นหา Traces ที่มีระยะเวลานาน หรือ Traces ที่ล้มเหลว และดูว่าเกิดอะไรขึ้นในแต่ละขั้นตอน

การตั้งค่า Alert เพื่อการตรวจสอบอัตโนมัติ

การตั้งค่า Alert ช่วยให้คุณรู้ทันทีเมื่อมีปัญหาเกิดขึ้น แทนที่จะต้องมองหาปัญหาด้วยตัวเอง

Alert สำหรับ Error Rate

หากอัตราข้อผิดพลาดเพิ่มขึ้นอย่างกระทันหัน นั่นอาจเป็นสัญญาณว่ามีปัญหาบางอย่าง คุณสามารถตั้งให้ SigNoz ส่งการแจ้งเตือนเมื่ออัตราข้อผิดพลาดเกินกว่า 1% เป็นเวลา 5 นาทีต่อเนื่อง

Alert สำหรับ Latency

ถ้าเวลาตอบสนองของระบบเพิ่มขึ้นอย่างกระทันหัน ผู้ใช้อาจรู้สึกว่าระบบช้า คุณสามารถตั้งให้ SigNoz แจ้งเตือนเมื่อ Latency P99 เกินกว่า 500 มิลลิวินาที

Alert สำหรับ Service Down

หากบริการใดหยุดการทำงาน Request Rate จะเป็นศูนย์ คุณสามารถตั้งให้ SigNoz แจ้งเตือนเมื่อ Request Rate เป็นศูนย์เป็นเวลา 2 นาที

Alert สำหรับปัญหา mTLS

mTLS เป็นวิธีการเข้ารหัสการสื่อสารระหว่างบริการ หากมีปัญหากับ mTLS การสื่อสารอาจไม่ปลอดภัย คุณสามารถตั้งให้ SigNoz แจ้งเตือนเมื่อมีการเชื่อมต่อที่ไม่ใช้ mTLS

ชื่อ Alert เงื่อนไข ความสำคัญ ช่องทางการแจ้งเตือน
High Error Rate Error Rate > 1% เป็นเวลา 5 นาที Critical Slack, PagerDuty
High Latency P99 Latency > 500ms เป็นเวลา 5 นาที Warning Slack
Service Down Request Rate = 0 เป็นเวลา 2 นาที Critical Slack, PagerDuty, Email
mTLS Failure การเชื่อมต่อที่ไม่ใช้ mTLS High Slack #security

เคล็ดลับและแนวปฏิบัติที่ดี

เมื่อใช้ SigNoz กับ Service Mesh มีหลายเคล็ดลับที่จะช่วยให้คุณได้ประโยชน์สูงสุด

การใช้ Sampling เพื่อประหยัดค่าใช้จ่าย

การรวบรวมข้อมูล Traces ทั้งหมดอาจใช้ทรัพยากรจำนวนมาก โดยเฉพาะในระบบที่มีคำขอจำนวนมาก วิธีแก้ปัญหาคือใช้ Sampling ซึ่งหมายความว่าคุณจะรวบรวมเพียงบางส่วนของข้อมูล เช่น 10% ของ Traces เท่านั้น

วิธีนี้จะช่วยลดปริมาณข้อมูลลง 10 เท่า ซึ่งจะลดค่าใช้จ่ายและการใช้ทรัพยากร แต่คุณยังคงได้ข้อมูลที่เพียงพอเพื่อหาปัญหา

การตั้งค่า TTL สำหรับการเก็บข้อมูล

ClickHouse ซึ่งเป็นฐานข้อมูลของ SigNoz จะเติบโตอย่างรวดเร็ว หากคุณไม่กำหนดว่าจะเก็บข้อมูลนานเท่าใด ดิสก์ของคุณอาจเต็ม

วิธีแก้ปัญหาคือตั้ง TTL (Time To Live) ซึ่งบอกให้ SigNoz ลบข้อมูลเก่าโดยอัตโนมัติ ตัวอย่างเช่น คุณสามารถตั้งให้เก็บข้อมูลเป็นเวลา 7 ถึง 30 วันเท่านั้น

การใช้ Service Map เพื่อค้นหาปัญหาที่ไม่คาดคิด

บางครั้งคุณอาจพบการเชื่อมต่อระหว่างบริการที่คุณไม่รู้ว่าอยู่ Service Map จะช่วยให้คุณเห็นการเชื่อมต่อเหล่านี้ และคุณสามารถตรวจสอบว่ามันเป็นสิ่งที่ตั้งใจหรือไม่

การแยก Namespace ตามสภาพแวดล้อม

เป็นแนวปฏิบัติที่ดีที่จะแยก Namespace ตามสภาพแวดล้อม เช่น dev staging และ prod ด้วยวิธีนี้ คุณสามารถติดตั้ง SigNoz แยกต่างหากสำหรับแต่ละสภาพแวดล้อม และคุณจะไม่เสี่ยงต่อการส่งข้อมูลการทดลองไปยัง Production

การแก้ไขปัญหาทั่วไป

เมื่อตั้งค่า SigNoz กับ Service Mesh คุณอาจพบปัญหาบางอย่าง นี่คือวิธีแก้ไขปัญหาทั่วไปบางอย่าง

ไม่มีข้อมูล Traces ปรากฏใน SigNoz

หากคุณไม่เห็นข้อมูล Traces ในอินเทอร์เฟซของ SigNoz ให้ตรวจสอบว่า OTel Collector ทำงานอยู่หรือไม่ คุณสามารถใช้คำสั่ง kubectl logs เพื่อดูบันทึกของ OTel Collector

นอกจากนี้ ให้ตรวจสอบว่า Istio ส่งข้อมูลไปยังที่อยู่ที่ถูกต้องของ OTel Collector

Latency สูงอย่างไม่ปกติ

หากคุณเห็นว่า Latency สูงขึ้นอย่างไม่ปกติ ให้ดู Trace Explorer เพื่อหาว่าบริการใดใช้เวลานานที่สุด คุณอาจจะพบว่ามีการเรียกใช้ฐานข้อมูลที่ช้าหรือการเรียกใช้บริการอื่นที่ช้า

mTLS ไม่ทำงาน

หากมีปัญหากับ mTLS ให้ตรวจสอบว่า Certificate ของ Istio ยังใช้ได้อยู่หรือไม่ คุณสามารถตรวจสอบวันหมดอายุของ Certificate ได้

❓ คำถามที่พบบ่อย

SigNoz ต้องใช้ค่าใช้จ่ายเท่าไหร่
SigNoz เป็น Open Source ซึ่งหมายความว่าคุณสามารถดาวน์โหลดและใช้งานได้โดยไม่ต้องจ่ายค่าใบอนุญาต อย่างไรก็ตาม คุณจะต้องจ่ายค่าสำหรับ Infrastructure ที่ใช้ในการรันระบบ เช่น CPU และ Memory ของเซิร์ฟเวอร์
ฉันต้องเปลี่ยนโค้ดของแอปพลิเคชันหรือไม่เพื่อใช้ SigNoz
ไม่จำเป็น เมื่อคุณใช้ Service Mesh เช่น Istio SigNoz สามารถรวบรวมข้อมูลจาก Proxy ได้โดยอัตโนมัติ คุณไม่ต้องเปลี่ยนโค้ดของแอปพลิเคชัน อย่างไรก็ตาม หากคุณต้องการข้อมูลเพิ่มเติม คุณสามารถใช้ OpenTelemetry SDK ในแอปพลิเคชันของคุณ
ฉันสามารถใช้ SigNoz กับ Service Mesh อื่นๆ นอกเหนือจาก Istio ได้หรือไม่
ได้ SigNoz สามารถทำงานกับ Service Mesh อื่นๆ เช่น Linkerd ได้เช่นกัน ตราบใดที่ Service Mesh นั้นสามารถส่งข้อมูล Telemetry ไปยัง OpenTelemetry Collector
ข้อมูลของฉันจะถูกเก็บไว้ที่ไหน
เมื่อคุณติดตั้ง SigNoz บน Kubernetes ของคุณเอง ข้อมูลจะถูกเก็บไว้ในคลัสเตอร์ของคุณ ใน ClickHouse ซึ่งเป็นฐานข้อมูลที่ SigNoz ใช้ ข้อมูลจะไม่ส่งไปยังเซิร์ฟเวอร์ของบริษัทอื่น
ฉันสามารถส่งการแจ้งเตือนไปยังช่องทางอื่นๆ นอกเหนือจาก Slack ได้หรือไม่
ได้ SigNoz รองรับการส่งการแจ้งเตือนไปยังช่องทางต่างๆ เช่น Email PagerDuty Webhook และอื่นๆ คุณสามารถตั้งค่าช่องทางเหล่านี้ในการตั้งค่า Alert