Senario
Kluster Kubernetes anda menjalankan Prometheus dan Grafana. Pasukan aplikasi telah membolehkan OpenTelemetry untuk menghantar jejak dan metrik melalui Pengumpul OpenTelemetry ke titik akhir penulisan jauh Prometheus. Tiba-tiba, papan pemuka Grafana untuk beberapa perkhidmatan mula menunjukkan jurang, penggunaan CPU dan memori Prometheus melonjak, dan anda menghadapi risiko OOM. Pada masa yang sama, log Pengumpul menunjukkan ralat penulisan jauh.
Simptom
- Panel Grafana menunjukkan "Tiada data" atau jurang berselang-seli.
- Memori pod Prometheus terus meningkat dan mungkin mencapai had.
- Pengumpul OpenTelemetry membalas dengan HTTP 500 atau 429.
- Metrik
upmenunjukkan sasaran tidak dapat dicapai, atauprometheus_remote_storage_queue_lengthterus meningkat.
Diagnosis
1. Periksa Sasaran Prometheus
Pertama, sahkan bahawa Prometheus masih mengikis semua sasaran. Lawati halaman UI Prometheus Targets atau gunakan baris arahan:
kubectl exec -n monitoring prometheus-0 -- wget -qO- http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {scrapeUrl, health, lastError}'
Cari sasaran yang menjadi down. Punca biasa termasuk perubahan label yang memutuskan pemilih atau perubahan port pengeksport.
2. Periksa Konfigurasi Penulisan Jauh
Sahkan bahawa konfigurasi penulisan jauh Prometheus betul. Periksa fail konfigurasi:
kubectl exec -n monitoring prometheus-0 -- cat /etc/prometheus/prometheus.yml | grep -A 20 'remote_write'
Pastikan url menunjuk ke titik akhir Pengumpul OpenTelemetry dan kelayakan (jika ada) tidak tamat tempoh.
3. Periksa Log Pengumpul OpenTelemetry
Tail log Pengumpul untuk mencari ralat tertentu:
kubectl logs -n otel-collector -l app=otel-collector --tail=100
Ralat biasa termasuk:
416 Requested Range Not Satisfiable— siri masa bergerak ke belakang.429 Too Many Requests— had tulis melebihi; anda memerlukan had kadar atau penskalaan.500 Internal Server Error— isu dalaman Pengumpul, kemungkinan salah konfigurasi pengeksport.
4. Periksa Letupan Kardinaliti
Kardinaliti tinggi menyebabkan tekanan memori Prometheus. Gunakan PromQL untuk mengesan:
kubectl exec -n monitoring prometheus-0 -- wget -qO- 'http://localhost:9090/api/v1/query?query=topk(10,%20count%20by%20(__name__)(%7B__name__%3D~%22.%2B%22%7D))'
Atau jalankan topk(10, count by (__name__)({__name__=~".+"})) di UI Web.
Periksa juga jika sebarang nilai label meletup, seperti url atau request_id:
count(count by (url) (http_requests_total)) > 1000
5. Sahkan Sama Ada Pengumpul Kehilangan Metrik
Dayakan pengeksport debug pada Pengumpul untuk menghantar data ke stdout dan perhatikan jika metrik tiba:
exporters:
debug:
verbosity: detailed
service:
pipelines:
metrics:
exporters: [debug, prometheus]
Arahan dan Tindakan
Sandarkan Konfigurasi Semasa
kubectl get configmap -n monitoring prometheus-config -o yaml > prometheus-config-backup.yaml
kubectl get configmap -n otel-collector otel-collector-config -o yaml > collector-config-backup.yaml
Gunakan Perubahan Konfigurasi dengan Selamat
Sentiasa gunakan --dry-run=client dan --dry-run=server terlebih dahulu:
kubectl apply -f prometheus-config-backup.yaml --dry-run=client -o yaml
kubectl apply -f prometheus-config-backup.yaml --dry-run=server
Laraskan metrics_relabel_configs untuk Mengehadkan Kardinaliti
Dalam konfigurasi Prometheus, tambah peraturan relabel untuk membuang label berkardinaliti tinggi daripada metrik yang dihantar ke penulisan jauh:
remote_write:
- url: http://otel-collector.otel-collector:4318/api/v1/metrics
write_relabel_configs:
- source_labels: [__name__]
regex: 'http_requests_total'
action: keep
- source_labels: [request_id]
regex: '.*'
action: drop
Muat Semula Konfigurasi Prometheus
kubectl exec -n monitoring prometheus-0 -- kill -HUP 1
Skala Pengumpul OpenTelemetry
Jika Pengumpul menjadi hambatan, tambah bilangan replika dan sumber:
kubectl scale deployment/otel-collector --replicas=3 -n otel-collector
kubectl set resources deployment/otel-collector -n otel-collector --requests='cpu=500m,memory=1Gi' --limits='cpu=1,memory=2Gi'
Kawalan Risiko
- Jangan ubah suai konfigurasi pengeluaran tanpa membuat sandaran.
- Salah konfigurasi
write_relabel_configsboleh senyap membuang semua data; sentiasa uji dalam persekitaran staging dahulu. - Menjalankan
kill -HUPmemuat semula konfigurasi tanpa memulakan semula proses. Jika konfigurasi tidak sah, Prometheus mungkin gagal dimuat semula; gunakanpromtool check configsebelum digunakan. - Membuang/mengekalkan label pada skala besar boleh menghalang Prometheus daripada menemui sasaran; nilai kesan terlebih dahulu.
- Menskala Pengumpul mungkin meningkatkan kos; laraskan berdasarkan penggunaan sumber sebenar.
Pelan Gulung Balik
- Pulihkan sandaran konfigurasi:
kubectl apply -f prometheus-config-backup.yaml
kubectl apply -f collector-config-backup.yaml
-
Muat semula Prometheus untuk menggunakan konfigurasi.
-
Jika perubahan Pengumpul menyebabkan isu, gulung balik Deployment ke versi imej sebelumnya:
kubectl rollout undo deployment/otel-collector -n otel-collector
- Sahkan semua Pod sihat:
kubectl get pods -n monitoring -n otel-collector
Pengesahan
Sahkan Prometheus Menerima Penulisan Jauh
Periksa metrik penulisan jauh:
prometheus_remote_storage_succeeded_samples_total - prometheus_remote_storage_failed_samples_total
Atau query metrik up:
up
Sahkan Metrik OpenTelemetry Sampai ke Prometheus
Andaikan aplikasi mendedahkan http_requests_total, buat panel Grafana dan query:
sum(rate(http_requests_total[5m])) by (service)
Sahkan Kardinaliti Telah Menurun
Jalankan semula query kardinaliti dan pastikan bilangan nilai label berada dalam julat yang munasabah.
Periksa Penggunaan Memori
Perhatikan memori kontena Prometheus untuk mengesahkan ia tidak lagi meningkat.
Bila Perlu Hantar Tiket OpsGlobal
- Jika anda tidak dapat memulihkan data selepas setengah jam langkah di atas.
- Prometheus berulang kali dibunuh OOM dan memerlukan penyelesaian sharding atau penyimpanan jangka panjang.
- Pengumpul OpenTelemetry crash-loop dan anda tidak dapat mengesan isu konfigurasi.
- Anda memerlukan bantuan pakar untuk mereka bentuk seni bina pemerhatian berskala besar untuk mengelakkan masalah serupa.
OpsGlobal menyediakan sokongan SRE 24×7. Pakar kami boleh mengakses kluster anda dari jauh, mendiagnosis dan menyelesaikan isu kompleks Prometheus, Grafana, dan OpenTelemetry dengan cepat, memastikan timbunan pemerhatian anda stabil dan boleh dipercayai.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Observability dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan dunia sebenar untuk mendiagnosis dan membaiki isu saluran pemerhatian biasa yang melibatkan OpenTelemetry, Prometheus, dan Grafana di Kubernetes, termasuk letupan kardinaliti, kegagalan penulisan jauh, dan titik buta papan pemuka.
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.