Monitoring Log Services di OpenSearch dengan OpenTelemetry sebagai Agent Log Collector

OpenTelemetry dapat digunakan sebagai metrics collector pada suatu host untuk bisa mendapatkan data utulisasi seperti CPU, Memory Disk dan sebagainya, selain itu OpenTelemetry bisa digunakan juga sebagai log Collector.

Sebetulnya tidak hanya OpenTelemetry, tetapi FluentBit juga bisa dijadikan sebagai Agent Log Collector, tapi pada case ini yang digunakan adalah OpenTelemetry Sebagai Agent Log Collector.

Pada Usecase ini OpenTelemetry akan digunakan sebagai log collector dari odoo, yaitu file yang saya ambil adalah /var/log/odoo18/odoo18.log. Jadi alurnya OpenTelemetry ini sebagai agent collector dan akan dialirkan ke service DataPrepper sebagai middleware service yang akan melakukan tranform seperti menambahkan grok pattern lalu setelah itu akan masuk kedalam index yang ada di OpenSearch.

Setup OpenTelemetry

Konfigurasi config.yml

Lakukan konfigurasi file config.yml OpenTelemetry untuk bisa membaca log dari /var/log/odoo18/odoo18.log

Pada bagian Processors ada beberapa attribute yang saya tambahkan yaitu environment, hostname, dan ip address. Ini berguna dimana jika ada suatu cluster yang lognya ingin dijadikan 1 index ketika di OpenSearch, tetapi tetap ingin mengetahui log tersebut berasal dari node atau host mana.

Untuk Parameter Processor lainnya bisa lanjutkan baca pada dokumentasi resmi OpenTelemetry berikut:
https://opentelemetry.io/docs/collector/components/processor/

receivers:
  filelog/odoo18-log-server:
      include:
        - /var/log/odoo18/odoo18.log
      start_at: end
      multiline:
        line_start_pattern: '^\d{4}-\d{2}-\d{2}'

processors:
  batch:
  attributes:
    actions:
      - key: "environment"
        value: "odoo-dev"
        action: insert
      - key: "hostname"
        value: "dc1mitoradb"
        action: insert
      - key: "ip_address"
        value: "10.10.5.95"
        action: insert

exporters:
  otlp/odoo18-log-server:
    endpoint: "10.10.5.87:4920"
    tls:
      insecure: true

  pipelines:
    logs:
      receivers: [otlp, filelog/odoo18-log-server]
      processors: [attributes, batch]
      exporters: [debug, otlp/odoo18-log-server]
Config otelcol 1

Restart atau Start Service OpenTelemetry Collector

Setelah sudah melakukan konfigurasi pada file config.yml milik OpenTelemetry, lakukan restart service OpenTelemetry

systemctl restart otelcol-contrib
systemctl status otelcol-contrib 
image 11

Setup DataPrepper

Konfigurasi pipeline DataPrepper

Sebelumnya sudah melakukan konfigurasi file config.yml milik OpenTelelemtry Collector, lalu pada konfigurasi tersebut akan dikirim ke port 4920 dengan protocol TCP.

Maka dari itu dari sisi DataPrepper perlu membuat konfigurasi pipeline untuk menerima log dari port 4920 dengan menggunakan konfigurasi dibawah ini. Pada bagian processor ada proses transform rename field, yaitu nama field awalnya adalah “body” lalu di transform atau di rename menjadi “raw_log”

Lalu setelah itu field “raw_log” akan dilakukan parsing dengan menggunakan grok pattern berikut:
(?s)%{TIMESTAMP_ISO8601:timestamp} %{NUMBER:pid} %{LOGLEVEL:log_level} %{NOTSPACE:user} %{NOTSPACE:module}: %{GREEDYDATA:message_log}

Seperti di OpenTelemetry, di DataPrepper juga bisa untuk menambahkan field, contohnya seperti dibawah ini ada beberapa field yang ditambahkan yaitu:

  • Source, ini field yang memberikan infomasi kalau log ini berasal dari odoo18
  • Path_logs, ini field yang akan memberikan informasi kalau log message ini dari directory /var/log/odoo18/odoo18.log
  • Timestamp_ingest, ini field yang akan memberikan informasi kapan log dari OpenTelemetry diterima oleh DataPrepper dan di insert kedalam index OpenSearch.
# Pipeline Port 4920: log odoo18 server
log-odoo18-logs-pipeline:
  source:
    otel_logs_source:
      ssl: false
      port: 4920

  processor:
    - rename_keys:
        entries:
          - from_key: "body"
            to_key: "raw_log"

    - grok:
        match:
          raw_log:
            - "(?s)%{TIMESTAMP_ISO8601:timestamp} %{NUMBER:pid} %{LOGLEVEL:log_level} %{NOTSPACE:user} %{NOTSPACE:module}: %{GREEDYDATA:message_log}"

    - add_entries:
        entries:
          - key: "source"
            value: "odoo18"
          - key: "path_logs"
            value: "/var/log/odoo18/odoo18.log"

    - date:
        from_time_received: true
        destination: "timestamp_ingest"

  sink:
    - opensearch:
        hosts: [ "https://10.10.5.89:9220" ]
        username: "admin"
        password: "onyxid"
        insecure: true
        index: "logs-services-odoo"
Config Pipeline DataPrepper

Restart Services DataPrepper

Setelah sudah melakukan konfigurasi pipeline DataPrepper, lakukan restart services DataPrepper.

systemctl restart data-prepper
systemctl status data-prepper
Restart Services DataPrepper

Membuat Index

Selanjutkan perlu dilakukan konfigurasi dari sisi OpenSearch yaitu membuat index template. Query dibawah ini adalah membuat index dengan menambahkan index policy.

PUT _index_template/log-services-odoo
{
  "index_patterns": ["log-services-odoo-*"],
  "template": {
    "settings": {
      "plugins.index_state_management.rollover_alias": "log-services-odoo", 
      "plugins.index_state_management.policy_id": "rollover-index-2gb",
      "number_of_shards": 1,
      "number_of_replicas": 1
    }
  }
}

Setelah sudah membuat index template, buat index pertama untuk menerima data dari DataPrepper

PUT log-services-odoo-000001
{
  "aliases": {
    "log-services-odoo": {
      "is_write_index": true
    }
  }
}

Check Data di Index

Selanjutnya, check data di index OpenSearch.

CheckDataLogIndex

Leave a Reply

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