Pemantauan Prometheus: Pengaturan Lengkap & Praktik Terbaik

Buat pemantauan infrastruktur yang kuat dengan Prometheus

Konten Halaman

Prometheus telah menjadi standar de facto untuk memantau aplikasi dan infrastruktur cloud-native, menawarkan pengumpulan metrik, penelusuran, dan integrasi dengan alat visualisasi.

diagram-teknis

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

  1. Buka Grafana dan navigasi ke Konfigurasi → Sumber Data
  2. Klik “Tambahkan sumber data”
  3. Pilih “Prometheus”
  4. Setel URL ke http://localhost:9090 (atau server Prometheus Anda)
  5. 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

Referensi Eksternal