All Products
Search
Document Center

Managed Service for Prometheus:Tulis metrik ke Managed Service for Prometheus dengan OpenTelemetry Collector

Last Updated:Jun 23, 2026

Topik ini menjelaskan cara mengirim metrik ke Managed Service for Prometheus dari aplikasi yang diterapkan di kluster Container Service for Kubernetes (ACK) dan diinstrumentasi dengan OpenTelemetry SDK. Anda dapat menyatukan pengumpulan metrik OpenTelemetry (OTel) native, metrik bisnis kustom, serta metrik yang dikonversi dari rentang jejak untuk mencapai observabilitas aplikasi secara menyeluruh. Mengonversi data jejak menjadi metrik dapat secara signifikan mengurangi volume ingesti data.

Ikhtisar OpenTelemetry

OpenTelemetry (OTel) adalah framework observabilitas open-source yang menyediakan serangkaian API, SDK, dan alat terpadu untuk menghasilkan, mengumpulkan, dan mengekspor data telemetri dari sistem terdistribusi, termasuk metrik, jejak, dan log. Tujuan utamanya adalah mengatasi fragmentasi data observabilitas di berbagai alat dan sistem.

Metrik OpenTelemetry adalah data terstruktur yang mengkuantifikasi perilaku sistem dan digunakan untuk memantau kinerja serta kesehatan sistem. Sumber metrik bergantung pada instrumentasi SDK atau agen untuk bahasa pemrograman tertentu. Untuk aplikasi Java, metrik biasanya mencakup metrik standar Java Virtual Machine (JVM), metrik kustom yang diinstrumentasi pengguna, serta metrik yang berasal dari data jejak.

Metrik OpenTelemetry dirancang agar kompatibel dengan Prometheus. Dengan menggunakan OpenTelemetry Collector, Anda dapat mengonversi metrik ke format Prometheus untuk integrasi tanpa hambatan dengan Managed Service for Prometheus.

Peran OpenTelemetry Collector

OpenTelemetry Collector adalah pipeline pemrosesan data yang dapat diperluas untuk mengumpulkan data telemetri dari sumber seperti aplikasi dan layanan, lalu mengonversinya ke format yang dibutuhkan oleh sistem target seperti Prometheus.

Pengumpulan data

Aplikasi menggunakan OpenTelemetry SDK untuk menghasilkan data metrik dan mengirimkannya ke Collector menggunakan OpenTelemetry Protocol (OTLP) atau protokol lain, seperti protokol native Prometheus.

Konversi data

Ekstensi Collector dari komunitas menyediakan dua exporter untuk mengonversi metrik OTel ke format Prometheus.

  • Prometheus Exporter mengonversi metrik OpenTelemetry ke format Prometheus dan menyediakan titik akhir bagi agen Prometheus untuk mengambil data.

    1. Pemetaan nama metrik: Mengonversi nama metrik OpenTelemetry ke format yang kompatibel dengan Prometheus.

    2. Penanganan label: Mempertahankan atau mengganti nama label agar sesuai dengan aturan penamaan Prometheus.

    3. Konversi tipe data:

      • gauge → Prometheus gauge

      • sum → Prometheus counter atau gauge (berdasarkan properti Monotonic)

      • histogram → Prometheus histogram (dengan menggunakan sub-metrik bucket dan sum)

      Contoh konfigurasi berikut mengekspos titik akhir pengambilan metrik pada port 1234.

      exporters:
        prometheus:
          endpoint: "0.0.0.0:1234"
          namespace: "acs"
          const_labels:
            label1: value1
          send_timestamps: true
          metric_expiration: 5m
          enable_open_metrics: true
          add_metric_suffixes: false
          resource_to_telemetry_conversion:
            enabled: true
  • Prometheus Remote Write Exporter mengonversi metrik OpenTelemetry ke format Prometheus dan menuliskannya langsung ke layanan Prometheus target menggunakan protokol Remote Write.

    Seperti Prometheus Exporter, exporter ini juga mengonversi format data. Kode berikut memberikan contoh konfigurasinya:

    exporters:
      prometheusremotewrite:
        endpoint: http://<Prometheus Endpoint>/api/v1/write
        namespace: "acs"
        resource_to_telemetry_conversion:
          enabled: true
        timeout: 10s   
        headers:
          Prometheus-Remote-Write-Version: "0.1.0"
        external_labels:
          data-mode: metrics

Praktik terbaik untuk aplikasi di kluster ACK

Langkah 1: Siapkan Managed Service for Prometheus

  • Pemantauan Prometheus diaktifkan untuk kluster

    Jika pemantauan Prometheus diaktifkan untuk kluster ACK Anda, instans Prometheus sudah tersedia. Masuk ke Konsol CloudMonitor. Di panel navigasi kiri, pilih Managed Service for Prometheus > Instances. Temukan instans Prometheus yang memiliki nama sama dengan kluster ACK Anda dan pastikan instans tersebut berada dalam status Running di wilayah yang ditentukan.

  • Pemantauan Prometheus tidak diaktifkan untuk kluster

    Masuk ke Konsol ACK. Klik nama kluster target dan buka halaman Add-ons. Di tab Logging and Monitoring, temukan dan instal komponen ack-arms-prometheus. Setelah instalasi, pemantauan Prometheus akan diaktifkan secara otomatis untuk kluster tersebut. Verifikasi bahwa komponen telah terinstal.

Langkah 2: Terapkan Collector dalam mode sidecar

Untuk perhitungan metrik yang akurat, semua metrik dan jejak dari satu Pod harus dikirim ke Collector yang sama. Penerapan dalam mode gateway memerlukan konfigurasi load balancing yang kompleks. Oleh karena itu, kami merekomendasikan agar Anda menerapkan Collector dalam mode sidecar.

Mode Prometheus Exporter

Catatan

Metode ini membebaskan Anda dari menangani otentikasi jalur tulis Prometheus. Anda juga dapat mengubah konfigurasi pengambilan untuk menyesuaikan interval pengumpulan metrik.

Diagram arsitektur
Contoh konfigurasi penerapan
# Contoh Deployment Kubernetes
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      labels:
        # Tambahkan label spesifik ke Pod. Label biasanya dinamai sesuai aplikasi untuk memudahkan konfigurasi pengambilan metrik.
        observability: opentelemetry-collector
    spec:
      volumes:
      - name: otel-config-volume
        configMap:
          # Konfigurasi ini dibuat berdasarkan contoh konfigurasi Collector berikut.
          name: otel-config
      containers:
        - name: app
          image: your-app:latest
          env:
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: http://localhost:4317
        - name: otel-collector
          # Anda dapat menggunakan image Collector yang kami sediakan. Image tersebut mencakup ekstensi terkait Prometheus.
          # Ganti <regionid> dalam nama image dengan ID wilayah Anda.
          image: registry-<regionId>.ack.aliyuncs.com/acs/otel-collector:v0.128.0-7436f91	
          args: ["--config=/etc/otel/config/otel-config.yaml"]
          ports:
            - containerPort: 1234  # Titik akhir Prometheus
              name: metrics
          volumeMounts:
          - name: otel-config-volume
            mountPath: /etc/otel/config</regionid>
Contoh konfigurasi Collector
Catatan

Konfigurasikan batas sumber daya (CPU dan memori) untuk Collector berdasarkan volume permintaan aplikasi Anda guna memastikan Collector mampu memproses seluruh data.

apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-config
  namespace: <app-namespace>
data:
  otel-config.yaml: |
    extensions:
      zpages:
        endpoint: localhost:55679
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
      memory_limiter:
        # 75% dari memori maksimum hingga 2 GB
        limit_mib: 1536
        # 25% dari batas hingga 2 GB
        spike_limit_mib: 512
        check_interval: 5s
      resource:
        attributes:
          - key: process.runtime.description
            action: delete
          - key: process.command_args
            action: delete
          - key: telemetry.distro.version
            action: delete
          - key: telemetry.sdk.name
            action: delete
          - key: telemetry.sdk.version
            action: delete
          - key: service.instance.id
            action: delete
          - key: process.runtime.name
            action: delete
          - key: process.runtime.description
            action: delete
          - key: process.pid
            action: delete
          - key: process.executable.path
            action: delete
          - key: process.command.args
            action: delete
          - key: os.description
            action: delete
          - key: instance
            action: delete
          - key: container.id
            action: delete
    connectors:
      spanmetrics:
        histogram:
          explicit:
            buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10]
        dimensions: 
          - name: http.method
            default: "GET"
          - name: http.response.status_code
          - name: http.route
            # Atribut kustom
          - name: user.id
        metrics_flush_interval: 15s
        exclude_dimensions:
        metrics_expiration: 3m
        events:
          enabled: true
          dimensions: 
          - name: default
            default: "GET"
    exporters:
      debug:
        verbosity: detailed
      prometheus:
        endpoint: "0.0.0.0:1234"
        namespace: "acs"
        const_labels:
          label1: value1
        send_timestamps: true
        metric_expiration: 5m
        enable_open_metrics: true
        add_metric_suffixes: false
        resource_to_telemetry_conversion:
          enabled: true
    service:
      pipelines:
        logs:
          receivers: [otlp]
          exporters: [debug]
        traces:
          receivers: [otlp]
          processors: [resource]
          exporters: [spanmetrics]
        metrics:
          receivers: [otlp]
          processors: [memory_limiter, batch]
          exporters: [prometheus]
        metrics/2:
          receivers: [spanmetrics]
          exporters: [prometheus]
      extensions: [zpages]

Konfigurasi ini memproses data metrik dan jejak yang masuk. Konfigurasi ini menggunakan processor tipe resource untuk menghapus atribut lingkungan yang umumnya tidak relevan, sehingga mencegah volume data metrik menjadi terlalu besar. Konfigurasi ini juga menggunakan spanmetrics untuk mengonversi statistik span penting menjadi metrik.

Konfigurasi tugas pengambilan
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: opentelemetry-collector-podmonitor
  namespace: default
  annotations:
    arms.prometheus.io/discovery: "true"
spec:
  selector:
    matchLabels:
      observability: opentelemetry-collector
  podMetricsEndpoints:
  - port: metrics
    interval: 15s
    scheme: http
    path: /metrics

Mode Prometheus Remote Write Exporter

Catatan
  • Metode ini cocok untuk skenario dengan volume data besar atau pengambilan yang tidak stabil, di mana Collector menulis langsung ke instans Prometheus.

  • Konfigurasinya lebih kompleks karena Anda perlu mengonfigurasi jalur penulisan data.

Diagram arsitektur
Persiapan jalur penulisan data

Dalam mode ini, Collector menulis data langsung ke instans Prometheus. Anda harus terlebih dahulu mendapatkan titik akhir Prometheus dan informasi otentikasi.

  • Dapatkan titik akhir

    Masuk ke Konsol CloudMonitor. Di panel navigasi kiri, pilih Managed Service for Prometheus > Instances dan temukan instans Prometheus yang sesuai dengan kluster Anda. ID dan nama instans Prometheus biasanya sama dengan ID dan nama kluster ACK. Klik nama instans target. Di halaman Settings, temukan Remote Write URL dan salin alamat jaringan internal untuk digunakan nanti.

  • Dapatkan kredensial otentikasi

    Pilih salah satu metode berikut:

    • Instans Prometheus V2 mendukung kebijakan tanpa kata sandi yang memungkinkan penulisan tanpa kata sandi dari dalam virtual private cloud (VPC) kluster.

    • Buat pengguna RAM untuk menulis data metrik, berikan kebijakan sistem AliyunPrometheusMetricWriteAccess kepada pengguna RAM tersebut, lalu peroleh Pasangan Kunci Akses-nya. ID AccessKey digunakan sebagai username dan Rahasia AccessKey digunakan sebagai password untuk menulis data.

Contoh konfigurasi penerapan

Konfigurasi penerapan Collector sama dengan mode Prometheus Exporter. Untuk informasi lebih lanjut, lihat contoh konfigurasi penerapan untuk mode Prometheus Exporter.

Contoh konfigurasi Collector
apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-config
  namespace: <app-namespace>
data:
  otel-config.yaml: |
    extensions:
    zpages:
      endpoint: localhost:55679
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
      memory_limiter:
        # 75% dari memori maksimum hingga 2 GB
        limit_mib: 1536
        # 25% dari batas hingga 2 GB
        spike_limit_mib: 512
        check_interval: 5s
      resource:
        attributes:
          - key: process.runtime.description
            action: delete
          - key: process.command_args
            action: delete
          - key: telemetry.distro.version
            action: delete
          - key: telemetry.sdk.name
            action: delete
          - key: telemetry.sdk.version
            action: delete
          - key: service.instance.id
            action: delete
          - key: process.runtime.name
            action: delete
          - key: process.runtime.description
            action: delete
          - key: process.pid
            action: delete
          - key: process.executable.path
            action: delete
          - key: process.command.args
            action: delete
          - key: os.description
            action: delete
          - key: instance
            action: delete
          - key: container.id
            action: delete
    connectors:
      spanmetrics:
        histogram:
          explicit:
            buckets: [0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10]
        dimensions: 
          - name: http.method
            default: "GET"
          - name: http.response.status_code
          - name: http.route
            # Atribut kustom
          - name: user.id
        metrics_flush_interval: 15s
        exclude_dimensions:
        metrics_expiration: 3m
        events:
          enabled: true
          dimensions: 
          - name: default
            default: "GET"
    exporters:
      debug:
        verbosity: detailed
      prometheusremotewrite:
        # Ganti ini dengan alamat jaringan internal titik akhir Prometheus Remote Write.
        endpoint: http://<Endpoint>/api/v3/write
        namespace: "acs"
        resource_to_telemetry_conversion:
          enabled: true
        timeout: 10s   
        headers:
          Prometheus-Remote-Write-Version: "0.1.0"
          # Header ini diperlukan jika kebijakan tanpa kata sandi tidak diaktifkan.
          Authorization: Basic <base64-encoded-username-password>
        external_labels:
          data-mode: metrics
    service:
      pipelines:
        logs:
          receivers: [otlp]
          exporters: [debug]
        traces:
          receivers: [otlp]
          processors: [resource]
          exporters: [spanmetrics]
        metrics:
          receivers: [otlp]
          processors: [memory_limiter, batch]
          exporters: [prometheusremotewrite]
        metrics/2:
          receivers: [spanmetrics]
          exporters: [prometheusremotewrite]
      extensions: [zpages]
  • Ganti URL titik akhir Prometheus Remote Write dalam konfigurasi dengan URL yang telah Anda peroleh.

  • Untuk menghasilkan nilai base64-encoded-username-password, jalankan perintah berikut:

    echo -n 'AK:SK' | base64

Langkah 3: Verifikasi