วิธีตั้งค่าและใช้งาน OpenTelemetry Collector เพื่อติดตาม Metrics ของแอปพลิเคชัน Node.js บน Kubernetes อย่างปลอดภัย

ที่มาภาพ: 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

ลักษณะDaemonSetDeployment
ความครอบคลุมติดตั้งบนทุกโหนด เก็บเมทริกซ์จากพ็อดที่รันใน 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

Related

บทความที่เกี่ยวข้อง

วิธีตั้งค่าและใช้ Supabase Realtime สร้างแอปพลิเคชันเว็บแบบเรียลไทม์อย่างปลอดภัยGrowth
11 สิงหาคม 2569 เวลา 19:00

วิธีตั้งค่าและใช้ Supabase Realtime สร้างแอปพลิเคชันเว็บแบบเรียลไทม์อย่างปลอดภัย

Supabase Realtime ให้คุณสร้างแอปเว็บที่อัปเดตข้อมูลแบบทันทีโดยไม่ต้องรีเฟรชหน้าเว็บ บริการนี้ทำงานบน WebSocket และผสานกับ PostgreSQL อย่างลึกซึ้ง การตั้งค่าอย่างถูกต้องจะช่วยให้ระบบปลอดภัยและรองรับผู้…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ9 นาที
วิธียัง Dependabot เพื่ออัปเดต Dependencies อัตโนมัติบน GitHub อย่างปลอดภัยGrowth
11 สิงหาคม 2569 เวลา 11:30

วิธียัง Dependabot เพื่ออัปเดต Dependencies อัตโนมัติบน GitHub อย่างปลอดภัย

Dependabot คือเครื่องมือของ GitHub ที่สแกนและอัปเดต dependencies ให้โดยอัตโนมัติ ลดความเสี่ยงจากช่องโหว่ที่ยังไม่ได้รับการแก้ไข คุณสามารถเปิดใช้งานได้ในไม่กี่ขั้นตอนและควบคุมการอัพเดทให้เป็นไปตามมาตรฐ…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
วิธีตั้งค่าและใช้งาน WireMock บน Docker สร้าง Mock API เพื่อการทดสอบอัตโนมัติGrowth
10 สิงหาคม 2569 เวลา 20:30

วิธีตั้งค่าและใช้งาน WireMock บน Docker สร้าง Mock API เพื่อการทดสอบอัตโนมัติ

WireMock เป็นเครื่องมือที่ช่วยสร้าง *Mock API* เพื่อจำลองพฤติกรรมของบริการจริงในขั้นตอนทดสอบอัตโนมัติ การใช้งานบน Docker ทำให้การตั้งค่าเป็นแบบ *portable* และสามารถทำงานร่วมกับ CI/CD pipeline ได้อย่าง…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ6 นาที
วิธีตั้งค่าและใช้ Fastlane กับ GitHub Actions เพื่ออัตโนมัติการปล่อยแอป Android iOS อย่างปลอดภัยGrowth
10 สิงหาคม 2569 เวลา 19:00

วิธีตั้งค่าและใช้ Fastlane กับ GitHub Actions เพื่ออัตโนมัติการปล่อยแอป Android iOS อย่างปลอดภัย

Fastlane เป็นเครื่องมือที่ช่วยอัตโนมัติขั้นตอนการสร้างและปล่อยแอป iOS/Android ได้อย่างครบวงจร การผสานกับ GitHub Actions ทำให้กระบวนการ CI/CD สามารถทำงานบนคลาวด์โดยไม่ต้องจัดการเซิร์ฟเวอร์เอง บทความนี้…

ต้นฉบับ TTN · ร่างด้วย AI ตรวจโดยบรรณาธิการ8 นาที
คัดลอกลิงก์แล้ว!