Pemantauan Prometheus: Pengaturan Lengkap & Praktik Terbaik
Buat pemantauan infrastruktur yang kuat dengan Prometheus
Prometheus telah menjadi standar de facto untuk memantau aplikasi dan infrastruktur cloud-native, menawarkan pengumpulan metrik, penelusuran, dan integrasi dengan alat visualisasi.

Apa itu Prometheus?
Prometheus adalah alat pemantauan dan peringatan open-source yang awalnya dikembangkan di SoundCloud pada tahun 2012 dan sekarang menjadi proyek yang telah lulus dari Cloud Native Computing Foundation (CNCF). Ini dirancang khusus untuk keandalan dan skalabilitas dalam lingkungan cloud dinamis, menjadikannya solusi utama untuk memantau mikroservis, kontainer, dan klaster Kubernetes.
Fitur Utama
Basis Data Deret Waktu: Prometheus menyimpan semua data sebagai deret waktu, diidentifikasi oleh nama metrik dan pasangan kunci-nilai (label), memungkinkan kemampuan kueri yang fleksibel dan kuat.
Model Tarik: Berbeda dengan sistem tradisional berbasis push, Prometheus secara aktif mengambil metrik dari target yang dikonfigurasi pada interval yang ditentukan, membuatnya lebih andal dan lebih mudah dikonfigurasi.
Bahasa Kueri PromQL: Bahasa kueri fungsional yang kuat memungkinkan Anda memotong dan menggali data metrik Anda secara real-time, melakukan agregasi, transformasi, dan perhitungan kompleks.
Pemetaan Layanan: Pemetaan otomatis dari target pemantauan melalui berbagai mekanisme termasuk Kubernetes, Consul, EC2, dan konfigurasi statis.
Tidak Ada Ketergantungan Eksternal: Prometheus berjalan sebagai satu biner tanpa ketergantungan eksternal yang diperlukan, mempermudah penginstalan dan mengurangi kompleksitas operasional.
Peringatan Bawaan: AlertManager menangani peringatan dari Prometheus, menyediakan deduplikasi, pengelompokan, dan routing ke saluran notifikasi seperti email, PagerDuty, atau Slack.
Ringkasan Arsitektur
Memahami arsitektur Prometheus penting untuk penginstalan yang efektif. Komponen utama meliputi:
- Prometheus Server: Mengambil dan menyimpan metrik, mengevaluasi aturan, dan menyajikan kueri
- Perpustakaan Klien: Memasang kode aplikasi untuk menampilkan metrik
- Ekspor: Jembatan sistem pihak ketiga ke format Prometheus
- AlertManager: Menangani peringatan dan notifikasi
- Pushgateway: Menerima metrik dari pekerjaan singkat yang tidak dapat diambil
Alur data yang umum: Aplikasi menampilkan akhir titik metrik → Prometheus mengambil akhir titik ini → Data disimpan dalam basis data deret waktu → Kueri PromQL mengambil dan menganalisis data → Peringatan dihasilkan berdasarkan aturan → AlertManager memproses dan mengarahkan notifikasi.
Ketika menginstal infrastruktur pada Ubuntu 24.04, Prometheus menyediakan fondasi yang sangat baik untuk pemantauan menyeluruh.
Menginstal Prometheus pada Ubuntu
Mari kita lalui proses menginstal Prometheus pada sistem Linux. Kita akan menggunakan Ubuntu sebagai contoh, tetapi prosesnya serupa untuk distribusi lainnya.
Unduh dan Instal
Pertama, buat pengguna khusus untuk Prometheus:
sudo useradd --no-create-home --shell /bin/false prometheus
Unduh rilis Prometheus terbaru:
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvf prometheus-2.48.0.linux-amd64.tar.gz
cd prometheus-2.48.0.linux-amd64
Salin biner dan buat direktori:
sudo cp prometheus /usr/local/bin/
sudo cp promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
sudo cp -r consoles /etc/prometheus
sudo cp -r console_libraries /etc/prometheus
sudo cp prometheus.yml /etc/prometheus/prometheus.yml
sudo chown -R prometheus:prometheus /etc/prometheus
Untuk manajemen paket pada Ubuntu, lihat panduan kami yang komprehensif Ubuntu Package Management.
Konfigurasi Prometheus
Edit /etc/prometheus/prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- 'alert_rules.yml'
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
Membuat Layanan Systemd
Buat /etc/systemd/system/prometheus.service:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--storage.tsdb.retention.time=30d
[Install]
WantedBy=multi-user.target
Mulai dan aktifkan Prometheus:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
Akses antarmuka web Prometheus di http://localhost:9090.
Menyiapkan Node Exporter
Node Exporter menampilkan metrik perangkat keras dan sistem operasi untuk sistem Linux. Instal untuk memantau server Anda:
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
Buat layanan systemd /etc/systemd/system/node_exporter.service:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Mulai Node Exporter:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Node Exporter sekarang menampilkan metrik pada port 9100.
Memahami PromQL
PromQL (Prometheus Query Language) adalah inti dari kueri Prometheus. Berikut adalah pola kueri yang penting:
Kueri Dasar
Pilih semua deret waktu untuk metrik:
node_cpu_seconds_total
Saring berdasarkan label:
node_cpu_seconds_total{mode="idle"}
Banyak filter label:
node_cpu_seconds_total{mode="idle",cpu="0"}
Vektor Rentang dan Agregasi
Hitung laju sepanjang waktu:
rate(node_cpu_seconds_total{mode="idle"}[5m])
Jumlahkan di seluruh CPU:
sum(rate(node_cpu_seconds_total{mode="idle"}[5m]))
Kelompokkan berdasarkan label:
sum by (mode) (rate(node_cpu_seconds_total[5m]))
Contoh Praktis
Persentase penggunaan CPU:
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Penggunaan memori:
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100
Penggunaan disk:
(node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100
Laju lalu lintas jaringan:
rate(node_network_receive_bytes_total[5m])
Penginstalan dengan Docker
Menjalankan Prometheus dalam Docker memberikan fleksibilitas dan manajemen yang lebih mudah:
Buat docker-compose.yml:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
ports:
- "9090:9090"
restart: unless-stopped
node_exporter:
image: prom/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
volumes:
- '/:/host:ro,rslave'
ports:
- "9100:9100"
restart: unless-stopped
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
- alertmanager_data:/alertmanager
ports:
- "9093:9093"
restart: unless-stopped
volumes:
prometheus_data:
alertmanager_data:
Mulai stack:
docker-compose up -d
Pemantauan Kubernetes
Prometheus sangat baik dalam memantau klaster Kubernetes. Helm chart kube-prometheus-stack menyediakan solusi pemantauan yang lengkap.
Instal menggunakan Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
Ini menginstal:
- Prometheus Operator
- Instansi Prometheus
- AlertManager
- Grafana
- Node Exporter
- kube-state-metrics
- Dashboard dan peringatan yang dikonfigurasi sebelumnya
Akses Grafana:
kubectl port-forward svc/prometheus-grafana 3000:80
Kredensial default: admin/prom-operator
Untuk berbagai distribusi Kubernetes, proses penginstalan serupa dengan sedikit penyesuaian untuk fitur khusus platform.
Menyiapkan Peringatan
AlertManager menangani peringatan yang dikirim oleh Prometheus. Konfigurasikan aturan peringatan dan saluran notifikasi.
Aturan Peringatan
Buat /etc/prometheus/alert_rules.yml:
groups:
- name: system_alerts
interval: 30s
rules:
- alert: HighCPUUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "Penggunaan CPU tinggi di {{ $labels.instance }}"
description: "Penggunaan CPU di atas 80% (nilai saat ini: {{ $value }}%)"
- alert: HighMemoryUsage
expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "Penggunaan memori tinggi di {{ $labels.instance }}"
description: "Penggunaan memori di atas 85% (nilai saat ini: {{ $value }}%)"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 15
for: 10m
labels:
severity: critical
annotations:
summary: "Ruangan disk rendah di {{ $labels.instance }}"
description: "Ruangan disk di bawah 15% di {{ $labels.mountpoint }}"
- alert: InstanceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} sedang mati"
description: "Instance {{ $labels.job }} {{ $labels.instance }} telah mati selama lebih dari 2 menit"
Konfigurasi AlertManager
Buat /etc/prometheus/alertmanager.yml:
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.gmail.com:587'
smtp_from: 'alerts@example.com'
smtp_auth_username: 'alerts@example.com'
smtp_auth_password: 'your-password'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'team-email'
routes:
- match:
severity: critical
receiver: 'team-pagerduty'
- match:
severity: warning
receiver: 'team-slack'
receivers:
- name: 'team-email'
email_configs:
- to: 'team@example.com'
headers:
Subject: '{{ .GroupLabels.alertname }}: {{ .Status | toUpper }}'
- name: 'team-slack'
slack_configs:
- api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
channel: '#alerts'
title: 'Alert: {{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
- name: 'team-pagerduty'
pagerduty_configs:
- service_key: 'your-pagerduty-key'
Integrasi dengan Grafana
Meskipun Prometheus memiliki antarmuka web dasar, Grafana menyediakan visualisasi yang lebih baik untuk membuat dashboard yang komprehensif.
Tambahkan Prometheus sebagai Sumber Data
- Buka Grafana dan navigasi ke Konfigurasi → Sumber Data
- Klik “Tambahkan sumber data”
- Pilih “Prometheus”
- Setel URL ke
http://localhost:9090(atau server Prometheus Anda) - Klik “Simpan & Uji”
ID Dashboard Populer
Impor dashboard yang dibuat sebelumnya dari grafana.com:
- Node Exporter Full (ID: 1860): Metrik Linux yang komprehensif
- Kubernetes Cluster Monitoring (ID: 7249): Overview K8s
- Docker Container Monitoring (ID: 193): Metrik kontainer
- Prometheus Stats (ID: 2): Metrik internal Prometheus
Membuat Dashboard Kustom
Buat panel menggunakan kueri PromQL:
{
"title": "Penggunaan CPU",
"targets": [{
"expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
}]
}
Ekspor Populer
Perluas pemantauan Prometheus dengan ekspor khusus:
Blackbox Exporter
Menguji akhir titik melalui HTTP, HTTPS, DNS, TCP, dan ICMP:
scrape_configs:
- job_name: 'blackbox'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://example.com
- https://api.example.com
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9115
Ekspor Database
- mysqld_exporter: Metrik MySQL/MariaDB
- postgres_exporter: Metrik PostgreSQL
- mongodb_exporter: Metrik MongoDB
- redis_exporter: Metrik Redis
Ekspor Aplikasi
- nginx_exporter: Metrik server web NGINX
- apache_exporter: Metrik server HTTP Apache
- haproxy_exporter: Metrik load balancer HAProxy
Ekspor Cloud
- cloudwatch_exporter: Metrik AWS CloudWatch
- stackdriver_exporter: Metrik Google Cloud
- azure_exporter: Metrik Azure Monitor
Praktik Terbaik
Retensi Data
Konfigurasikan retensi yang sesuai dengan kebutuhan Anda:
--storage.tsdb.retention.time=30d
--storage.tsdb.retention.size=50GB
Aturan Rekaman
Hitung ulang ekspresi yang sering dikueri sebelumnya:
groups:
- name: example_rules
interval: 30s
rules:
- record: job:node_cpu_utilization:avg
expr: 100 - (avg by (job) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Manajemen Label
- Pertahankan kardinalitas label rendah
- Gunakan konvensi penamaan yang konsisten
- Hindari label kardinalitas tinggi (ID pengguna, timestamp)
Keamanan
- Aktifkan otentikasi dan HTTPS
- Batasi akses ke API Prometheus
- Gunakan kebijakan jaringan di Kubernetes
- Implementasikan RBAC untuk metrik sensitif
Ketersediaan Tinggi
- Jalankan beberapa instance Prometheus
- Gunakan Thanos atau Cortex untuk penyimpanan jangka panjang
- Implementasikan federasi untuk pengaturan hierarkis
Menyelesaikan Masalah Umum
Penggunaan Memori Tinggi
- Kurangi frekuensi pengambilan
- Kurangi periode retensi
- Optimalkan kueri PromQL
- Implementasikan aturan rekaman
Metrik yang Hilang
- Periksa status target di
/targets - Verifikasi koneksi jaringan
- Validasi konfigurasi pengambilan
- Periksa log ekspor
Kueri yang Lambat
- Gunakan aturan rekaman untuk agregasi kompleks
- Optimalkan filter label
- Kurangi jangka waktu
- Tambahkan indeks jika menggunakan penyimpanan jarak jauh
Optimasi Kinerja
Optimasi Kueri
# Buruk: Kardinalitas tinggi
sum(rate(http_requests_total[5m]))
# Baik: Kelompokkan berdasarkan label relevan
sum by (status, method) (rate(http_requests_total[5m]))
Batas Sumber Daya
Untuk penginstalan Kubernetes:
resources:
requests:
memory: "2Gi"
cpu: "1000m"
limits:
memory: "4Gi"
cpu: "2000m"
Kesimpulan
Prometheus menyediakan solusi pemantauan yang kuat dan skalabel untuk infrastruktur modern. Arsitektur berbasis tarik, bahasa kueri yang kuat, dan ekosistem ekspor yang luas membuatnya ideal untuk memantau segalanya dari server bare-metal hingga klaster Kubernetes yang kompleks.
Dengan menggabungkan Prometheus dengan Grafana untuk visualisasi dan AlertManager untuk notifikasi, Anda menciptakan platform observabilitas yang komprehensif yang mampu menangani kebutuhan pemantauan skala enterprise. Komunitas yang aktif dan dukungan dari CNCF memastikan pengembangan dan dukungan terus berlangsung.
Mulailah dengan pengumpulan metrik dasar, secara bertahap tambahkan ekspor untuk layanan spesifik Anda, dan haluskan aturan peringatan Anda berdasarkan pengalaman nyata. Prometheus berkembang bersama infrastruktur Anda, dari penginstalan satu server hingga arsitektur pemantauan multi-datacenter.
Sumber Terkait
- Cara Menginstal Ubuntu 24.04 & alat yang berguna
- Manajemen Paket Ubuntu: Kartu Panduan APT dan dpkg
- Instal dan Gunakan Grafana di Ubuntu: Panduan Lengkap
- Kartu Panduan Kubernetes
- Distribusi Kubernetes - overview dari kubeadm, k3s, MicroK8s, Minikube, Talos Linux dan RKE2
- Kartu Panduan Docker