Untuk aplikasi yang terintegrasi dengan Prometheus, Anda dapat menggunakan proxy sidecar untuk mengekspos metrik aplikasi dengan menggabungkan metrik Istio dan metrik aplikasi. Topik ini menjelaskan cara menggabungkan metrik Istio dengan metrik aplikasi.
Prasyarat
Sebuah instance Service Mesh (ASM) versi 1.17.2.30 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat instance ASM atau Perbarui instance ASM.
Fitur ini tidak cocok untuk skenario di mana metrik aplikasi bersifat sensitif. Metrik aplikasi dikumpulkan bersama dengan metrik Istio. Pengguna yang memiliki izin untuk melihat metrik Istio juga dapat melihat metrik aplikasi.
Deskripsi fitur
Setelah mengaktifkan fitur penggabungan metrik Istio dengan metrik aplikasi, ASM menggabungkan metrik aplikasi dengan metrik Istio. Anotasi prometheus.io dari aplikasi ditambahkan ke semua pod pada bidang data untuk mengaktifkan kemampuan pengambilan metrik Prometheus. Jika anotasi tersebut sudah ada, mereka akan ditimpa. Proxy sidecar menggabungkan metrik Istio dengan metrik aplikasi. Prometheus dapat memperoleh metrik yang digabungkan dari titik akhir :15020/stats/prometheus.
Setelah fitur ini diaktifkan, ASM melakukan operasi berikut pada pod:
Metode pengambilan yang dianotasikan dengan anotasi
prometheus.iosebelum ASM diperkenalkan disimpan ke variabel lingkungan proxy sidecar.Metrik Prometheus yang dihasilkan oleh aplikasi yang dicegat oleh ASM dan metrik proxy sidecar digabungkan dan diekspor ke titik akhir
:15020/stats/prometheusuntuk diambil oleh Prometheus.
Langkah 1: Sebarkan aplikasi contoh
Sebarkan aplikasi yang berisi anotasi prometheus.io. Untuk informasi lebih lanjut, lihat Sebarkan aplikasi dalam instance ASM.
Kode contoh berikut memberikan contoh file penyebaran untuk aplikasi productpage:
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage-v1
labels:
app: productpage
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: productpage
version: v1
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9080"
prometheus.io/path: "/metrics"
labels:
app: productpage
version: v1
spec:
......Setelah aplikasi productpage diterapkan, informasi pod berikut dihasilkan:
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/pod-ips: 172.17.0.132
kubectl.kubernetes.io/default-container: productpage
kubectl.kubernetes.io/default-logs-container: productpage
kubernetes.io/psp: ack.privileged
prometheus.io/path: /metrics
prometheus.io/port: '9080'
prometheus.io/scrape: 'true'Dalam template YAML di atas, Anda dapat melihat anotasi prometheus.io berikut:
prometheus.io/path: /metrics
prometheus.io/port: '9080'
prometheus.io/scrape: 'true'Langkah 2: Aktifkan fitur penggabungan metrik Istio dengan metrik aplikasi
Secara default, fitur ini dinonaktifkan untuk instance ASM. Anda dapat mengonfigurasi fitur ini untuk instance ASM secara global atau untuk setiap workload dengan menambahkan anotasi prometheus.istio.io/merge-metrics: "true" ke pod aplikasi. Dalam contoh ini, fitur ini dikonfigurasi untuk instance ASM.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
Di bagian Config Info, klik Enable di samping Merge Istio's Metrics with Application Metrics. Dalam pesan Enable Merging of Istio's Metrics with Application Metrics, klik OK.
Jika Anda tidak lagi memerlukan fitur ini, Anda dapat menonaktifkannya dengan salah satu cara berikut:
Jika fitur ini diaktifkan untuk instance ASM, klik Disable di samping Merge Istio's Metrics with Application Metrics di bagian Config Info. Dalam pesan Disable Merging of Istio's Metrics with Application Metrics, klik OK.
Jika fitur ini diaktifkan untuk workload, tambahkan anotasi
prometheus.istio.io/merge-metrics: "false"ke pod yang sesuai.
Langkah 3: Lihat hasilnya
Setelah mengaktifkan fitur penggabungan metrik Istio dengan metrik aplikasi, lihat informasi pod setelah me-restart pod.
Kode contoh berikut memberikan contoh template YAML pod:
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/pod-ips: 172.17.0.126
kubectl.kubernetes.io/default-container: productpage
kubectl.kubernetes.io/default-logs-container: productpage
kubernetes.io/psp: ack.privileged
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'
......
spec:
containers:
- args:
- proxy
- sidecar
......
env:
......
- name: ISTIO_PROMETHEUS_ANNOTATIONS
value: '{"scrape":"true","path":"/metrics","port":"9080"}'
Template YAML di atas menunjukkan bahwa anotasi prometheus.io diperbarui menjadi konten berikut. Selain itu, variabel lingkungan baru bernama ISTIO_PROMETHEUS_ANNOTATIONS ditambahkan. Kode contoh berikut menunjukkan bahwa nilai variabel lingkungan tersebut sama dengan anotasi prometheus.io yang dikonfigurasi untuk aplikasi.
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'