Mengirim Metrics Linux OpenTelemetry ke OpenSearch menggunakan Data Prepper

Menggunakan OpenTelemetry untuk sebagai collector host metrics di linux, ini bisa digunakan pada sistem operasi linux. Seperti Node Exporter yang biasa digunakan untuk Prometheus, opentelemetry collector juga bisa untuk collect host metrics, seperti mengumpulkan metrik utilisasi sistem (host metrics) seperti CPU, Memori, Disk, dan Jaringan.

Saat ini saya menggunakan usecase untuk mengirim metricsnya ke OpenSearch melalui Data Prepper. Data Prepper sebagai middleware (penerima) sebelum dikirimkan ke OpenSearch.

Install dan Konfigurasi OpenTelemetry Collector

Check versi Terbaru OpenTelemetry

Lakukan check versi latest OpenTelemetry dari repo OpenTelemetry dengan menjalankan perintah dibawah ini.

LATEST_VERSION=$(curl -s https://api.github.com/repos/open-telemetry/opentelemetry-collector-releases/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
    echo "Mengunduh OpenTelemetry Collector Contrib versi: $LATEST_VERSION"

Download OpenTelemetry versi latest

Setelah sudah melakukan pengecekan versi latest OpenTelemetry, download versi latest OpenTelemetry dengan perintah dibawah.

Ubuntu, Debian dan turunannya

Jika menggunakan distro linux ubuntu, debian dan turunannya bisa gunakan perintah dibawah:

wget "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v${LATEST_VERSION}/otelcol-contrib_${LATEST_VERSION}_linux_amd64.deb"

RHEL, Rocky dan turunannya

Jika menggunakan distro linux RHEL, Rocky dan turunannya bisa gunakan perintah dibawah:

wget "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v${LATEST_VERSION}/otelcol-contrib_${LATEST_VERSION}_linux_amd64.rpm"

Install OpenTelemetry

Setelah proses download selesai, lakukan installasi dengan perintah dibawah ini.

Ubuntu, Debian dan turunannya

sudo dpkg -i "otelcol-contrib_${LATEST_VERSION}_linux_amd64.deb"

RHEL, Rocky dan turunannya

sudo rpm -ivh "otelcol-contrib_${LATEST_VERSION}_linux_amd64.rpm"

Konfigurasi OpenTelemetry

Setelah proses install sudah selesai, lakukan konfigurasi dengan melakukan edit pada file config.yml yang ada di directory /etc/otelcol-contrib/

image 13

karena usecasenya disini saya ingin store datanya ke OpenSearch melalui Data Prepper, maka untuk konfigurasi exporter endpoint diarahkan ke URL Endpoint Data Prepper di IP Address dan port 10.10.5.87:9902

receivers:
  hostmetrics:
    collection_interval: 30s
    scrapers:
      cpu:
      disk:
      filesystem:
      load:
      memory:
      network:
      process:
      processes:
      paging:

processors:
  resource:
    attributes:
      - key: hostname
        value: "docker-honet"
        action: insert
      - key: ip_address
        value: "192.168.201.18"
        action: insert

exporters:
  otlp:
    endpoint: "10.10.5.87:9902"
    tls:
      insecure: true

service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [resource]
      exporters: [otlp]
image 14

Ada beberapa metrics yang harus diaktifkan jika ingin menggunakan metrics tersebut, untuk melakukan enablenya bisa dengan merubah konfigurasi openTelemetry Collector (config.yml) dengan konfigurasi berikut ini:

Pada bagian receivers ada perbedaan yang signifikan yaitu ada beberapa metrics yang harus diberikan parameter true agar metrics tersebut bisa muncul di index OpenSearch.

receivers:
  # ==========================================
  # FOR METRICS
  # ==========================================
  hostmetrics:
    collection_interval: 30s
    scrapers:
      cpu:
        metrics:
          system.cpu.logical.count:
            enabled: true
          system.cpu.time:
            enabled: true
          system.cpu.frequency:
            enabled: true
          system.cpu.physical.count:
            enabled: true
          system.cpu.utilization:
            enabled: true

      disk:
        metrics:
          system.disk.io:
            enabled: true
          system.disk.io_time:
            enabled: true
          system.disk.merged:
            enabled: true
          system.disk.operation_time:
            enabled: true
          system.disk.operations:
            enabled: true
          system.disk.pending_operations:
            enabled: true
          system.disk.weighted_io_time:
            enabled: true

      filesystem:
        metrics:
          system.filesystem.inodes.usage:
            enabled: true
          system.filesystem.usage:
            enabled: true
          system.filesystem.utilization:
            enabled: true

      load:
        metrics:
          system.cpu.load_average.15m:
            enabled: true
          system.cpu.load_average.1m:
            enabled: true
          system.cpu.load_average.5m:
            enabled: true

      memory:
        metrics:
          system.memory.usage:
            enabled: true
          system.linux.memory.available:
            enabled: true
          system.linux.memory.dirty:
            enabled: true
          system.memory.limit:
            enabled: true
          system.memory.linux.hugepages.limit:
            enabled: true
          system.memory.linux.hugepages.page_size:
            enabled: true
          system.memory.linux.hugepages.reserved:
            enabled: true
          system.memory.linux.hugepages.surplus:
            enabled: true
          system.memory.linux.hugepages.usage:
            enabled: true
          system.memory.linux.hugepages.utilization:
            enabled: true
          system.memory.linux.shared:
            enabled: true
          system.memory.page_size:
            enabled: true
          system.memory.utilization:
            enabled: true

      network:
        metrics:
          system.network.connections:
            enabled: true
          system.network.dropped:
            enabled: true
          system.network.errors:
            enabled: true
          system.network.io:
            enabled: true
          system.network.packets:
            enabled: true

      paging:
        metrics:
          system.paging.faults:
            enabled: true
          system.paging.operations:
            enabled: true
          system.paging.usage:
            enabled: true
          system.paging.utilization:
            enabled: true
            
      processes:
        metrics:
          system.processes.count:
            enabled: true
          system.processes.created:
            enabled: true

      process:
        mute_process_name_error: true
        mute_process_exe_error: true
        mute_process_io_error: true
        metrics:
          process.cpu.time:
            enabled: true
          process.disk.io:
            enabled: true
          process.memory.usage:
            enabled: true
          process.memory.virtual:
            enabled: true
          process.context_switches:
            enabled: true
          process.cpu.utilization:
            enabled: true
          process.disk.operations:
            enabled: true
          process.handles:
            enabled: true
          process.memory.utilization:
            enabled: true
          process.threads:
            enabled: true
          process.open_file_descriptors:
            enabled: false
          process.signals_pending:
            enabled: false
          process.uptime:
            enabled: true

processors:
  attributes:
    actions:
      - key: "environment"
        value: "production"
        action: insert
      - key: "hostname"
        value: "dev-w1.onyx.id"
        action: insert
      - key: "ip_address"
        value: "172.17.8.82"
        action: insert

exporters:
  otlp/node1: 
    endpoint: "172.17.8.147:4911"
    tls:
      insecure: true
  otlp/node2: 
    endpoint: "10.10.5.87:4911"
    tls:
      insecure: true

service:
  pipelines:
    # --- Metrics
    metrics:
      receivers: [hostmetrics]
      processors: [attributes]
      exporters: [otlp/node1, otlp/node2]

Start Service OpenTelemetry Collector

Setelah konfigurasi sudah selesai, lakukan start service OpenTelemetry Collector dengan perintah berikut:

systemctl start otelcol-contrib
systemctl status otelcol-contrib
image 15

Konfigurasi Pipeline Data Prepper

Membuat dan Konfigurasi Pipeline Data Prepper

Buat pipeline Data Prepper di directory pipeline pada working directory Data Prepper, untuk services Data Prepper saya terinstall atau working directory ada di /opt/data-prepper/pipeline

image 16

Tambahkan konfigurasi pipeline Data Prepper dibawah ini, pastikan untuk port sourcenya sesuai dengan konfigurasi Exporter OpenTelemetry yang sudah di konfigurasi sebelumnya.

metrics-pipeline:
  source:
    otel_metrics_source:
      port: 9902       
      ssl: false
      
  processor:
    - date:
        from_time_received: true
        destination: "timestamp_ingest"
        
  sink:
    - opensearch:
        hosts: ["https://10.x.x.x:9220"]
        username: "admin"
        password: "xxxxxx"
        insecure: true
        index: "opentelemetry-metrics-raw-%{yyyy.MM.dd}"
Konfig Pipeline DataPrepper

Start/Restart Services Data Prepper

Setelah sudah melakukan konfigurasi pipeline Data Prepper lakukan start atau restart service Data Prepper.

systemctl start data-prepper
systemctl status data-prepper
image 17

Catatan: Pastikan tidak ada error pada log Data Prepper dan OpenTelemetry Collector sebelum check data di OpenSearch

Check Data di OpenSearch

Berikutnya check data di index OpenSearch, apakah datanya sudah masuk dengan menggunakan perintah curl atau query langsung dari dashboard OpenSearch

GET fluentbit-metrics-node-*/_search
image 18

curl -k -u 'admin:admin' -X GET "https://10.10.5.89:9220/fluentbit-metrics-node-*/_search?pretty"
OpenTelemetry DataPrepper OpenSearch

List Metrics

Berikut list metrics yang disediakan oleh OpenTelemetry

  • process.cpu.time
  • process.memory.usage
  • process.memory.virtual
  • process.cpu.utilization
  • system.cpu.time
  • process.context_switches
  • process.paging.faults
  • process.memory.utilization
  • process.threads
  • process.uptime
  • system.disk.io
  • system.disk.merged
  • system.disk.operation_time
  • system.disk.operations
  • system.network.connections
  • system.filesystem.usage
  • system.disk.io_time
  • system.disk.pending_operations
  • system.disk.weighted_io_time
  • system.memory.usage
  • system.filesystem.inodes.usage
  • system.network.dropped
  • system.network.errors
  • system.network.io
  • system.network.packets
  • process.disk.io
  • system.cpu.utilization
  • system.cpu.load_average.15m
  • system.cpu.load_average.1m
  • system.cpu.load_average.5m
  • system.memory.utilization
  • system.processes.count
  • system.cpu.frequency
  • system.paging.operations
  • system.cpu.logical.count
  • system.filesystem.utilization
  • system.paging.faults
  • system.paging.usage
  • system.paging.utilization
  • process.disk.operations
  • system.memory.linux.hugepages.usage
  • system.cpu.physical.count
  • system.processes.created
  • system.linux.memory.available
  • system.memory.limit
  • system.linux.memory.dirty
  • system.memory.linux.hugepages.limit
  • system.memory.linux.hugepages.page_size
  • system.memory.linux.hugepages.reserved
  • system.memory.linux.hugepages.surplus
  • system.memory.linux.shared
  • system.memory.page_size
  • process.open_file_descriptors
  • process.signals_pending

Refrensi:

  • https://opentelemetry.io/
  • https://docs.github.com/en/[email protected]/admin/monitoring-and-managing-your-instance/monitoring-your-instance/opentelemetry-metrics/configuring-opentelemetry-for-your-instance
  • https://github.com/open-telemetry

Leave a Reply

Your email address will not be published. Required fields are marked *