Senario
Sebuah platform e-dagang menjalankan mikroservis di Kubernetes. Pengguna melaporkan muatan halaman lambat. Pasukan operasi melihat kependaman p99 melonjak dari 200ms ke 2s, tetapi Prometheus dan Grafana sedia ada hanya mengumpul metrik CPU/memori. Mereka memutuskan untuk menggunakan OpenTelemetry (OTel) untuk penjejakan teragih, metrik, dan log.
Simptom
- Papan pemuka Grafana menunjukkan kependaman p99 >1.5s untuk beberapa perkhidmatan.
- Log aplikasi tiada ralat, tetapi respons HTTP 503 meningkat.
- Penggera Prometheus "HighLatencyCritical" diaktifkan.
Diagnosis
Persediaan semasa kekurangan perkaitan antara panggilan perkhidmatan. - Prometheus mengikis metrik asas melalui kube-state-metrics. - Tiada pustaka penjejakan dalam aplikasi. - Tiada pengagregatan log berpusat.
Kesimpulan: Ketiadaan penjejakan teragih menghalang pengenalpastian kesesakan.
Penyelesaian: Integrasi OpenTelemetry
- Gunakan OpenTelemetry Collector sebagai sidecar pada setiap pod perkhidmatan, mengumpul jejak dan mengeksport ke Prometheus (melalui tulis jauh) dan Grafana Tempo.
- Instrument kod aplikasi dengan OTel SDK (auto atau manual).
- Konfigurasi Grafana dengan sumber data Prometheus dan Tempo; buat papan pemuka untuk butiran jejak.
Arahan
Langkah 1: Guna OTel Collector (Sidecar)
Buat ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-conf
data:
config.yaml: |
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
prometheus:
endpoint: 0.0.0.0:8889
otlp:
endpoint: tempo-sample:4317 # anggap perkhidmatan Tempo
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp]
metrics:
receivers: [otlp]
exporters: [prometheus]
Masukkan sidecar ke Deployment:
spec:
template:
spec:
containers:
- name: myapp
image: myapp:latest
env:
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://localhost:4317
- name: otel-collector
image: otel/opentelemetry-collector-contrib:latest
args: ["--config=/conf/config.yaml"]
volumeMounts:
- name: otel-collector-config-vol
mountPath: /conf
ports:
- containerPort: 4317
- containerPort: 4318
- containerPort: 8889
volumes:
- name: otel-collector-config-vol
configMap:
name: otel-collector-conf
Langkah 2: Konfigurasi Tulis Jauh Prometheus
Dalam konfigurasi Prometheus:
remote_write:
- url: http://prometheus-server:9090/api/v1/write
Nota: Gunakan titik akhir tulis jauh khusus dalam pengeluaran.
Langkah 3: Persediaan Grafana
Tambah sumber data Prometheus (http://prometheus-server:9090) dan Tempo (http://tempo:3100).
Buat Papan Pemuka: query span, contoh kind=SPAN_KIND_SERVER.
Kawalan Risiko
- Kesan prestasi: Sidecar menggunakan ~50MB memori setiap satu. Untuk aplikasi throughput tinggi, kurangkan kadar persampelan (cth 10%).
- Keselamatan data: Data jejak mungkin mengandungi maklumat sensitif. Gunakan pemproses OTel untuk menapis/mengaburkan.
- Keserasian versi: Pastikan versi OTel Collector sepadan dengan SDK.
Pelan Rollback
Jika masalah timbul:
1. Gulung balik Deployment aplikasi: kubectl rollout undo deployment/myapp.
2. Padam ConfigMap OTel: kubectl delete configmap otel-collector-conf.
3. Alih keluar sumber data baharu dalam Grafana; pulihkan papan pemuka lama.
Pengesahan
- Periksa jejak: Dalam Grafana Explore, query jejak – seharusnya melihat rangkaian panggilan lengkap.
- Metrik: Prometheus mempunyai metrik tersuai seperti
service_latency_seconds. - Ujian beban: Gunakan
heyuntuk simulasi trafik; kependaman p99 seharusnya normal.
Bila Hantar Tiket OpsGlobal
- Hadapi ralat konfigurasi OTel Collector (cth data hilang).
- Perlu bantuan mengoptimumkan strategi pensampelan atau menskala storan Tempo.
- Perundingan reka bentuk Papan Pemuka Grafana.
Pakar SRE kami respons dalam masa 15 minit, menyediakan penyelesaian kebolehcerapan hujung-ke-hujung.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Observability dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Post blog ini mengupas senario dunia sebenar integrasi OpenTelemetry, Prometheus, dan Grafana untuk menyelesaikan masalah kependaman tinggi dalam kluster Kubernetes. Merangkumi simptom, diagnosis, arahan, kawalan risiko, rollback, pengesahan, dan bila perlu menghantar tiket OpsGlobal.
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.