Belajar Authelia - Monitoring & Logging
Episode 26 of 31

Belajar Authelia - Monitoring & Logging

Deployment tanpa observability adalah terbang tanpa instrumen. Episode ini mengaktifkan log terstruktur JSON, endpoint metrics Prometheus, dashboard Grafana, alerting untuk kegagalan autentikasi dan error 5xx, serta agregasi log terpusat dengan Loki.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Episode 25 men-deploy Authelia ke Kubernetes dengan HPA, probes, dan network policy. Infrastruktur berjalan, tapi ada satu pertanyaan yang belum terjawab: bagaimana kalian tahu Authelia benar-benar sehat? Penerbangan tidak mengandalkan perasaan pilot — ia mengandalkan instrumen. Episode 26 membangun instrumen itu: log terstruktur, metrics, dashboard, dan alerting.

Mengapa observability untuk Authelia sangat penting? Karena Authelia adalah gerbang. Masalah kecil di gerbang — server down, session storage rusak, lonjakan brute force — berdampak ke seluruh aplikasi di belakangnya. Semakin dini terdeteksi, semakin kecil blast radius-nya. Monitoring di sini bukan pelengkap, melainkan jaring pengaman untuk seluruh arsitektur yang dibangun sejak episode 13.

Logging Terstruktur

Authelia menulis log ke stdout (standar untuk container) dengan dua format: text dan json. Untuk produksi, gunakan JSON — format terstruktur yang bisa diparsing mesin, difilter, dan diagregasi tanpa ambiguitas. Aktifkan lewat blok log di konfigurasi:

configuration.yml — log terstruktur
log:
  level: info
  format: json
  file_path: ''

file_path dikosongkan agar log tetap mengalir ke stdout dan ditangani runtime (Docker logging driver, kubelet, dsb). Jangan menulis log ke file di dalam container — file itu akan hilang saat container diganti, dan tidak ter-rotasi otomatis.

Contoh baris log JSON yang dihasilkan saat permintaan diproses:

Contoh log JSON
{"time":"2026-08-03T10:00:00Z","level":"info","msg":"Request processed","method":"GET","path":"/api/verify","status_code":200,"latency_ms":12}

Dengan format seperti ini, kalian bisa membuat query "semua request ke /api/verify yang mengembalikan 5xx dalam 5 menit terakhir" — sesuatu yang hampir mustahil dilakukan dengan log teks biasa.

Level Log yang Tepat

Level log Authelia: trace, debug, info, warn, error. Aturan praktisnya:

  • Produksi: info — seimbang antara informasi dan volume.
  • Insiden / investigasi: debug — memperlihatkan keputusan otorisasi dan alur sesi.
  • Hanya saat diminta vendor/maintainer: trace — sangat berisik dan bisa menyertakan data sensitif.

Ubah level tanpa restart dengan hot reload, tapi ingat: debug dan trace di produksi permanen adalah kebocoran performa dan risiko privasi — topik yang sudah kalian pelajari di episode 23.

Metrics: Endpoint Prometheus

Authelia membawa Prometheus exporter bawaan. Aktifkan lewat blok telemetry — endpoint-nya berdiri di port terpisah (default :9959) sehingga tidak tercampur dengan trafik autentikasi:

configuration.yml — mengaktifkan metrics
telemetry:
  metrics:
    enabled: true
    address: 'tcp://:9959/metrics'

Important

Catatan penting: address di atas sudah menyertakan path /metrics. Tanpa path tersebut, endpoint akan merespons 404 — keluhan paling umum di forum Authelia. Cek langsung dengan curl -fsS http://127.0.0.1:9959/metrics untuk memastikan metrics tersaji.

Jangan pernah expose port 9959 ke publik. Metrics tidak berisi kredensial, tapi ia memberi peta lengkap pola autentikasi — cukup berharga bagi penyerang untuk fase reconnaissance.

Metrik yang Bermakna

Authelia mengekspos counter dan histogram berprefix authelia_. Metrik paling penting untuk dipantau:

MetrikVectorArti
authelia_request_totalcode, methodSemua request HTTP; dasar untuk mengukur 5xx
authelia_authz_totalcodeRequest otorisasi (endpoint verify)
authelia_authn_totalsuccess, bannedAutentikasi 1FA — sumber deteksi brute force
authelia_authn_second_factor_totalsuccess, banned, typeAutentikasi 2FA per jenis (totp, webauthn, duo)
authelia_authn_passkey_totalsuccessAutentikasi passkey
authelia_authn_durationsuccessHistogram waktu autentikasi

Dari sini kalian bisa menghitung rasio sukses-gagal autentikasi, mendeteksi lonjakan banned=true (tanda brute force yang tertahan regulation), dan mengukur latensi autentikasi. Perhatikan bahwa nama metrik bisa berubah antar versi — saat pindah versi, bandingkan output /metrics sebelum memperbarui dashboard.

Memanen dengan Prometheus

Tambahkan job scraping di prometheus.yml. Jika Authelia berjalan di Docker Compose, cukup targetkan nama service-nya; di Kubernetes, gunakan ServiceMonitor:

prometheus.yml — job Authelia
scrape_configs:
  - job_name: authelia
    metrics_path: /metrics
    scheme: http
    static_configs:
      - targets: ['authelia:9959']

Dengan job ini, Prometheus mengambil metrik setiap 15 detik dan menyimpannya di time series — bahan dasar untuk dashboard dan alert.

Dashboard Grafana

Authelia menyediakan community dashboard yang bisa diimpor langsung ke Grafana sebagai titik awal. Dashboard itu menunjukkan ringkasan request, tingkat kegagalan autentikasi, dan latensi — lengkap dengan panel yang memakai metrik di atas.

Jangan berhenti di dashboard bawaan. Buat panel kustom yang menjawab pertanyaan operasional kalian sendiri:

  • Berapa lama rata-rata autentikasi hari ini dibandingkan kemarin? (histogram authelia_authn_duration)
  • Berapa banyak sesi aktif? (dari log atau metrik Redis)
  • Berapa request yang diban regulation? (sum authelia_authn_total dengan banned="true")

Dashboard yang bagus adalah yang mengubah angka menjadi keputusan, bukan sekadar koleksi panel yang indah.

Alerting: Alarm Sebelum Terlambat

Dashboard hanya berguna saat kalian sedang menontonnya. Alerting bekerja 24 jam. Definisikan aturan di Prometheus — contoh untuk tiga skenario paling penting:

alert.rules.yml
groups:
  - name: authelia
    rules:
      - alert: AutheliaDown
        expr: up{job="authelia"} == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Authelia tidak merespons scraping"
 
      - alert: AuthenticationFailuresSpike
        expr: rate(authelia_authn_total{success="false"}[5m]) > 10
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "Lonjakan kegagalan autentikasi 1FA"
 
      - alert: HighServerErrors
        expr: sum(rate(authelia_request_total{code=~"5.."}[5m])) > 0.05
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Terlalu banyak respons 5xx dari Authelia"

Teruskan alert ke kanal yang benar-benar dilihat tim: Telegram, Discord, Slack, atau email — bisa lewat Alertmanager. Dua alarm yang paling sering menyelamatkan produksi adalah lonjakan gagal autentikasi (indikasi serangan atau konfigurasi rusak) dan AutheliaDown (indikasi seluruh gerbang tutup).

Agregasi Log dengan Loki

Metrics memberi tahu apakah ada masalah; log memberi tahu mengapa. Saat ada insiden, kalian butuh membaca log dari semua instance sekaligus, bukan membuka terminal satu per satu. Loki — pair natural Prometheus dari Grafana — menerima log JSON Authelia dan mengindeksnya berdasarkan label:

alloy.yml — scraping log container Authelia
discovery.relabel "authelia" {
  targets = discovery.docker.targets("docker", {}).output
  rule {
    source_labels = ["__meta_docker_container_name"]
    regex = "authelia-.*"
    action = "keep"
  }
  rule {
    source_labels = ["__meta_docker_container_name"]
    target_label = "container"
  }
}

Dengan label container="authelia", query Loki seperti {container=~"authelia.*"} |= "level\":\"error" langsung menampilkan semua error dari semua instance dalam satu tempat. Promtail untuk file-based atau kube-prometheus-stack untuk Kubernetes adalah alternatif yang umum.

Penutup

Episode 26 melengkapi lapisan observability: mengaktifkan log terstruktur JSON dengan level yang tepat, menyalakan endpoint metrics Prometheus di port 9959, memanennya dengan job scraping, menampilkan di dashboard Grafana, menegakkan alerting untuk skenario kritis, dan mengagregasi log terpusat dengan Loki.

Poin kunci:

  • Gunakan log.format: json dan biarkan log mengalir ke stdout.
  • Metrics hidup di telemetry.metrics.address dengan path /metrics — tanpa path, endpoint 404.
  • Pantau authelia_authn_total dan authelia_authn_second_factor_total untuk pola serangan.
  • Alert untuk AutheliaDown, lonjakan gagal autentikasi, dan 5xx.
  • Loki menjawab "mengapa" saat metrik sudah menjawab "apakah".

Semua data sudah terkumpul — sekarang pertanyaannya: apa yang terjadi kalau semuanya hilang? Di episode 27 kita bedah Backup & Disaster Recovery: apa yang wajib di-backup, strategi, prosedur restore, dan skenario bencana. Sampai jumpa di episode 27!

Belajar Authelia - Monitoring & Logging | Belajar Authelia