
ที่มาภาพ: Unknown Source
วิธีติดตั้งและกำหนดค่า OpenTelemetry Collector บน Kubernetes เพื่อรวบรวมเมตริกซ์และล็อกแบบศูนย์กลาง
⚡ สรุป 30 วิ
OpenTelemetry Collector เป็นคอมโพเนนท์กลางที่รับข้อมูล telemetry (metrics, logs, traces) จากแอปพลิเคชันแล้วส่งต่อไปยังระบบสังเกตการณ์ต่าง ๆ เช่น Prometheus, Loki หรือ Jaeger
ทำความเข้าใจ OpenTelemetry Collector — What is OpenTelemetry Collector
OpenTelemetry Collector เป็นคอมโพเนนท์กลางที่รับข้อมูล telemetry (metrics, logs, traces) จากแอปพลิเคชันแล้วส่งต่อไปยังระบบสังเกตการณ์ต่าง ๆ เช่น Prometheus, Loki หรือ Jaeger การใช้ Collector ทำให้เราสามารถ รวมศูนย์ การเก็บข้อมูลจากหลายคลัสเตอร์ได้โดยไม่ต้องแก้ไขโค้ดของแอปพลิเคชัน
- เป็นตัวกลางที่รับ‑ส่งข้อมูลแบบ agent‑less หรือ sidecar
- รองรับปลั๊กอินหลากหลาย (receivers, processors, exporters)
- สามารถทำ aggregation, filtering และ enrichment ก่อนส่งต่อ
**Tip: เลือกใช้ Collector เวอร์ชันที่สอดคล้องกับรุ่น OpenTelemetry SDK ที่แอปของคุณใช้อยู่ เพื่อลดความขัดแย้งระหว่างฟีเจอร์
เตรียมสภาพแวดล้อม Kubernetes — Prerequisites
ก่อนติดตั้งเราต้องมีคลัสเตอร์ Kubernetes พร้อม Helm 3 และ namespace ที่จะใช้เก็บ Collector ตรวจสอบว่าคลัสเตอร์ของคุณสามารถเข้าถึง external storage หรือ backend ที่ต้องการส่ง telemetry ได้แล้ว
- Kubernetes ≥ 1.20
- Helm 3.x ติดตั้งและทำงานได้ (`helm version`)
- Namespace เช่น `otel-collector`
- สิทธิ์ ClusterRole สำหรับอ่านข้อมูลจาก node (หากใช้ DaemonSet)
**ข้อควรระวัง: อย่าลืมเปิดการอนุญาต NetworkPolicy ที่จำเป็นให้ Collector สามารถติดต่อ backend ได้
การติดตั้งด้วย Helm — Install via Helm
Helm ทำให้ขั้นตอนติดตั้งรวดเร็วและสามารถอัปเดตเวอร์ชันต่อไปได้ง่าย ใช้ chart อย่างเป็นทางการจาก OpenTelemetry เพื่อสร้าง Deployment หรือ DaemonSet ตามความต้องการของคุณ
- เพิ่ม repo: `helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts`
- อัปเดต cache: `helm repo update`
- ติดตั้งแบบ Deployment (เหมาะสำหรับ low‑traffic):
`helm install otel-collector open-telemetry/opentelemetry-collector -n otel-collector --set mode=deployment`
- หรือเลือก DaemonSet (รวบรวมจากทุก node):
`helm install otel-collector open-telemetry/opentelemetry-collector -n otel-collector --set mode=daemonset`
| Mode | การใช้งานหลัก | ข้อดี | ข้อเสีย |
|---|---|---|---|
| Deployment | รวบรวมจากแอปที่ส่ง telemetry ไปยัง Service | ใช้ทรัพยากรน้อย, ปรับสเกลง่าย | ไม่สามารถเก็บข้อมูล node‑level |
| DaemonSet | ต้องการเมตริกและล็อกจากทุกโหนด | ครอบคลุมทุก node, รวบรวม node‑metrics | ใช้ทรัพยากรเพิ่มตามจำนวน node |
กำหนดค่าผ่าน ConfigMap — Configure Collector
Collector ใช้ไฟล์ YAML (หรือ JSON) ที่เรียกว่า *pipeline* เพื่อกำหนดว่า data จะไหลอย่างไร เราจะสร้าง ConfigMap ที่เก็บ `collector-config.yaml` แล้วให้ Deployment/DaemonSet อ้างอิง
```yaml receivers: otlp: protocols: grpc: http:
processors: batch:
exporters: prometheusremotewrite: endpoint: "http://prometheus.example.com/api/v1/write" loki: endpoint: "http://loki.example.com:3100/loki/api/v1/push"
service: pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [prometheusremotewrite] logs: receivers: [otlp] processors: [batch] exporters: [loki] ```
- สร้าง ConfigMap: `kubectl create configmap otel-config --from-file=collector-config.yaml -n otel-collector`
- แก้ไข Helm values (`values.yaml`) ให้ใช้ ConfigMap ผ่าน `configMap` หรือ `extraVolumes`
- รีสตาร์ท Collector เพื่อให้ค่าใหม่ทำงาน (`helm upgrade …`)
**Tip: เปิด `logging.level: debug` ชั่วคราวเมื่อปรับแต่ง pipeline เพื่อตรวจสอบว่า data ถูกส่งผ่านตามที่คาดไว้
รวบรวม Metrics & Logs แบบศูนย์กลาง — Centralized Collection
หลังจาก Collector ทำงานแล้ว แอปของคุณเพียงแค่ส่งข้อมูลไปยัง endpoint ของ Collector (`otel-collector:4317` หรือ `4318`) Collector จะทำหน้าที่ต่อไปนี้:
- รับ ข้อมูลจากหลายบริการผ่าน OTLP
- ประมวลผล (batch, filter, resource detection)
- ส่งออก ไปยัง Prometheus Remote Write สำหรับ metrics และ Loki สำหรับ logs
- คงที่ การกำหนดค่าเป็นศูนย์กลาง ทำให้การเพิ่มหรือลบแอปใหม่ง่ายกว่าเดิม
- ตั้งค่า SDK ของแอปให้ชี้ไปที่ Collector (`OTEL_EXPORTER_OTLP_ENDPOINT=otel-collector.otel-collector.svc:4317`)
- ใช้ Service Mesh (เช่น Istio) เพื่อทำ sidecar injection อัตโนมัติ ถ้าต้องการเก็บ telemetry จากทุก pod
- ตรวจสอบ latency ของ pipeline ด้วย `receiver/otlp` metric ที่ Collector ส่งออก
ตรวจสอบและดีบัก — Verify and Debug
เพื่อยืนยันว่าข้อมูลไหลอย่างถูกต้อง ให้ตรวจสอบทั้งระดับ Kubernetes และระดับ Collector
- ดู logs ของ Collector: `kubectl logs -l app=otel-collector -n otel-collector`
- เช็คสถานะ pod: `kubectl get pods -n otel-collector`
- ใช้ Prometheus UI ตรวจดูเมตริกของ Collector เช่น `otelcol_receiver_accepted_spans_total`
- ดู Loki query เพื่อตรวจสอบว่าข้อมูล log ถูกส่งมาถูกต้องหรือไม่
**ข้อควรระวัง: หากพบ “connection refused” ให้ตรวจสอบ Service และ NetworkPolicy ระหว่างแอปและ Collector ก่อน
สรุป — Summary
การตั้งค่า OpenTelemetry Collector บน Kubernetes ช่วยให้คุณเก็บเมตริกและล็อกจากหลายบริการในรูปแบบศูนย์กลางอย่างเป็นระบบ
- เลือกโหมด Deployment หรือ DaemonSet ตามลักษณะการใช้งาน
- ใช้ Helm เพื่อติดตั้งอย่างรวดเร็วและอัปเดตเวอร์ชันได้ง่าย
- กำหนด pipeline ใน ConfigMap เพื่อควบคุม flow ของ telemetry
- เชื่อมต่อแอปกับ Collector ผ่าน OTLP endpoint แล้วส่งออกไปยัง Prometheus/Loki
- ตรวจสอบ logs, metrics และ network policy อย่างสม่ำเสมอเพื่อให้ระบบทำงานราบรื่น
สิ่งที่ควรจำ
- เตรียม Kubernetes ให้พร้อม (เวอร์ชัน, Helm, namespace)
- เลือกโหมด Collector ที่เหมาะสม เพื่อประหยัดทรัพยากรและครอบคลุมทุก node
- กำหนดค่า pipeline อย่างเป็นระเบียบ แล้วทดสอบด้วยระดับ debug ก่อนใช้งานจริง
- ตรวจสอบการเชื่อมต่อ ระหว่าง Collector กับ backend ทุกขั้นตอน
- อัปเดต Helm chart อย่างสม่ำเสมอเพื่อรับฟีเจอร์และแพตช์ความปลอดภัยใหม่
ด้วยขั้นตอนเหล่านี้ คุณจะสามารถสร้างระบบ observability ที่มั่นคง รองรับการขยายตัวของแอปพลิเคชันบน Kubernetes ได้อย่างมีประสิทธิภาพ.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีติดตั้งและกำหนดค่า OpenTelemetry Collector บน Kubernetes เพื่อรวบรวมเมตริกซ์และล็อกแบบศูนย์กลาง
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 18 กรกฎาคม 2569 เวลา 19:51



