Belajar Python - Observability, Monitoring & Maintenance
Episode 21 of 23

Belajar Python - Observability, Monitoring & Maintenance

Episode ini membuat aplikasi bisa diamati: metrik dengan Prometheus, tracing dengan OpenTelemetry, strukturisasi log, dan error monitoring dengan Sentry. Kalian juga belajar performance budget dan alerting untuk menjaga layanan tetap sehat.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

Setelah aplikasi berjalan di production, pertanyaannya berubah: bagaimana kita tahu ia sehat? Episode 21 menjawab dengan observability — tiga pilar: metrik, log, dan trace. Kalian akan belajar memakai Prometheus, OpenTelemetry, dan Sentry.

Kita juga membahas performance budget dan alerting, agar masalah terdeteksi sebelum pengguna mengeluh. Observability bukan opsional — ia mata dan telinga aplikasi production.

Metrik dengan Prometheus

Mengekspos Metrik

Prometheus mengumpulkan metrik dari aplikasi lewat endpoint HTTP. Library prometheus-client menyediakannya:

Install prometheus-client
pip install prometheus-client
PythonMembuat metrik Counter
from prometheus_client import Counter, start_http_server
import random
import time
 
REQUEST_TOTAL = Counter("http_request_total", "Total request HTTP", ["method"])
 
start_http_server(8001)
 
for _ in range(5):
    REQUEST_TOTAL.labels(method="GET").inc()
    time.sleep(1)
    print("metrik dikirim")

Counter("http_request_total", "Total request HTTP", ["method"]) mendefinisikan metrik counter dengan label. start_http_server(8001) membuka endpoint metrik. Prometheus men-scrape endpoint ini secara berkala dan menyimpan datanya.

Tracing dengan OpenTelemetry

Memahami Distributed Tracing

Tracing melacak perjalanan satu request melalui banyak layanan. OpenTelemetry adalah standar untuk ini:

Install OpenTelemetry
pip install opentelemetry-api opentelemetry-sdk
PythonMembuat span dengan OpenTelemetry
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter
 
trace.set_tracer_provider(TracerProvider())
provider = trace.get_tracer_provider()
provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))
 
tracer = trace.get_tracer("belajar")
 
with tracer.start_as_current_span("proses-pembayaran"):
    print("membuat span pembayaran")

trace.get_tracer("belajar") mengambil tracer bernama. tracer.start_as_current_span("proses-pembayaran") membuat span yang mengukur durasi operasi. Span diekspor ke backend seperti Jaeger atau Tempo untuk visualisasi.

Strukturisasi Log

Logging Terstruktur

Log terstruktur memakai format JSON agar mudah dianalisis:

PythonLogging terstruktur
import json
import logging
 
logger = logging.getLogger("aplikasi")
 
def proses(order_id):
    logger.info(json.dumps({
        "event": "order_processed",
        "order_id": order_id,
        "status": "success",
    }))
 
proses("order-123")

json.dumps({...}) mengubah dict log menjadi JSON. Format ini bisa di-parse oleh sistem seperti Loki, Elasticsearch, dan Cloud Logging. Log terstruktur jauh lebih mudah difilter daripada teks bebas.

Error Monitoring dengan Sentry

Mengintegrasikan Sentry

Sentry mengumpulkan error dan crash secara otomatis:

Install Sentry SDK
pip install sentry-sdk
PythonMenginisialisasi Sentry
import sentry_sdk
 
sentry_sdk.init(
    dsn="https://contoh@o0.ingest.sentry.io/0",
    traces_sample_rate=1.0,
)
 
def panggil():
    raise ValueError("contoh error")
 
try:
    panggil()
except Exception:
    sentry_sdk.capture_exception()
    print("error dikirim ke Sentry")

sentry_sdk.init(dsn=...) menghubungkan aplikasi ke project Sentry. sentry_sdk.capture_exception() mengirim error beserta stack trace dan konteks. Sentry juga mengumpulkan uncaught exception secara otomatis di kebanyakan framework.

Performance Budget dan Alerting

Menetapkan Performance Budget

Performance budget adalah batas performa yang disepakati — misalnya response time p95 di bawah 300 ms. Metrik dari Prometheus dipakai untuk mengukurnya:

PythonMengukur latency histogram
from prometheus_client import Histogram
 
REQUEST_DURATION = Histogram(
    "http_request_duration_seconds",
    "Durasi request HTTP",
    buckets=(0.05, 0.1, 0.25, 0.5, 1, 2.5, 5),
)

Histogram("http_request_duration_seconds", ...) mengukur distribusi durasi request. Bucket menentukan granularitas persentil seperti p95. Histogram adalah dasar penghitungan performance budget secara kuantitatif.

Alerting Berbasis Aturan

Alert memberi tahu saat metrik melanggar batas. Contoh aturan Prometheus:

Alert rule Prometheus
groups:
  - name: aplikasi
    rules:
      - alert: RequestLambat
        expr: histogram_quantile(0.95, http_request_duration_seconds_bucket) > 0.3
        for: 5m
        annotations:
          summary: "Response time p95 di atas 300ms"

histogram_quantile(0.95, ...) > 0.3 memicu alert saat p95 melewati 300 ms selama 5 menit. Alert dikirim ke Slack, email, atau PagerDuty. Alerting yang baik membatasi noise — hanya memberitahu masalah yang benar-benar penting.

Penutup

Inti yang harus dibawa pulang:

  • Prometheus mengumpulkan metrik dari endpoint /metrics.
  • OpenTelemetry melacak request melintasi layanan dengan span.
  • Log terstruktur JSON memudahkan analisis otomatis.
  • Sentry mengumpulkan error dengan konteks dan stack trace.
  • Performance budget diukur dengan histogram dan persentil.
  • Alerting otomatis memberi tahu saat batas performa dilanggar.

Di episode 22 selanjutnya kita akan membahas migration, scaling teams, dan governance — mengupgrade versi Python dengan aman, kebijakan deprecation dan compatibility testing, strategi monorepo versus polyrepo, pengelolaan package internal, serta coding standards dan contribution guidelines untuk tim besar. Inilah penutup perjalanan Belajar Python kalian!