Install Loki Server Sebagai Log Aggregation
Ada beberapa developer yang memakai Sentry sebagai error catch log nya, sebagian ada yang memakai Google Cloud Logging atau Amazon CloudWatch karena simple, cepat dan pasti "production ready" akan tetapi yaa pasti menimbulkan cost sebagai tradeoff. Untuk startup kecil sih paling cocok menurut saya pribadi adalah bikin 1 VM/Node yang berfungsi sebagai all in support, termasuk untuk install log aggregation ini. Kecuali kalo budget bukan concern yaaa saya sarankan pakai yang berbayar saja, biar bisa fokus ke development aplikasinya.
Salah satu opsi yang bisa dipakai adalah Loki, nah pada artikel kali ini saya coba untuk buat step by step riset saya terkait Loki ini dengan mengkombinasikan dengan dashboard Grafana, btw Grafana ini bukan untuk Loki saja yaaa, tapi dia bisa di koneksikan ke beberapa source data termasuk Tracer misal pakai Jaeger/Tempo, atau untuk metrik jangka panjang misal pakai Mimir, nah untuk singkatan techstack terkenalnya adalah LGTM (Loki, Grafana, Tempo, dan Mimir). Untuk kali ini kita bahas terkait instalasi Grafana + Loki Server 🖥
Prerequisite ℹ
Sebelum mulai, pastikan teman-teman sudah install beberapa kebutuhan berikut yaaa, jika belum cari langsung sendiri via Google cara installnya seperti apa, karena tidak dibahas disini, oiya disini kita instalasinya langsung pada VPS yaa:
- Webserver Nginx
- Docker
- Docker Compose
1. Installasi "grafana" 🌗
Masuk ke VPS pakai SSH, kemudian bikin folder didalam user > grafana, kemudian bikin 1 file docker-compose.yml yang berisi:
version: '3.3'
services:
collector:
image: grafana/otel-lgtm:0.6.0
ports:
- '4317:4317'
- '4318:4318'
- '3000:3000'
healthcheck:
test: curl --silent --fail localhost:3000 || exit 1
interval: 5s
timeout: 5s
retries: 5
start_period: 5s
Kemudian run pakai:
docker-compose up -d
Oiya cek juga, apakah kamu pakai firewall? jika iya cek dulu apakah port diatas bisa diakses (terutama kalo kamu pakai ip langsung, tapi kalo pakai nginx reverse proxy, harusnya tidak perlu, untuk artikel bikin reverse proxy bisa dicari di google yaa)
sudo ufw status numbered
Nanti muncul list port yg terbuka pada VPS mu seperti ini:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] Nginx Full ALLOW IN Anywhere
[ 3] 4317 ALLOW IN Anywhere
[ 4] 8911 ALLOW IN Anywhere
Jika belum ada port (pada docker-compose.yml) yang terdaftar, maka add dulu pakai:
sudo ufw allow 4317
Dan jangan lupa restart nginx
sudo ufw reload
Jika sudah sukses dan bisa berjalan dengan baik, bisa dicek pakai:
docker ps
Maka sudah bisa di hit melalui browser dengan IP:Port misal 192.1.3.4:3000 (192.1.3.4 adalah ipv4 punya VPS kamu yaaa). Jika tanpa error, maka kamu akan melihat login screen:
Masukkan username dan password default berikut:
username: admin
password: admin
2. Installasi "Loki Server" 📜
Sekarang bikin folder loki pada user > grafana > loki. Kemudian bikin 1 file docker-compose.yml dalam folder loki dengan isi file:
version: '3.3'
networks:
loki:
services:
loki:
image: grafana/loki:latest
ports:
- '3100:3100'
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
networks:
- loki
Oiya, diatas ada promtail juga yang diinstall yaa, nah gunanya apa? Jadi promtail ini nanti yang akan bertindak sebagai agen log collector. Coba kita cari analogi sederhana yaa, bayangkan ini adalah sistem CCTV. Nah, Loki adalah rekaman/arsip/storage yang menyimpan semua video, sedangkan Promtail adalah kamera dan kabel CCTV yang capture dan mengirim ke penyimpanan (Loki) nah tanpa Promtail ibarat cuma pasang DVR (Loki) tanpa kameranya (Promtail), yaa akan ada log yg terekam. DVR hidup tp tidak ada yang terekam.
Selain Promtail, ada beberapa alternatif yang bisa dipilih seperti:
- Fluent Bit
- Logstash
Oke, lanjut. Kemudian run pakai:
docker-compose up -d
Pastikan port 3100 sudah open yaaa, caranya seperti sebelumnya.
3. Koneksikan loki server pada grafana 📶
Saatnya, kita koneksikan server loki tadi ke grafana dashboard!
Terlihat diatas banyak sekali opsi koneksinya yaaa, inilah yang saya sebut diatas bahwasannya grafana bisa diintegrasikan dengan banyak sekali provider data. Oke langsung pilih saja yang Loki dan isi bagian Name sesuai dengan yang kalian mau dan Connection dengan isi http://192.1.3.4:3100 kemudian klik button Save & test
4. Testing 🧪
Selesai sudah untuk instalasinya, sekarang waktunya kita coba untuk kirim log dengan test sederhana memakai cURL (pastikan VPS sudah ter-install cURL)
curl -v "http://192.1.3.4:3100/loki/api/v1/push" \
-H "Content-Type: application/json" \
-d '{
"streams": [
{
"stream": { "job": "test" },
"values": [
[ "1748237660N" , "onetap-cuan-dua" ]
]
}
]
}'
Jika sukses, maka bisa kita lihat pada Explore > Logs
Maka selesailah artikel terkait cara install log aggregation,cara install grafana, dan cara install loki pada VPS dan aplikasi kita, nah setelah itu pasang url diatas untuk push log pada Middleware di aplikasi kita ketika catch error 500 atau Internal Server Error yaa, jadi kalau ada user yang dapat error tersebut tinggal kita cari deh berdasarkan kapan terjadinya error tersebut pada Grafana dashboard dan nanti akan terlihat dan tertulis errornya apa, filenya dimana dan ada diline berapa errornya (🐛) sehingga proses debugging dan bug fix bisa dengan cepat terselesaikan 🥳
Terimakasih dan semoga bermanfaat ✌
Comments