Belajar .NET - Observability & Production Support
Series/Belajar .NET/Episode 20
Episode 20 of 23

Belajar .NET - Observability & Production Support

Episode ini menjadikan aplikasi kalian terobservasi: logging terstruktur dengan Serilog, metrics, tracing, dan integrasi OpenTelemetry, health checks dan monitoring endpoints, serta incident management, diagnostics, dan kesiapan support produksi.

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

Pendahuluan

Di produksi, kalian tidak bisa menebak apa yang terjadi di dalam aplikasi — kalian harus melihatnya. Episode 20 membahas observability: kemampuan memahami keadaan sistem dari luarnya lewat tiga pilar — logs, metrics, dan traces.

Kalian akan memperkuat logging dengan Serilog, mengintegrasikan OpenTelemetry untuk tracing dan metrics, memasang health checks, serta menyiapkan prosedur incident management dan diagnostics. Observability bukan pelengkap — ini adalah mata kalian di produksi.

Logging dengan Serilog

Logging Terstruktur

Serilog menulis log sebagai event terstruktur dengan properti bernama — bukan sekadar string. Install dan konfigurasi:

Install Serilog
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console

Lalu aktifkan di host:

Konfigurasi Serilog
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .Enrich.FromLogContext()
    .CreateLogger();
 
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddSerilog();

WriteTo.Console() mengirim log ke console dalam format terstruktur, dan Enrich.FromLogContext() menambahkan konteks seperti trace id ke setiap event. Serilog menggantikan console logging polos dengan output yang bisa di-parse dan diagregasi.

Sink dan Enrichment

Log terstruktur dikirim ke banyak sink: console untuk pengembangan, Elasticsearch atau Seq untuk agregasi, dan file untuk arsip. Satu pernyataan log dengan property terstruktur memungkinkan query "semua error untuk user X dalam 10 menit" — sesuatu yang mustahil dengan log teks bebas.

Metrics, Tracing, dan OpenTelemetry

OpenTelemetry sebagai Standar

OpenTelemetry menyatukan metrics, traces, dan logs dengan satu SDK lintas bahasa. Di .NET:

Install OpenTelemetry
dotnet add package OpenTelemetry.Extensions.Hosting
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol

Aktifkan instrumentasi otomatis untuk HTTP, database, dan HttpClient:

Aktifkan OpenTelemetry
builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddAspNetCoreInstrumentation()
        .AddHttpClientInstrumentation()
        .AddEntityFrameworkCoreInstrumentation())
    .WithMetrics(metrics => metrics
        .AddAspNetCoreInstrumentation()
        .AddMeter("Microsoft.AspNetCore.Hosting"));

WithTracing menangkap jalur setiap request dari API ke database, dan WithMetrics merekam metrik seperti jumlah request dan durasi. Semuanya diekspor ke backend seperti Prometheus, Grafana, atau OTLP collector.

Trace sebagai Narasi Request

Sebuah trace terdiri dari span-span yang menceritakan satu request: middleware HTTP, call database, panggilan ke layanan lain. Saat pengguna melapor lambat, trace menunjukkan di span mana waktu hilang — tanpa menebak.

Health Checks dan Monitoring Endpoints

Memasang Health Check

Health check memberi tahu orchestrator dan tim operasi bahwa aplikasi sehat. Tambahkan endpoint:

Health check endpoint
builder.Services.AddHealthChecks()
    .AddDbContextCheck<AppDbContext>();
 
app.MapHealthChecks("/health");
app.MapHealthChecks("/health/ready");

AddDbContextCheck memverifikasi koneksi database — ini adalah pemeriksaan yang nyata, bukan sekadar "aplikasi masih hidup". Endpoint /health/ready dipakai Kubernetes sebagai readiness probe (episode 19), dan /health/live untuk liveness.

Alert dari Metrik

Metrik tanpa alert hanyalah grafik yang indah. Pasang aturan alert pada metrik penting: error rate naik, latency p99 melebihi target, atau health check gagal berulang kali. Alert yang baik menyebutkan apa yang salah dan menunjuk ke dashboard yang relevan.

Incident Management dan Diagnostics

Alur Insiden

Saat insiden terjadi, ikuti alur yang disepakati: deteksi (alert), klasifikasi severity, komunikasi ke tim, diagnosis, mitigasi, lalu post-mortem. Tujuan utamanya adalah mengurangi waktu pemulihan — MTTR — bukan sekadar menemukan penyebab.

Alat Diagnostics di Produksi

Saat perlu menyelidiki proses berjalan, alat diagnostik dari episode 15 bekerja di produksi:

Ambil dump proses
dotnet-dump collect --process-id 12345
dotnet-dump analyze dump.dmp

dotnet-dump collect merekam snapshot memori proses, dan dotnet-dump analyze memeriksanya secara interaktif — mencari thread tersendat, objek besar, atau deadlock. Kombinasi dump dengan trace dan log memberikan gambaran lengkap sebuah insiden.

Tip

Strukturkan log dengan properti terstruktur sejak awal. Mengubah sistem logging setelah produksi berjalan jauh lebih mahal daripada melakukannya dengan benar sekarang.

Ringkasan Praktik Observability

  • Gunakan Serilog untuk log terstruktur dengan konteks.
  • Integrasikan OpenTelemetry untuk traces dan metrics.
  • Pasang health check yang memverifikasi dependensi nyata.
  • Terapkan alert pada metrik kunci, bukan hanya pada error.
  • Siapkan alur insiden dan alat diagnostics seperti dotnet-dump.

Penutup

Inti yang harus dibawa pulang:

  • Observability terdiri dari logs, metrics, dan traces.
  • Serilog menulis event terstruktur yang mudah di-query.
  • OpenTelemetry menyatukan telemetri dengan satu SDK.
  • Health checks memberi sinyal kesehatan yang nyata ke orchestrator.
  • Alert pada metrik kunci mempercepat deteksi insiden.
  • dotnet-dump memungkinkan diagnosa mendalam di produksi.

Di episode 21 selanjutnya kita akan membahas desktop dan cross-platform apps — .NET MAUI untuk aplikasi mobile dan desktop lintas platform, WPF dan WinForms untuk Windows, Blazor WebAssembly dan Blazor Server, serta packaging, distribution, dan deployment aplikasi desktop dan mobile.

Belajar .NET - Observability & Production Support | Belajar .NET