
ที่มาภาพ: Unknown Source
วิธีตั้งค่าและใช้งาน OpenTelemetry Collector เพื่อติดตาม Metrics ของแอปพลิเคชัน Node.js บน Kubernetes อย่างปลอดภัย
⚡ สรุป 30 วิ
OpenTelemetry Collector เป็นส่วนกลางที่รวบรวม **Metrics**, Traces และ Logs จากแอปพลิเคชันหลาย ๆ ตัว แล้วส่งต่อไปยังระบบจัดเก็บหรือเครื่องมือวิเคราะห์ เราจะใช้ Collector เพื่อติดตาม Metrics ของแอป Node…
Overview
OpenTelemetry Collector เป็นส่วนกลางที่รวบรวม Metrics, Traces และ Logs จากแอปพลิเคชันหลาย ๆ ตัว แล้วส่งต่อไปยังระบบจัดเก็บหรือเครื่องมือวิเคราะห์ เราจะใช้ Collector เพื่อติดตาม Metrics ของแอป Node.js ที่ทำงานบน Kubernetes อย่างปลอดภัย โดยจะตั้งค่าให้รับข้อมูลจาก OpenTelemetry SDK ของ Node.js แล้วส่งต่อไปยัง Prometheus หรือ Grafana
- รวบรวมเมทริกซ์แบบเรียลไทม์
- ลดภาระการเชื่อมต่อจากแต่ละพ็อด
- รองรับการเข้ารหัสและการตรวจสอบตัวตน
Prerequisites
ก่อนเริ่มต้องมีสภาพแวดล้อมพร้อมใช้งานดังนี้
- Kubernetes cluster (เวอร์ชัน 1.21 ขึ้นไป) พร้อม `kubectl` ที่เชื่อมต่อได้
- แอปพลิเคชัน Node.js ที่รันบนพ็อดในคลัสเตอร์
- Helm 3 หรือไฟล์ YAML สำหรับติดตั้ง Collector
- เครื่องมือสังเกตผลลัพธ์ เช่น Prometheus, Grafana
**Tip: ควรตรวจสอบเวอร์ชันของ OpenTelemetry SDK ให้ตรงกับ Collector เพื่อหลีกเลี่ยงความเข้ากันไม่ได้
Install OpenTelemetry Collector
การติดตั้ง Collector มีสองวิธีหลัก: ใช้ Helm หรือใช้ Manifest แบบ Manual
- Helm
- เพิ่มรีโป `otel-collector` ด้วยคำสั่ง `helm repo add otel https://open-telemetry.github.io/opentelemetry-helm-charts`
- ติดตั้งโดยกำหนด namespace `monitoring` และค่าเริ่มต้น `helm install my-collector otel/opentelemetry-collector --namespace monitoring`
- Manifest
- ดาวน์โหลดไฟล์ `otel-collector.yaml` จาก GitHub ของ OpenTelemetry
- ปรับค่าตามสภาพแวดล้อม แล้วใช้ `kubectl apply -f otel-collector.yaml`
Configure Collector for Node.js Metrics
Collector ต้องรู้ว่าจะดึงเมทริกซ์จากไหนและส่งต่อไปยังปลายทางใด
```yaml receivers: otlp: protocols: grpc:
exporters: prometheusremotewrite: endpoint: "http://prometheus-server.monitoring.svc:9090/api/v1/write"
processors: batch:
service: pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [prometheusremotewrite] ```
- ตั้งค่า receiver `otlp` เพื่อรับข้อมูลจาก SDK ของ Node.js ผ่าน gRPC
- ใช้ exporter `prometheusremotewrite` ส่งเมทริกซ์ไปยัง Prometheus Server
Deploy Node.js Application with OpenTelemetry SDK
ในโค้ด Node.js เพิ่มแพคเกจ `@opentelemetry/sdk-node` และตั้งค่า OTLP exporter
```js const { NodeSDK } = require('@opentelemetry/sdk-node'); const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
const metricExporter = new OTLPMetricExporter({ url: 'grpc://otel-collector.monitoring.svc:4317', });
const sdk = new NodeSDK({ metricReader: new PeriodicExportingMetricReader({ exporter: metricExporter, exportIntervalMillis: 60000, }), }); sdk.start(); ```
- ระบุ URL ของ Collector ภายในคลัสเตอร์ (`otel-collector.monitoring.svc`)
- กำหนดช่วงเวลาการส่งเมทริกซ์ exportIntervalMillis ตามความต้องการ
Secure the Collector
เพื่อให้ข้อมูลเมทริกซ์ไม่ถูกดักฟัง เราควรเปิดใช้ TLS และตรวจสอบตัวตนของผู้ส่ง
TLS Configuration
```yaml receivers: otlp: protocols: grpc: tls: cert_file: "/etc/collector/certs/tls.crt" key_file: "/etc/collector/certs/tls.key" ```
- สร้างใบรับรองภายในคลัสเตอร์ (`cert-manager` หรือ `openssl`)
- ใส่ไฟล์ `.crt` และ `.key` เข้าไปใน Secret แล้ว mount ไปที่ Collector
Authentication (mTLS)
```yaml receivers: otlp: protocols: grpc: tls: cert_file: "/etc/collector/certs/tls.crt" key_file: "/etc/collector/certs/tls.key" auth: client_auth_type: "require_and_verify_client_cert" ```
- ผู้ส่ง (Node.js SDK) ต้องใช้ client certificate ที่ลงนามโดย CA เดียวกัน
- เพิ่มการตรวจสอบที่ระดับ `receiver` ทำให้ไม่มีพ็อดใดสามารถส่งข้อมูลปลอมได้
**Tip: อย่าลืมตั้งค่า `serviceAccount` ของ Collector ให้มีสิทธิ์อ่าน Secret ที่เก็บใบรับรอง
Deploy Collector as DaemonSet vs Deployment
| ลักษณะ | DaemonSet | Deployment |
|---|---|---|
| ความครอบคลุม | ติดตั้งบนทุกโหนด เก็บเมทริกซ์จากพ็อดที่รันใน node นั้น ๆ | สามารถสเกลเป็นหลาย replica แต่ไม่ได้รับข้อมูลจาก node ทุกตัวโดยอัตโนมัติ |
| ค่าตั้งค่าเครือข่าย | ใช้ `hostNetwork: true` ได้ง่ายกว่า | ต้องใช้ Service เพื่อทำ load‑balancing |
| ความปลอดภัย | มี surface attack เพิ่มขึ้นเมื่อเปิด `hostPort` | จำกัดการเข้าถึงด้วย Service IP เท่านั้น |
สำหรับกรณี Node.js บน Kubernetes แนะนำให้ใช้ DaemonSet หากต้องการเมทริกซ์จากทุกพ็อดโดยตรง; แต่ถ้าต้องการลด overhead และสามารถรับข้อมูลผ่าน Service ได้ ให้เลือก Deployment
Verify Metrics Flow
เมื่อ Collector ทำงานแล้ว ตรวจสอบขั้นตอนต่อไปนี้
- เปิด Prometheus UI (`http://<prometheus-ip>:9090/graph`) ค้นหาเมทริกซ์ที่ตั้งค่าใน SDK เช่น `process_cpu_seconds_total`
- ใช้ `kubectl logs deployment/otel-collector -n monitoring` ดูว่ามี error เกี่ยวกับ TLS หรือการเชื่อมต่อหรือไม่
- ตรวจสอบว่าเมทริกซ์อัพเดตตามช่วงเวลาที่กำหนด (เช่น ทุก 60 วินาที)
**Warning: หากพบ `UNAVAILABLE` หรือ `PERMISSION_DENIED` ให้ตรวจสอบ cert/key ที่ใช้ในทั้ง Collector และ SDK ว่าเป็นคู่เดียวกันหรือไม่
Best Practices
- ใช้ Helm chart เวอร์ชันล่าสุด เพื่อติดตามการอัปเดตด้าน security patch
- เปิด batch processor เพื่อรวมเมทริกซ์หลายรายการก่อนส่ง ลด network overhead
- ตั้งค่า resource limits สำหรับ Collector (CPU 200 m, Memory 256 Mi) ป้องกันการใช้ทรัพยากรเกินจำเป็น
- ใช้ Namespace isolation (`monitoring` namespace) เพื่อแยกการเข้าถึงของผู้ดูแลระบบและนักพัฒนา
Summary
- OpenTelemetry Collector เป็นจุดศูนย์รวมเมทริกซ์จาก Node.js บน Kubernetes อย่างปลอดภัย
- ตั้งค่า Receiver `otlp`, Exporter `prometheusremotewrite` และ Processor `batch` ให้ทำงานร่วมกันได้
- ใช้ TLS / mTLS เพื่อเข้ารหัสข้อมูลและตรวจสอบตัวตนของ SDK
- เลือก Deploy แบบ DaemonSet หรือ Deployment ตามความต้องการของสภาพแวดล้อม
- ตรวจสอบผลลัพธ์ใน Prometheus และปรับแต่ง Resource Limits เพื่อประสิทธิภาพสูงสุด
สิ่งที่ควรจำ
- ติดตั้ง Collector ผ่าน Helm จะง่ายต่อการอัปเดตและจัดการค่า Config
- TLS เป็นข้อบังคับสำหรับการส่งเมทริกซ์ภายในคลัสเตอร์ production
- ตรวจสอบ Log ของ Collector อย่างสม่ำเสมอเพื่อหาข้อผิดพลาดที่อาจเกิดขึ้น
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- วิธีตั้งค่าและใช้งาน OpenTelemetry Collector เพื่อติดตาม Metrics ของแอปพลิเคชัน Node.js บน Kubernetes อย่างปลอดภัย
- ผู้เขียน
- กองบรรณาธิการ Thai Tech News
- แหล่ง
- บทความต้นฉบับ Thai Tech News · ช่วยร่างด้วย AI, เรียบเรียง/ตรวจสอบโดยกองบรรณาธิการ
- วันที่เผยแพร่
- 11 สิงหาคม 2569 เวลา 17:51



