Senario
Sebuah platform e-dagang yang menjalankan mikroservis di Kubernetes mengalami lonjakan latensi dan kadar ralat yang meningkat. Pasukan menggunakan Prometheus untuk metrik dan Grafana untuk papan pemuka, tetapi kekurangan penjejakan teragih untuk mencari punca sebenar.
Gejala
- Pengguna melaporkan muat halaman perlahan semasa waktu puncak
- Sesetengah API mengembalikan ralat 5xx
- Amaran Prometheus (cth., latensi permintaan tinggi) berbunyi, tetapi tidak jelas sama ada masalah disebabkan kelemahan pangkalan data, kegelisahan rangkaian atau logik kod
Diagnosis
Memperkenalkan OpenTelemetry (OTel) dengan alat suntikan automatik atau menggunakan Operator OTel, mengeksport jejak ke Jaeger (atau Grafana Tempo), dan mengaitkan dengan metrik dalam Grafana.
Langkah
- Gunakan Operator OpenTelemetry:
bash kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml - Buat contoh OTel Collector (YAML contoh):
yaml apiVersion: opentelemetry.io/v1alpha1 kind: OpenTelemetryCollector metadata: name: otel-collector spec: config: | receivers: otlp: protocols: grpc: http: exporters: jaeger: endpoint: jaeger-collector:14250 service: pipelines: traces: receivers: [otlp] exporters: [jaeger] - Anotasi deployment untuk suntikan automatik:
bash kubectl annotate deployment my-service instrumentation.opentelemetry.io/inject-java="true" - Dalam Grafana, tambah Jaeger sebagai sumber data dan gunakan Explore untuk mengaitkan jejak dengan log dan metrik melalui TraceID.
Kawalan Risiko
- Uji integrasi OTel dalam persekitaran pementasan dahulu
- Tetapkan strategi pensampelan: mulakan dengan 1% dan tingkatkan secara beransur-ansur
- Konfigurasikan had sumber dan had kadar untuk OTel Collector
- Simpan konfigurasi Prometheus asal sebagai sandaran
Rollback
Untuk membuat rollback:
kubectl delete -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml
kubectl delete opentelemetrycollector otel-collector
kubectl annotate deployment my-service instrumentation.opentelemetry.io/inject-java-
Selain itu, bersihkan storan Jaeger dan kembalikan perubahan Prometheus remote write.
Pengesahan
- Sahkan graf perkhidmatan dan data jejak dalam UI Jaeger
- Bina papan pemuka Grafana yang memaparkan latensi jejak melapisi metrik Prometheus (cth., kadar permintaan)
- Cetuskan kegagalan yang diketahui (cth., simulasi SQL perlahan) dan sahkan bahawa jejak mengenal pasti bottleneck dengan jelas
Bila Serahkan Tiket OpsGlobal
- Debug dalaman melebihi 2 jam tanpa mengenal pasti punca
- Kemerosotan prestasi seluruh kluster yang menjejaskan banyak perkhidmatan
- Perlu penalaan pakar untuk kadar pensampelan, kapasiti storan, atau konfigurasi ketersediaan tinggi Collector
- Pasukan kurang pengalaman OpenTelemetry dan memerlukan semakan seni bina
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Observability dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Post ini menerangkan senario e-dagang mikroservis sebenar untuk mengintegrasikan Prometheus, Grafana dan OpenTelemetry dalam analisis punca masalah. Termasuk gejala, langkah diagnosis, arahan, kawalan risiko, rollback dan pengesahan.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.