Tutorial Setup Log Engine High-Throughput: Vector.dev & ClickHouse di VPS
Poin Kunci Artikel Ini:
- Muat ulang service Grafana.
- Buat Dashboard baru dan tambahkan panel berbasis kueri SQL untuk memantau volume log per menit:
- Karakter dasarnya memang haus memori.
Dilema Log Server: Saat Elasticsearch Makan RAM VPS Anda
Pernah mendapati server tiba-tiba tidak bisa diakses tengah malam, lalu saat dicek via htop ternyata RAM VPS 2GB Anda ludes digulung service pengumpul log? Kejadian ini sangat umum. Aplikasi web Anda sebenarnya hanya butuh 300MB RAM, tapi stack logging tradisional seperti ELK (Elasticsearch, Logstash, Kibana) menyedot 1.5GB RAM hanya untuk beroperasi secara standby.
Logstash dan Elasticsearch berjalan di atas Java Virtual Machine (JVM). Karakter dasarnya memang haus memori. Begitu traffic aplikasi melonjak dan log mengalir deras, OOM (Out of Memory) Killer milik Linux akan bertindak agresif. Sering kali, service aplikasi utama yang justru dibunuh oleh sistem operasi demi menyelamatkan log engine.
Bayangkan Logstash seperti truk kontainer besar yang disewa hanya untuk mengantar selembar surat. Boros tempat, boros bensin. Kita butuh armada yang lebih efisien: sepeda motor balap yang bisa mengantar ribuan surat dalam hitungan detik tanpa makan tempat.
Di sinilah kombinasi Vector.dev dan ClickHouse berperan. Vector bertindak sebagai pengumpul log ultra-cepat berbasis Rust dengan konsumsi RAM di bawah 50MB. ClickHouse berperan sebagai database kolom (columnar OLAP) yang mampu menampung miliaran baris log dengan kompresi data sangat tinggi. Artikel ini membahas langkah demi langkah membangun pipeline log tersebut dari nol di VPS Anda.
Mengapa Kombinasi Vector.dev dan ClickHouse?
Sebelum mengeksekusi perintah di terminal, mari pahami pembagian peran kedua alat ini dalam arsitektur sistem logging modern.
- Vector.dev: Pengganti Logstash atau Fluentd. Ditulis menggunakan bahasa Rust, Vector fokus pada kecepatan eksekusi, keamanan memori, dan penggunaan CPU yang minimal. Vector bertugas mengutip log dari file, systemd journal, atau syslog, memprosesnya (parsing/transform), lalu meneruskannya ke media penyimpanan.
- ClickHouse: Database analytical (OLAP) berbasis kolom. Berbeda dari MySQL yang menyimpan data per baris atau Elasticsearch yang menggunakan inverted index berbasis teks, ClickHouse menyimpan data per kolom secara terpisah. Pendekatan ini menghasilkan rasio kompresi tinggi (menghemat disk hingga 80%) dan pencarian agregasi yang sangat cepat.
Hasil akhir penggabungan ini adalah infrastruktur logging yang mampu menangani belasan ribu log per detik, tetapi tetap berjalan tenang dengan konsumsi memori di bawah 200MB RAM.
Langkah-Langkah Instalasi dan Konfigurasi Teknis
1. Install dan Setup ClickHouse Server
Jalankan perintah berikut pada VPS Linux berbasis Ubuntu atau Debian untuk memasang ClickHouse Server dan Client resmi:
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
sudo apt-get install -y clickhouse-server clickhouse-clientAktifkan dan jalankan service ClickHouse:
sudo systemctl start clickhouse-server
sudo systemctl enable clickhouse-serverBuka CLI ClickHouse melalui terminal untuk membuat struktur database dan tabel penampung log:
clickhouse-clientJalankan perintah DDL berikut di dalam prompt ClickHouse:
CREATE DATABASE IF NOT EXISTS logs;
CREATE TABLE logs.syslogs
(
timestamp DateTime64(3),
host LowCardinality(String),
application LowCardinality(String),
pid UInt32,
message String CODEC(ZSTD(3)),
severity LowCardinality(String)
)
ENGINE = MergeTree()
ORDER BY (timestamp, application);Skema di atas mengimplementasikan engine MergeTree() dengan indeks pengurutan berdasarkan timestamp dan application. Struktur ini memastikan pencarian log berdasarkan rentang waktu dan nama aplikasi berlangsung instan.
2. Install dan Konfigurasi Vector.dev
Pasang Vector pada server menggunakan skrip instalasi resmi:
bash -c "$(curl -sSfL https://setup.vector.dev)" -- --yesBuka berkas konfigurasi Vector yang terletak di /etc/vector/vector.yaml. Ganti seluruh isinya dengan konfigurasi pipeline berikut:
sources:
system_journal:
type: "journald"
current_boot_only: true
transforms:
parse_logs:
type: "remap"
inputs:
- "system_journal"
source: |
.timestamp = .to_timestamp!(.timestamp)
.host = string!(.host || "unknown")
.application = string!(.syslog_identifier || ._systemd_unit || "system")
.pid = parse_int(.PID) ?? 0
.message = string!(.message || "")
.severity = string!(.priority || "info")
sinks:
clickhouse_out:
type: "clickhouse"
inputs:
- "parse_logs"
endpoint: "http://127.0.0.1:8123"
database: "logs"
table: "syslogs"
skip_unknown_fields: true
compression: "gzip"
batch:
max_bytes: 1048576
timeout_secs: 5Konfigurasi di atas membagi alur kerja menjadi 3 komponen mendasar: sources (membaca log dari systemd journald), transforms (mengolah dan memetakan field data menggunakan Vector Remap Language), serta sinks (mengirimkan data terkelompok secara berkala ke endpoint HTTP ClickHouse).
Jalankan service Vector untuk memulai pengumpulan log:
sudo systemctl restart vector
sudo systemctl enable vector3. Verifikasi Data Streaming Log
Untuk meyakinkan bahwa log dari systemd berhasil disalurkan oleh Vector ke ClickHouse, masuk kembali ke clickhouse-client dan jalankan kueri berikut:
SELECT count() FROM logs.syslogs;Jumlah baris akan terus bertambah seiring masuknya event sistem baru. Untuk melihat 5 baris log paling gres beserta detail isinya, gunakan kueri berikut:
SELECT timestamp, application, message FROM logs.syslogs ORDER BY timestamp DESC LIMIT 5;Best Practice: Optimasi Skema, Retention TTL, dan Grafana
Otomatisasi Hapus Log Lama Pakai TTL (Time-To-Live)
Membiarkan log terkumpul tanpa batas akan memenuhi ruang penyimpanan VPS secara perlahan. ClickHouse menyediakan fitur penghapusan otomatis berbasis waktu tanpa perlu bergantung pada cronjob tambahan.
Terapkan aturan pembersihan data otomatis untuk menyimpan log selama 30 hari saja:
ALTER TABLE logs.syslogs MODIFY TTL timestamp + INTERVAL 30 DAY;ClickHouse akan menghapus partisi data yang umurnya melewati batas 30 hari secara berkala di latar belakang.
Efisiensi Tipe Data LowCardinality dan Kompresi ZSTD
Pada skema tabel ClickHouse yang kita buat, kolom host, application, dan severity dibungkus dengan tipe LowCardinality(String). Fitur ini mengubah string berulang menjadi indeks angka internal (seperti pembuatan kamus kata). Jika aplikasi mencetak jutaan baris log dengan nama aplikasi yang sama, ClickHouse cukup menyimpan teks nama aplikasi tersebut satu kali saja.
Sementara itu, kolom message menggunakan kompresi CODEC(ZSTD(3)). Algoritma ZSTD mampu menghasilkan rasio pemampatan teks yang tinggi tanpa membebani kinerja CPU server saat data ditulis.
Visualisasi Log Menggunakan Grafana
Log yang tersimpan rapat di ClickHouse dapat dihubungkan ke dashboard Grafana untuk keperluan analisis visual tanpa perlu memasang Kibana.
- Pasang plugin ClickHouse pada Grafana:
grafana-cli plugins install grafana-clickhouse-datasource - Muat ulang service Grafana.
- Tambahkan Data Source baru, pilih ClickHouse. Masukkan URL endpoint
http://localhost:8123dan nama databaselogs. - Buat Dashboard baru dan tambahkan panel berbasis kueri SQL untuk memantau volume log per menit:
SELECT
$__timeGroup(timestamp, '1m') AS time,
application,
count() AS total
FROM logs.syslogs
WHERE timestamp >= $__fromTime AND timestamp <= $__toTime
GROUP BY time, application
ORDER BY time ASCTroubleshooting Masalah Umum
Saat menerapkan alur pencatatan log ini di server produksi, beberapa kendala umum yang mungkin muncul beserta langkah pemecahannya antara lain:
- Error ClickHouse "Too many parts": Masalah ini timbul saat Vector terlalu sering mengirimkan data dalam ukuran batch yang sangat kecil. Solusinya, naikkan parameter
batch.timeout_secsmenjadi 5-10 detik danbatch.max_bytesmenjadi 2MB atau 5MB padavector.yaml. ClickHouse dirancang khusus untuk memproses penulisan data berukuran besar sekaligus (bulk insert). - Lonjakan Memori pada Vector: Jika konsumsi RAM Vector mendadak naik, periksa konektivitas jaringan atau status service ClickHouse. Tambahkan opsi disk buffer pada Vector agar antrean log ditampung sementara di dalam penyimpanan disk lokal saat service ClickHouse tidak bisa dijangkau, sehingga RAM VPS tetap aman.
Kesimpulan
Memindahkan sistem pengumpul log dari stack berbasis JVM yang berat ke kombinasi Vector.dev dan ClickHouse merupakan langkah nyata untuk menghemat biaya operasional VPS. Anda mendapatkan platform monitoring log terpusat dengan kecepatan kueri tinggi, rasio kompresi hemat ruang disk, dan konsumsi RAM yang stabil di bawah 200MB.
Cobalah memasang Vector.dev di salah satu node VPS Anda hari ini, hubungkan ke instans ClickHouse lokal, dan perhatikan penurunan penggunaan resource server Anda secara langsung.



