Install Loki Server Sebagai Log Aggregation

Logging atau log adalah mekanisme untuk mencatat state/keadaan melalui tulisan, baik yang sifatnya informasi, peringatan, maupun error. Tapi biasanya dipakai untuk log error, terutama yang error 500 (internal server error). Karena ketika terjadi error 500, biasanya disisi user hanya menampilkan error code 500 atau kode internal misal 1003 tanpa property lain misal message error apa dan data yang biasanya berisi null value saja, sehingga sebagai developer (sebagai seorang yang punya kepentingan untuk bugfix) tidak langsung bisa untuk melakukan troubleshoot/fixing secara langsung dan cepat karena yaa have no clue to solve it, apalagi kalo infranya pakai Microservices, beuh 😮‍💨

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:

Grafana Dashboard

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!

Loki Connection

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

Loki Connection Fill Data

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

Loki Logs pada Grafana

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 ✌

About the author

Hey, I'm Ubaidillah Hakim Fadly, a software engineer, equity investor, and entrepreneur. I publish articles and tutorials about Programming, DevOps, English and Fundamental Investment from my own research.

Get the newsletterBuy me a coffee

Ubaidillah