Episode ini membahas sistem notifikasi FluxCD: event yang dihasilkan controller, konfigurasi Provider ke Slack, Teams, Discord, dan webhook, pemfilteran event lewat Alert CRD, hingga webhook receiver untuk memicu sync dari luar.

Di episode 13 kalian sudah belajar image automation — FluxCD memantau registry dan memperbarui Git secara otomatis. Semua otomatisasi itu menarik, tetapi otomatisasi tanpa visibilitas bisa berbahaya. Bagaimana kalian tahu image baru sudah masuk? Bagaimana tahu sync gagal di malam hari? Jawabannya ada di notifikasi.
Episode 14 membahas sistem event FluxCD dan bagaimana mengubahnya menjadi alert yang sampai ke tim: mulai dari konsep event, Provider, Alert CRD, contoh notifikasi, webhook receiver, sampai template kustom.
Setiap controller FluxCD menghasilkan event ketika sesuatu terjadi: sync berhasil, sync gagal, artifact diperbarui, health check gagal, dan lain-lain. Semua event dikumpulkan oleh notification-controller, komponen yang juga menangani provider dan receiver.
| Event | Contoh Severity | Contoh Reason |
|---|---|---|
| Sync sukses | info | ReconciliationSucceeded |
| Sync gagal | error | ReconciliationFailed |
| Artifact baru | info | NewArtifact |
| Health check gagal | error | HealthCheckFailed |
Setiap event membawa metadata: severity, timestamp, reason, komponen yang menghasilkan, dan informasi objek terkait. Metadata inilah bahan baku yang disaring dan dirutekan oleh Alert.
Provider adalah definisi ke mana notifikasi dikirim. Notification-controller mendukung banyak jenis provider:
| Provider | Keterangan |
|---|---|
| Slack | Webhook ke channel Slack |
| Microsoft Teams | Webhook Teams |
| Discord | Webhook Discord |
| GitHub / GitLab commit status | Memperbarui status commit pada PR |
| Webhook | Webhook HTTP generik |
| generic-hmac | Webhook generik dengan tanda tangan HMAC |
Kredensial provider disimpan di Secret, bukan langsung di Provider. Contoh untuk Slack:
apiVersion: v1
kind: Secret
metadata:
name: slack-url
namespace: flux-system
stringData:
address: https://hooks.slack.com/services/xxxxxProvider hanya aktif di namespace yang sama dengan Alert yang mereferensikannya. Prinsip yang sama berlaku untuk Teams, Discord, dan provider lainnya — yang berbeda hanya nilai type dan isi Secret.
Alert menghubungkan event dari sumber tertentu dengan provider tertentu, sekaligus menyaring event yang tidak penting. Komponen utama dari Alert:
info atau errorContoh Alert untuk kegagalan deployment:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: deploy-failure
namespace: flux-system
spec:
providerRef:
name: slack
eventSeverity: error
eventSources:
- kind: Kustomization
name: "*"
- kind: HelmRelease
name: "*"Alert di atas meneruskan semua event severity error dari semua Kustomization dan HelmRelease ke channel Slack gitops.
Untuk channel yang sibuk, filter event yang terlalu berisik:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: discord-alerts
namespace: flux-system
spec:
providerRef:
name: discord
eventSeverity: info
eventSources:
- kind: Kustomization
name: "*"
exclusionList:
- "reason=ReconciliationSucceeded"
- "reason=ArtifactUpToDate"Dengan begitu channel Discord hanya menerima event yang benar-benar informatif.
Alert dengan eventSeverity: error seperti contoh sebelumnya menangkap kegagalan. Untuk notifikasi keberhasilan, buat Alert terpisah dengan severity info dan exclusion list untuk reason yang bising.
Pantau GitRepository agar tim tahu kapan artifact baru dihasilkan:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: source-updates
namespace: flux-system
spec:
providerRef:
name: slack
eventSeverity: info
eventSources:
- kind: GitRepository
name: "*"
- kind: OCIRepository
name: "*"Kegagalan health check dari Kustomization bisa disaring secara spesifik:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: health-checks
namespace: flux-system
spec:
providerRef:
name: teams
eventSeverity: error
eventSources:
- kind: Kustomization
name: "*"
inclusionList:
- "reason=HealthCheckFailed"| Kebutuhan | Severity | Sumber | Filter |
|---|---|---|---|
| Hanya kegagalan | error | Kustomization, HelmRelease | tanpa filter |
| Update source | info | GitRepository, OCIRepository | exclusion untuk up-to-date |
| Health menurun | error | Kustomization | inclusion HealthCheckFailed |
| Semua info penting | info | Semua | exclusion reason bising |
Selain mengirim notifikasi keluar, FluxCD juga bisa menerima event masuk melalui Receiver. Receiver berguna untuk mempercepat reconciliation: saat terjadi push di GitHub, webhook memicu Flux untuk langsung sync tanpa menunggu interval.
apiVersion: notification.toolkit.fluxcd.io/v1
kind: Receiver
metadata:
name: github-receiver
namespace: flux-system
spec:
type: github
events:
- ping
- push
secretRef:
name: receiver-token
resources:
- kind: GitRepository
name: "*"FluxCD mendukung berbagai tipe receiver: github, gitlab, bitbucket, harbor, dan generic. Untuk tipe GitHub, konfigurasikan webhook di pengaturan repository GitHub agar mengarah ke URL Receiver yang diekspos FluxCD.
Important
Receiver membutuhkan Secret berisi token yang sama dengan yang dikonfigurasi di GitHub, GitLab, atau Bitbucket. Tanpa token yang cocok, request webhook akan ditolak.
Pesan notifikasi default sudah cukup untuk banyak kasus, tapi kadang perlu konteks tambahan. Alert mendukung eventMetadata yang melampirkan informasi tambahan ke setiap event:
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: webhook-alerts
namespace: flux-system
spec:
providerRef:
name: webhook
eventSeverity: error
eventSources:
- kind: Kustomization
name: "*"
eventMetadata:
cluster: prod-eu
team: platformProvider bertipe webhook dapat menerima payload yang memuat metadata tersebut, sehingga sistem penerima bisa memprosesnya lebih lanjut, misalnya mengelompokkan alert berdasarkan cluster.
Tip
Mulailah dari satu Alert dengan severity error ke channel utama, lalu tambahkan Alert lain secara bertahap. Terlalu banyak notifikasi akan membuat tim kebal terhadap alarm — kualitas lebih penting daripada kuantitas.
Episode 14 ini menjelaskan bagaimana membuat FluxCD berbicara kepada tim melalui notifikasi yang tepat sasaran.
Inti yang harus dibawa pulang:
Di episode 15 berikutnya kita masuk fase baru: Progressive Delivery dengan Flagger — cara mendeploy versi baru dengan risiko minimal menggunakan canary, A/B testing, dan blue-green secara otomatis. Sampai jumpa!