Senario
Kluster Kubernetes platform e-dagang mengalami kependaman dan ralat berselang dalam pengeluaran. Pengguna melaporkan muat halaman perlahan, tetapi metrik CPU dan memori kelihatan normal. Pasukan SRE perlu mencari punca dengan cepat.
Gejala
- Masa respons aplikasi meningkat dari 200ms ke 2s
- Kadar ralat melonjak dari 0.1% ke 5%
- Penggunaan sumber kluster rendah (CPU 30%, memori 50%)
- Tiada anomali ketara dalam log
Diagnosis
Pemantauan sedia ada hanya meliputi metrik infrastruktur, tiada penjejakan teragih dan konteks perniagaan. Kita perlukan OpenTelemetry untuk penjejakan peringkat permintaan, Prometheus untuk metrik, dan Grafana untuk visualisasi bersatu.
Arahan Penggunaan
1. Gunakan Pengumpul OpenTelemetry
# otel-collector-daemonset.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: otel-collector
namespace: observability
spec:
selector:
matchLabels:
app: otel-collector
template:
metadata:
labels:
app: otel-collector
spec:
containers:
- name: otel-collector
image: otel/opentelemetry-collector-contrib:0.88.0
ports:
- containerPort: 4318
name: otlp-http
- containerPort: 4317
name: otlp-grpc
- containerPort: 8888
name: metrics
volumeMounts:
- name: config
mountPath: /etc/otelcol-contrib/config.yaml
subPath: config.yaml
volumes:
- name: config
configMap:
name: otel-collector-config
2. Konfigurasi ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-config
namespace: observability
data:
config.yaml: |
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch:
timeout: 1s
send_batch_size: 1024
exporters:
otlp:
endpoint: "jaeger-collector.observability:4317"
tls:
insecure: true
prometheus:
endpoint: "0.0.0.0:8889"
namespace: "app"
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [otlp]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
3. Konfigurasi Pengikisan Prometheus
# prometheus-scrape-config.yaml
scrape_configs:
- job_name: 'otel-collector'
static_configs:
- targets: ['otel-collector.observability:8889']
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
4. Gunakan Jaeger (untuk storan jejak)
kubectl create namespace observability
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm install jaeger jaegertracing/jaeger -n observability --set storage.backend=elasticsearch --set storage.elasticsearch.host=elasticsearch-master.observability
5. Gunakan Grafana
helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana grafana/grafana -n observability --set datasources."datasources\.yaml".apiVersion=1 --set datasources."datasources\.yaml".datasources[0].name=Prometheus --set datasources."datasources\.yaml".datasources[0].type=prometheus --set datasources."datasources\.yaml".datasources[0].url=http://prometheus-server.observability --set datasources."datasources\.yaml".datasources[0].access=proxy --set datasources."datasources\.yaml".datasources[0].isDefault=true
Kawalan Risiko
- Kadar pensampelan: Tetapkan kadar pensampelan yang munasabah (cth., 10%) untuk mengelakkan beban prestasi daripada penjejakan penuh.
- Label berkardinaliti tinggi: Elakkan menggunakan nilai unik seperti ID pengguna dalam label jejak atau metrik.
- Perubahan konfigurasi: Sahkan dalam persekitaran ujian sebelum menolak ke pengeluaran.
- Had sumber: Tetapkan had CPU/memori untuk Pengumpul untuk mengelakkan OOM.
Pengembalian
- Padam DaemonSet:
kubectl delete -f otel-collector-daemonset.yaml - Alihkan konfigurasi pengikisan Prometheus dan mulakan semula Prometheus.
- Padam carta helm Jaeger dan Grafana:
helm delete jaeger -n observability && helm delete grafana -n observability - Pulihkan konfigurasi pemantauan asal untuk aplikasi.
Pengesahan
- Jejak: Akses UI Jaeger, cari permintaan, lihat butiran span.
- Metrik: Kuari
app_request_duration_secondsdalam Prometheus. - Papan pemuka: Import papan pemuka yang telah ditetapkan dalam Grafana, sahkan kependaman dan kadar ralat menurun.
- Hujung ke hujung: Hantar permintaan ujian secara manual, perhatikan jejak dan metrik dikemas kini secara masa nyata.
Bila untuk Hantar Tiket OpsGlobal
- Tiada data dilaporkan selepas menggunakan Pengumpul.
- Prometheus tidak dapat mengikis sasaran.
- Peningkatan luar biasa dalam penggunaan sumber kluster.
- Perlu bantuan pakar untuk mengoptimumkan strategi pensampelan atau mereka bentuk papan pemuka tersuai.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Observability dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Artikel ini membimbing senario sebenar membina pemerhatian hujung-ke-hujung untuk kluster Kubernetes menggunakan Prometheus, Grafana dan OpenTelemetry, merangkumi gejala, diagnosis, arahan penggunaan, kawalan risiko, pengembalian 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.