Menyusun konfigurasi collector YAML secara utuh: mendefinisikan receivers (otlp, jaeger, prometheus, filelog), processors (batch, memory_limiter, attributes, resource), exporters (otlp, debug, prometheus), hingga service: pipelines dengan contoh full pipeline OTLP in

Setelah memahami arsitektur collector di episode 9, sekarang kita menulis konfigurasi yang sebenarnya. Collector dikonfigurasi lewat satu file YAML dengan empat bagian: receivers, processors, exporters, dan service. Terlihat sederhana — tetapi konfigurasi inilah yang menentukan apakah observability kalian hemat, aman, dan andal.
Mengapa penting menguasai config collector? Karena hampir semua tunjangan produksi observability — dari redaksi PII sampai sampling tail — hidup di file ini, bukan di kode aplikasi. Kalian akan menghabiskan lebih banyak waktu di file YAML ini daripada di SDK.
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
jaeger:
protocols:
grpc:
endpoint: 0.0.0.0:14250
hostmetrics:
collection_interval: 30shostmetrics adalah receiver yang mengumpulkan metrics sistem (CPU, memory, disk, network) dari host tempat collector berjalan — sumber utama "mengapa server ini lambat?".
processors:
batch:
timeout: 2s
send_batch_size: 1024
memory_limiter:
check_interval: 1s
limit_mib: 512
attributes/route:
actions:
- key: deployment.environment
action: insert
value: production
resource/detect:
detectors: [env, system]Setiap processor adalah blok bernama yang bisa dipakai oleh banyak pipeline sekaligus.
exporters:
otlp/backend:
endpoint: jaeger:4317
tls:
insecure: true
debug:
verbosity: basic
prometheus:
endpoint: 0.0.0.0:8889Nama exporter bisa diberi suffix (otlp/backend, otlp/agent) agar satu tipe exporter bisa dipakai ke tujuan berbeda dalam satu config.
service:
telemetry:
logs:
level: info
pipelines:
traces:
receivers: [otlp, jaeger]
processors: [memory_limiter, batch]
exporters: [otlp/backend]
metrics:
receivers: [otlp, hostmetrics]
processors: [memory_limiter, batch]
exporters: [prometheus, debug]Poin penting: sebuah receiver/processor/exporter yang didefinisikan tidak aktif sampai dirujuk oleh setidaknya satu pipeline di service.pipelines. Ini sumber kebingungan umum — data tidak mengalir bukan karena salah definisi, melainkan karena belum dihubungkan ke pipeline.
Warning
Aturan pipeline: satu sinyal per pipeline. Jangan mencampur traces dan metrics dalam satu pipeline service.pipelines.traces — masing-masing sinyal punya pipeline sendiri. Kesalahan ini menghasilkan error validasi config yang membingungkan pemula.
Mari susun config lengkap yang menerima OTLP dari SDK, menambah Resource, melakukan batch, dan meneruskan ketiga sinyal ke backend. File ini lebih lengkap dari versi episode 0:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
memory_limiter:
check_interval: 1s
limit_mib: 512
spike_limit_mib: 128
resource/add:
attributes:
- key: collector.hostname
value: ${env:HOSTNAME}
action: upsert
batch:
timeout: 2s
send_batch_size: 1024
exporters:
otlp/jaeger:
endpoint: jaeger:4317
tls:
insecure: true
debug:
verbosity: basic
prometheus:
endpoint: 0.0.0.0:8889
namespace: otel
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, resource/add, batch]
exporters: [otlp/jaeger, debug]
metrics:
receivers: [otlp]
processors: [memory_limiter, resource/add, batch]
exporters: [prometheus, debug]
logs:
receivers: [otlp]
processors: [memory_limiter, resource/add, batch]
exporters: [debug]Perhatikan:
memory_limiter dipasang paling awal di setiap pipeline — ia melindungi collector dari OOM (detail di episode 14).resource/add menyisipkan collector.hostname dari environment variable — memakai sintaks ${env:HOSTNAME}.batch dipasang menjelang akhir agar ekspor efisien.debug menampilkan data langsung di log collector — teman debugging paling setia.Jalankan collector dengan file config:
docker run --rm \
-p 4317:4317 -p 4318:4318 -p 8889:8889 \
-v "$PWD/config.yaml:/etc/otelcol-contrib/config.yaml" \
otel/opentelemetry-collector-contrib:0.156.0 \
--config=/etc/otelcol-contrib/config.yamlCek validitas config tanpa menjalankan (berguna di CI):
docker run --rm -v "$PWD/config.yaml:/etc/config.yaml" \
otel/opentelemetry-collector-contrib:0.156.0 \
--config=/etc/config.yaml --validate--validate mengembalikan error jelas jika ada komponen yang tidak dikenal atau pipeline salah — praktik yang wajib dimasukkan ke pipeline CI kalian.
Ketika pipeline tidak mengalir, urutan pemeriksaan yang efisien:
--validate — pastikan config valid secara sintaks.debug exporter — aktifkan di pipeline dan lihat apakah data sampai ke collector.debug — service.telemetry.logs.level: debug untuk melihat kesalahan receiver/processor.netstat -tlnp untuk memastikan port 4317/4318 terbuka.Tip
Mulailah setiap config baru dengan menambahkan debug exporter di semua pipeline. Begitu data terlihat di terminal, baru tambahkan exporter nyata dan hapus debug. Debugging "data tidak muncul di backend" paling cepat diselesaikan dengan mempersempit: apakah data sampai ke collector?
traces bukan trace, metrics bukan metric.localhost di dalam container — menunjuk ke collector itu sendiri, bukan backend; pakai nama service Compose (jaeger:4317).tls.insecure: true untuk backend lokal tanpa TLS — handshake gRPC gagal diam-diam.Pada episode 10 ini, kalian telah menyusun konfigurasi collector secara utuh.
Inti yang harus dibawa pulang:
service.pipelines; satu sinyal per pipeline.memory_limiter, diakhiri dengan batch.--validate dan debug dengan exporter debug.Di episode 11 selanjutnya, kita akan menjelajahi ekosistem receivers & exporters — otlp, jaeger, zipkin, prometheus, kafka, filelog, hostmetrics sebagai receiver; serta otlp, debug, prometheusremotewrite, kafka, dan cloud exporters sebagai tujuan data. Sampai jumpa di episode 11!