Yang Berubah di Prometheus 3.x
Prometheus 3.0 adalah rilis mayor pertama setelah tujuh tahun di jalur 2.x. Materi ini memakai 3.x sebagai acuan. Bila Anda mengikuti tutorial lama berbasis 2.x, ini yang perlu Anda tahu:
| Perubahan | Dampak praktis |
|---|---|
| UI web baru | Tampilan query & target ditulis ulang. UI lama masih bisa dipanggil sementara lewat flag, tetapi akan dihapus. |
| Nama label & metrik boleh UTF-8 | Karakter di luar [a-zA-Z0-9_] kini legal. Dalam PromQL, nama seperti itu ditulis dengan tanda kutip: {"http.status.code"="200"}. Ini mempermulus interoperabilitas dengan OpenTelemetry. |
| Endpoint ingest OTLP | Prometheus bisa menerima kiriman metrik OpenTelemetry lewat /api/v1/otlp/v1/metrics — bukan hanya menarik (pull). Harus diaktifkan eksplisit lewat --web.enable-otlp-receiver. |
| Remote Write 2.0 | Format wire baru yang lebih hemat dan membawa metadata sekaligus, penting untuk pengiriman ke Mimir/Thanos/Cortex. |
| Native histogram | Keluar dari status eksperimental awal dan makin matang — resolusi jauh lebih tinggi daripada histogram klasik berbasis bucket tetap. |
Rentang range kini eksklusif di batas kiri | Perubahan halus tapi nyata pada semantik query rentang. Periksa ulang recording rule yang sensitif terhadap batas waktu setelah upgrade. |
⚠️ Sudah tidak berlaku lagi
- Flag lama
--storage.tsdb.retention(tanpa.time) sudah dihapus. Gunakan--storage.tsdb.retention.time. - Dukungan PromQL
@dan subquery eksperimental serta beberapa feature flag 2.x kini menjadi perilaku default — hapus flag tersebut dari unit systemd Anda saat upgrade, karena flag yang tak dikenal membuat Prometheus gagal start. - Protokol remote read v1 lama serta beberapa mekanisme service discovery usang telah dibuang.
Pilih Cara Instalasi Sesuai Kebutuhan
| Cara | Cocok untuk | Catatan |
|---|---|---|
| Docker Compose | Belajar & lingkungan dev | Tercepat, mudah dibuang |
| Binary + systemd | Server produksi (VM) | Kontrol penuh, perlu setup manual |
Helm chart kube-prometheus-stack | Kubernetes | Standar industri, sekaligus Grafana & Alertmanager |
Paket OS (apt install prometheus) | — | Hindari: versinya biasanya sangat tertinggal |
1. Docker Compose (paling cepat untuk belajar)
docker-compose.ymlyaml
services:
prometheus:
image: prom/prometheus:v3.5.0
container_name: prometheus
ports: ["9090:9090"]
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=30d
- --storage.tsdb.retention.size=20GB
- --web.enable-lifecycle # izinkan reload lewat HTTP POST
- --web.enable-remote-write-receiver
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./rules:/etc/prometheus/rules:ro
- prom-data:/prometheus # WAJIB: tanpa ini data hilang saat restart
restart: unless-stopped
node-exporter:
image: prom/node-exporter:v1.8.2
container_name: node-exporter
ports: ["9100:9100"]
pid: host
volumes: ["/:/host:ro,rslave"]
command: ["--path.rootfs=/host"]
restart: unless-stopped
volumes:
prom-data:2. Konfigurasi Minimum yang Benar
prometheus.ymlyaml
global:
scrape_interval: 15s # seberapa sering mengambil metrik
evaluation_interval: 15s # seberapa sering rule dievaluasi
scrape_timeout: 10s # HARUS lebih kecil dari scrape_interval
external_labels:
cluster: produksi-jkt # penting saat ada beberapa Prometheus
replica: prom-01
rule_files:
- /etc/prometheus/rules/*.yml
alerting:
alertmanagers:
- static_configs:
- targets: ["alertmanager:9093"]
scrape_configs:
# Prometheus memantau dirinya sendiri
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
labels:
lingkungan: produksi
- job_name: api
metrics_path: /metrics # default sudah /metrics
scheme: http
static_configs:
- targets: ["api-1:8080", "api-2:8080"]3. Binary + systemd (produksi di VM)
Terminalbash
# Unduh (sesuaikan versi terbaru dari prometheus.io/download)
VERSI=3.1.0
curl -LO https://github.com/prometheus/prometheus/releases/download/v${VERSI}/prometheus-${VERSI}.linux-amd64.tar.gz
tar xzf prometheus-${VERSI}.linux-amd64.tar.gz
cd prometheus-${VERSI}.linux-amd64
# Pengguna khusus tanpa shell — jangan jalankan sebagai root
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp prometheus.yml /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus/etc/systemd/system/prometheus.serviceini
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/ \
--storage.tsdb.retention.time=30d \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
# Pengetatan keamanan
NoNewPrivileges=true
ProtectHome=true
ProtectSystem=full
LimitNOFILE=65536
[Install]
WantedBy=multi-user.targetTerminalbash
sudo systemctl daemon-reload
sudo systemctl enable --now prometheus
sudo systemctl status prometheus
sudo journalctl -u prometheus -f4. Windows
Unduh prometheus-*.windows-amd64.zip dari halaman rilis, ekstrak, lalu jalankan prometheus.exe --config.file=prometheus.yml. Untuk menjalankannya sebagai service Windows, gunakan NSSM atau WinSW. Sebagai exporter metrik sistem, pakai windows_exporter (bukan node_exporter).
5. Verifikasi Instalasi
Terminalbash
# 1. Validasi konfigurasi SEBELUM reload — wajib
promtool check config prometheus.yml
# 2. Muat ulang konfigurasi tanpa restart (butuh --web.enable-lifecycle)
curl -X POST http://localhost:9090/-/reload
# 3. Cek kesehatan
curl http://localhost:9090/-/healthy
curl http://localhost:9090/-/ready
# 4. Lihat target yang sedang di-scrape
curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job:.labels.job, health:.health, lastError:.lastError}'⛔ Kesalahan instalasi yang paling sering & paling mahal
- Lupa volume untuk data. Tanpa
prom-data:/prometheus, seluruh riwayat metrik hilang setiap container di-restart. - Membiarkan port 9090 terbuka ke internet. Prometheus tidak punya autentikasi bawaan. Siapa pun yang bisa mengaksesnya bisa membaca seluruh metrik infrastruktur Anda — termasuk topologi, versi software, dan pola trafik. Lindungi dengan reverse proxy, firewall, atau VPN.
scrape_timeoutlebih besar dariscrape_interval. Prometheus akan menolak konfigurasi ini.- Reload tanpa validasi. Konfigurasi yang salah membuat reload gagal diam-diam, dan Anda mengira perubahannya sudah aktif.