Senario: Organisasi anda menjalankan platform berasaskan mikroservis di Kubernetes. Setiap perkhidmatan mengeluarkan metrik, log, dan jejak menggunakan format yang berbeza. Baru-baru ini, API yang berhadapan dengan pelanggan mula mengalami lonjakan latensi sekejap, tetapi alat pemantauan semasa anda terasing. Prometheus mengikis metrik, Grafana memvisualkan papan pemuka, tetapi jejak hanya tersedia dalam alat APM yang berasingan, dan log berada dalam sistem lain. Anda memerlukan pandangan bersatu untuk mengaitkan metrik, jejak, dan log dengan cekap.
Gejala: - Lonjakan latensi p99 sekejap pada perkhidmatan pembayaran dan API katalog produk. - Amaran Prometheus menunjukkan sekatan CPU pada beberapa pod, tetapi tidak konsisten. - Pembangun menghabiskan masa berjam-jam merujuk silang papan pemuka, log, dan jejak untuk mengenal pasti punca asal. - Keletihan amaran disebabkan banyak amaran berlebihan daripada komponen Kubernetes. - Tiada sumber kebenaran tunggal untuk telemetri.
Diagnosis: Punca asas gejala ini ialah kekurangan lapisan penjanaan dan pengumpulan telemetri piawai. Kita perlu menginstrumen perkhidmatan dengan OpenTelemetry, menghalakan semua telemetri melalui OpenTelemetry Collector, dan menggunakan Prometheus serta Grafana untuk menyimpan dan memvisualkan metrik. Lapisan pengumpulan bersatu akan membolehkan anda menjalankan analisis punca asas dengan mengaitkan metrik, jejak, dan log.
Perintah: Kita akan memecahkan pelaksanaan kepada langkah-langkah:
- Gunakan Helm untuk menggunakan OpenTelemetry Collector:
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm upgrade --install otel-collector open-telemetry/opentelemetry-collector \
--namespace observability --create-namespace \
-f otel-collector-config.yaml
Contoh otel-collector-config.yaml:
receivers:
otlp:
protocols:
grpc:
http:
exporters:
prometheus:
endpoint: "0.0.0.0:8889"
namespace: "otel"
debug:
verbosity: normal
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheus]
traces:
receivers: [otlp]
exporters: [debug]
- Instrumen perkhidmatan contoh dengan OpenTelemetry (menggunakan agen Java atau SDK Python). Untuk perkhidmatan Java:
java -javaagent:opentelemetry-javaagent.jar \
-Dotel.service.name=payments-service \
-Dotel.exporter.otlp.endpoint=http://otel-collector.observability:4317 \
-jar payments-service.jar
- Konfigurasi Prometheus untuk mengikis titik akhir metrik OpenTelemetry Collector. Tambah konfigurasi scrape dalam Prometheus:
scrape_configs:
- job_name: 'otel-collector'
static_configs:
- targets: ['otel-collector.observability:8889']
- Import papan pemuka Grafana menggunakan fail konfigurasi atau melalui UI. Anda boleh menggunakan pendekatan provisioning Grafana:
apiVersion: 1
providers:
- name: 'default'
folder: 'SRE'
type: file
options:
path: /var/lib/grafana/dashboards
Kawalan Risiko:
- Sebelum mengubah suai stack pemerhatian pengeluaran, ambil tangkapan gambar papan pemuka Grafana dan peraturan Prometheus sedia ada menggunakan API.
- Gunakan OpenTelemetry Collector dalam persekitaran pementasan dahulu dan sahkan bahawa telemetri mengalir dengan betul.
- Gunakan namespace berasingan observability dan hadkan penggunaan sumber (CPU/memori) dengan permintaan dan had.
- Jangan dedahkan titik akhir OpenTelemetry Collector ke internet awam; gunakan rangkaian dalaman.
- Untuk perkhidmatan kritikal, gunakan penggunaan canary: hala peratusan kecil trafik ke perkhidmatan yang telah diinstrumen dengan OpenTelemetry sambil membiarkan yang lain tidak berubah.
Rollback:
Jika OpenTelemetry Collector menyebabkan kemerosotan prestasi atau isu pembatalan, rollback dengan cepat:
1. Keluarkan konfigurasi scrape Prometheus untuk collector dan muat semula Prometheus.
2. Skala turun instance collector: kubectl scale deployment otel-collector -n observability --replicas=0
3. Jika anda menginstrumen perkhidmatan dengan agen Java, gunakan semula versi sebelumnya tanpa agen atau dengan agen dilumpuhkan.
4. Pulihkan papan pemuka Grafana sebelumnya menggunakan tangkapan gambar yang diambil tadi.
Pengesahan:
- Sahkan metrik sedang dikikis oleh Prometheus: curl -G http://prometheus:9090/api/v1/targets | grep otel-collector
- Sahkan jejak mengalir: semak log collector untuk span yang dieksport atau gunakan debug exporter.
- Buat papan pemuka Grafana dan tambah pertanyaan Prometheus seperti histogram_quantile(0.99, sum(rate(http_server_duration_seconds_bucket{job="payments-service"}[5m])) by (le, service_name)) untuk memvisualkan latensi p99.
- Kaitkan lonjakan latensi dengan jejak: query data span menggunakan Jaeger atau Tempo (dalam panduan susulan).
- Gunakan arahan top pada pod collector untuk memastikan ia tidak terkekang sumber.
Bila untuk Menghantar Tiket OpsGlobal: OpsGlobal menyediakan sokongan SRE jauh 24/7 dan boleh membantu anda jika: - Pasukan anda mempunyai pengalaman terhad dengan OpenTelemetry dan memerlukan panduan pakar. - Stack pemerhatian adalah kritikal untuk pengeluaran, dan anda memerlukan pemantauan sepanjang masa. - Anda menghadapi insiden kompleks di mana pengaitan metrik, jejak, dan log memerlukan kepakaran mendalam. - Anda ingin meningkatkan skala persediaan pemerhatian untuk mengendalikan volum telemetri yang semakin meningkat tanpa mengambil kakitangan tambahan.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Observability dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan langkah demi langkah untuk membina stack pemerhatian bersatu dengan Prometheus, Grafana, dan OpenTelemetry. Ketahui cara mendiagnosis isu latensi dalam mikroservis Kubernetes, mengkonfigurasi OpenTelemetry Collector, membuat peraturan Prometheus, dan membina papan pemuka Grafana yang boleh diambil tindakan—lengkap dengan langkah 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.