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.
Table of Contents
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]

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

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"

Restart Services DataPrepper
Setelah sudah melakukan konfigurasi pipeline DataPrepper, lakukan restart services DataPrepper.
systemctl restart data-prepper
systemctl status data-prepper

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.

