Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penyesuaian pengumpulan metrik Prometheus dari kluster Kubernetes Anda menjelaskan cara menggunakan ConfigMap untuk menyesuaikan proses pengikisan metrik Prometheus dari target default di kluster Kubernetes Anda. Artikel ini menjelaskan cara menggunakan ConfigMap untuk membuat pekerjaan scrape kustom untuk penyesuaian lebih lanjut dan target tambahan.
ConfigMaps
Tabel berikut menjelaskan ConfigMaps yang digunakan untuk membuat pekerjaan pengikisan kustom. ConfigMaps ini tidak ada secara default di kluster saat Prometheus Terkelola diaktifkan.
| Peta Konfigurasi | Description |
|---|---|
ama-metrics-prometheus-config (Disarankan) |
Ketika ConfigMap dengan nama ini dibuat, tugas scrape yang ditentukan di dalamnya dijalankan dari pod replika metrik dari Azure Monitor yang berjalan di kluster. |
ama-metrics-prometheus-config-node (Tingkat Lanjut) |
Berikan konfigurasi scrape Prometheus untuk addon DaemonSet yang berjalan pada setiap node Linux di kluster dan target tingkat node apa pun pada setiap node. Lihat Penyetelan Tingkat Lanjut. |
ama-metrics-prometheus-config-node-windows (Tingkat Lanjut) |
Berikan konfigurasi scrape Prometheus untuk addon DaemonSet yang berjalan di setiap node Windows dalam kluster dan target tingkat node pada masing-masing node. Lihat Penyetelan Tingkat Lanjut. |
Membuat file konfigurasi Prometheus
Alih-alih memodifikasi ama-metrics-prometheus-configsecara langsung , lebih mudah untuk membuat file konfigurasi lalu mengonversinya ke ConfigMap. Lihat Pengaturan konfigurasi Scrape di bawah ini untuk detail tentang berbagai bagian file ini.
Buat file konfigurasi scrape Prometheus bernama prometheus-config menggunakan format berikut. Ini mencantumkan konfigurasi scrape di bawah bagian scrape_configs dan dapat secara opsional menggunakan bagian global untuk mengatur global scrape_interval, scrape_timeout, dan external_labels. Lihat referensi konfigurasi scrape Prometheus.io untuk detail lengkap tentang opsi untuk konfigurasi scrape.
global:
scrape_interval: <duration>
scrape_timeout: <duration>
external_labels:
<labelname1>: <labelvalue>
<labelname2>: <labelvalue>
scrape_configs:
- <job-x>
- <job-y>
Berikut ini adalah contoh file konfigurasi scrape Prometheus:
global:
scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
scrape_interval: 60s
static_configs:
- targets: ['my-static-service.svc.cluster.local:1234']
- job_name: prometheus_example_app
scheme: http
kubernetes_sd_configs:
- role: service
relabel_configs:
- source_labels: [__meta_kubernetes_service_name]
action: keep
regex: "prometheus-example-service"
Petunjuk / Saran
Lihat contoh Prometheus dari konfigurasi scrape untuk kluster Kubernetes.
Memvalidasi file konfigurasi scrape
Agen menggunakan alat kustom promconfigvalidator untuk memvalidasi konfigurasi Prometheus yang diberikan melalui ConfigMap. Jika konfigurasi tidak valid, konfigurasi kustom ditolak oleh agen. Setelah membuat file konfigurasi Prometheus, Anda dapat menggunakan alat ini untuk memvalidasi konfigurasi Sebelum membuat ConfigMap untuk agen.
Alat promconfigvalidator ini disertakan dalam pod addon metrik Azure Monitor. Anda dapat menggunakan salah satu pod ama-metrics-node-* dalam kube-system namespace di kluster Anda untuk mengunduh alat validasi. Gunakan kubectl cp untuk mengunduh alat dan konfigurasinya dengan perintah berikut.
for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator; kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done
Setelah menyalin executable dan yaml, temukan jalur file konfigurasi Prometheus Anda. Kemudian ganti <config path> dalam perintah dan jalankan validator dengan perintah berikut.
./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"
Menjalankan validator menghasilkan file merged-otel-config.yaml konfigurasi gabungan jika tidak ada jalur yang disediakan dengan parameter opsional output . Jangan gunakan file gabungan yang dibuat secara otomatis ini karena hanya digunakan untuk tujuan validasi dan penelusuran kesalahan alat.
Menyebarkan file konfigurasi sebagai ConfigMap
File konfigurasi Prometheus kustom Anda digunakan sebagai bidang bernama prometheus-config di dalam ama-metrics-prometheus-config, ama-metrics-prometheus-config-node, atau ama-metrics-prometheus-config-node-windows ConfigMap di kube-system namespace. Buat ConfigMap dari file konfigurasi scrape dengan mengganti nama file konfigurasi Prometheus Anda menjadi prometheus-config tanpa ekstensi file dan menjalankan satu atau beberapa perintah sampel berikut, tergantung pada ConfigMap mana yang ingin Anda buat untuk konfigurasi pekerjaan scrape kustom Anda.
Buat ConfigMap yang akan digunakan oleh replicaset:
kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system
Ini membuat ConfigMap bernama ama-metrics-prometheus-config di kube-system namespace. Untuk melihat apakah ada masalah dengan validasi, pemrosesan, atau penggabungan konfigurasi, Anda dapat melihat ama-metrics pod replika
Buat ConfigMap yang akan digunakan oleh Linux DaemonSet:
kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system
Ini membuat ConfigMap bernama ama-metrics-prometheus-config-node di kube-system namespace. Untuk melihat apakah ada masalah dengan validasi, pemrosesan, atau penggabungan konfigurasi, Anda dapat melihat pod daemonset linux ama-metrics-node
Buat ConfigMap yang akan digunakan oleh Windows DaemonSet
kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system
Ini membuat ConfigMap bernama ama-metrics-prometheus-config-node-windows di kube-system namespace. Untuk melihat apakah ada masalah dengan validasi, pemrosesan, atau penggabungan konfigurasi, Anda dapat melihat pod windows daemonset ama-metrics-win-node
Troubleshooting
Jika Anda berhasil membuat ConfigMap di namespace kube-system dan masih tidak melihat target kustom yang dikumpulkan, periksa kesalahan dalam log pod replika untuk ama-metrics-prometheus-config ConfigMap atau periksa log pod DaemonSet untuk ama-metrics-prometheus-config-node ConfigMap menggunakan kubectl logs dan pastikan tidak ada kesalahan di bagian Mulai Penggabungan Default dan Konfigurasi Prometheus Kustom dengan awalan prometheus-config-merger
Konfigurasi scrape
Saat ini, metode penemuan target yang didukung untuk konfigurasi scrape adalah static_configs atau kubernetes_sd_configs untuk menentukan atau menemukan target.
Konfigurasi statis memiliki daftar target statis dan label tambahan apa pun untuk ditambahkan ke dalamnya seperti dalam hal berikut.
scrape_configs:
- job_name: example
- targets: [ '10.10.10.1:9090', '10.10.10.2:9090', '10.10.10.3:9090' ... ]
- labels: [ label1: value1, label1: value2, ... ]
Target yang ditemukan menggunakan kubernetes_sd_configs masing-masing memiliki label yang berbeda __meta_* tergantung pada peran apa yang ditentukan. Anda dapat menggunakan label di bagian relabel_configs untuk memfilter target atau mengganti label untuk target.
Konfigurasi pelabelan
Bagian relabel_configs ini diterapkan pada saat penemuan target dan berlaku untuk setiap target untuk pekerjaan tersebut. Contoh berikut menunjukkan cara untuk menggunakan relabel_configs.
Menambahkan label Tambahkan label baru yang dipanggil example_label dengan nilai example_value ke setiap metrik pekerjaan. Gunakan __address__ sebagai label sumber hanya karena label tersebut selalu ada dan menambahkan label untuk setiap target pekerjaan.
relabel_configs:
- source_labels: [__address__]
target_label: example_label
replacement: 'example_value'
Gunakan label Penemuan Layanan Kubernetes
Jika pekerjaan digunakan kubernetes_sd_configs untuk menemukan target, setiap peran memiliki label terkait __meta_* untuk metrik. Label __* dihilangkan setelah menemukan target. Untuk memfilter dengan menggunakannya di tingkat metrik, pertama-tama pertahankan menggunakannya relabel_configs dengan menetapkan nama label. Kemudian gunakan metric_relabel_configs untuk memfilter.
# Use the kubernetes namespace as a label called 'kubernetes_namespace'
relabel_configs:
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
# Keep only metrics with the kubernetes namespace 'default'
metric_relabel_configs:
- source_labels: [kubernetes_namespace]
action: keep
regex: 'default'
Pelabelan ulang tugas dan instance
Anda dapat mengubah job nilai label dan instance berdasarkan label sumber, sama seperti label lainnya.
# Replace the job name with the pod label 'k8s app'
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_k8s_app]
target_label: job
# Replace the instance name with the node name. This is helpful to replace a node IP
# and port with a value that is more readable
relabel_configs:
- source_labels: [__meta_kubernetes_node_name]
target_label: instance
Konfigurasi pelabelan ulang metrik
Konfigurasi pelabelan ulang metrik diterapkan setelah pengikisan dan sebelum penyerapan. Gunakan bagian metric_relabel_configs untuk memfilter metrik setelah pengikisan. Lihat contoh berikut.
Hilangkan metrik menurut nama
# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
action: drop
regex: 'example_metric_name'
Simpan hanya metrik tertentu berdasarkan nama
# Keep only the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
action: keep
regex: 'example_metric_name'
# Keep only metrics that start with 'example_'
metric_relabel_configs:
- source_labels: [__name__]
action: keep
regex: '(example_.*)'
Memfilter metrik menurut label
# Keep metrics only where example_label = 'example'
metric_relabel_configs:
- source_labels: [example_label]
action: keep
regex: 'example'
# Keep metrics only if `example_label` equals `value_1` or `value_2`
metric_relabel_configs:
- source_labels: [example_label]
action: keep
regex: '(value_1|value_2)'
# Keep metrics only if `example_label_1 = value_1` and `example_label_2 = value_2`
metric_relabel_configs:
- source_labels: [example_label_1, example_label_2]
separator: ';'
action: keep
regex: 'value_1;value_2'
# Keep metrics only if `example_label` exists as a label
metric_relabel_configs:
- source_labels: [example_label_1]
action: keep
regex: '.+'
Mengganti nama metrik Penggantian nama metrik tidak didukung.
Nota
Jika Anda ingin menambahkan label ke semua pekerjaan dalam konfigurasi kustom Anda, tambahkan label secara eksplisit menggunakan metrics_relabel_configs untuk setiap pekerjaan. Konfigurasi Prometheus berbasis ConfigMap tidak mendukung label eksternal global.
relabel_configs:
- source_labels: [__address__]
target_label: example_label
replacement: 'example_value'
Autentikasi Dasar dan Token Pembawa
Jika Anda menggunakan nama pengguna, kata sandi, atau kredensial sebagai teks biasa dalam konfigurasi scrape, tidak diperlukan perubahan tambahan. Nilai yang ditentukan dalam konfigurasi akan digunakan untuk pengikisan. Jika Anda menggunakan username_file atau password_file (atau pengaturan konfigurasi _file apa pun) untuk basic_auth atau bearer_token pengaturan dalam konfigurasi prometheus Anda, ikuti langkah-langkah di bawah ini:
Buat rahasia di
kube-systemnamespace bernamaama-metrics-mtls-secret.Nama kunci
password1bisa apa saja selama cocok dengan nama file dalampassword_filejalur file dalam konfigurasi scrape Prometheus di langkah berikutnya. Nilai untuk kunci harus dikodekan base64.apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: password1: <base64-encoded-string>Rahasia
ama-metrics-mtls-secretdipasang padaama-metricspod di jalur/etc/prometheus/certs/dan tersedia untuk scraper Prometheus. Kunci (password1dalam contoh di atas) akan menjadi nama file. Nilainya adalah base64 yang didekodekan dan ditambahkan sebagai konten file dalam kontainer.Berikan jalur file dalam konfigurasi scrape kustom di ConfigMap:
Autentikasi Dasar Bidang
usernameharus berisi string nama pengguna yang sebenarnya. Bidangpassword_fileharus berisi jalur ke file yang berisi kata sandi.# Sets the `Authorization` header on every scrape request with the # configured username and password. basic_auth: username: <username string> password_file: /etc/prometheus/certs/password1Token Pembawa Bidang
bearer_token_fileharus berisi jalur ke file yang berisi token.# Sets the `Authorization` header on every scrape request with the bearer token # read from the configured file. It is mutually exclusive with `bearer_token`. bearer_token_file: /etc/prometheus/certs/password1
Lihat dokumentasi prometheus scrape_config untuk informasi selengkapnya tentang pengaturan ini.
Pengikisan berbasis TLS
Jika Anda ingin mengikis metrik Prometheus dari titik akhir https, konfigurasi Prometheus, PodMonitor, atau ServiceMonitor harus memiliki scheme pengaturan TLS yang diatur ke https dan tambahan.
Buat rahasia di
kube-systemnamespace bernamaama-metrics-mtls-secret. Setiap pasangan kunci-nilai yang ditentukan di bagian data objek rahasia akan dipasang sebagai file terpisah di lokasi /etc/prometheus/certs ini dengan nama file yang sama dengan kunci yang ditentukan di bagian data. Nilai rahasia harus dikodekan base64.Berikut ini adalah contoh YAML rahasia:
apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: <certfile>: base64_cert_content <keyfile>: base64_key_contentRahasia
ama-metrics-mtls-secretdipasang padaama-metricspod di jalur/etc/prometheus/certs/dan tersedia untuk scraper Prometheus. Kuncinya adalah nama file. Nilainya adalah base64 yang didekodekan dan ditambahkan sebagai konten file dalam kontainer.Berikan jalur file dalam konfigurasi Prometheus, PodMonitor, atau ServiceMonitor:
- Gunakan contoh berikut untuk menyediakan pengaturan konfigurasi TLS di ConfigMap:
tls_config: # CA certificate to validate API server certificate with. ca_file: /etc/prometheus/certs/<certfile> # Certificate and key files for client cert authentication to the server. cert_file: /etc/prometheus/certs/<certfile> key_file: /etc/prometheus/certs/<keyfile> # Disable validation of the server certificate. insecure_skip_verify: false
Autentikasi Dasar dan TLS
Jika Anda ingin menggunakan token autentikasi dasar atau token pembawa (info masuk berbasis file) dan pengaturan autentikasi TLS di ConfigMap Anda, pastikan bahwa rahasia ama-metrics-mtls-secret menyertakan semua kunci di bawah bagian data dengan nilai yang dikodekan base64 yang sesuai, seperti yang ditunjukkan dalam contoh berikut:
apiVersion: v1
kind: Secret
metadata:
name: ama-metrics-mtls-secret
namespace: kube-system
type: Opaque
data:
certfile: base64_cert_content # used for TLS
keyfile: base64_key_content # used for TLS
password1: base64-encoded-string # used for basic auth
password2: base64-encoded-string # used for basic auth
Nota
Jalur /etc/prometheus/certs/ ini wajib, tetapi password1 dapat berupa string apa pun dan perlu mencocokkan kunci untuk data dalam rahasia yang dibuat di atas. Ini karena rahasia ama-metrics-mtls-secret dipasang di jalur /etc/prometheus/certs/ dalam kontainer.
Nilai yang dikodekan base64 secara otomatis didekodekan oleh pod ama-metrics ketika rahasia dipasang sebagai file. Pastikan nama rahasia adalah ama-metrics-mtls-secret dan berada dalam kube-system namespace.
Rahasia harus dibuat terlebih dahulu, lalu ConfigMap, PodMonitor, atau ServiceMonitor harus dibuat di kube-system namespace. Urutan pembuatan rahasia penting. Ketika tidak ada rahasia kecuali ConfigMap, PodMonitor, atau ServiceMonitor yang menunjuk ke rahasia, kesalahan berikut akan ada di log kontainer prometheus-collector ama-metrics: no file found for cert....
Lihat tls_config untuk detail selengkapnya tentang pengaturan konfigurasi TLS.
Pengaturan tingkat lanjut: Mengonfigurasi tugas scrape Prometheus kustom untuk DaemonSet
Pod ama-metrics Replika menggunakan konfigurasi Prometheus kustom dan mengikis target yang ditentukan. Untuk kluster dengan sejumlah besar simpul dan pod dan metrik dalam jumlah besar untuk diekstraksi, beberapa target scrape kustom yang berlaku dapat dilepas dari pod Replika tunggal ama-metrics ke ama-metrics pod DaemonSet.
ama-metrics-prometheus-config-node ConfigMap, mirip dengan ConfigMap replica-set, dan dapat dibuat untuk memiliki konfigurasi scrape statis pada setiap simpul. Konfigurasi scrape hanya boleh menargetkan satu simpul dan tidak boleh menggunakan penemuan layanan/anotasi pod. Jika tidak, setiap simpul mencoba mengambil data dari semua target dan melakukan banyak panggilan ke server API Kubernetes.
Target scrape kustom dapat mengikuti format yang sama dengan menggunakan static_configs dengan target dan menggunakan $NODE_IP variabel lingkungan dan menentukan port yang akan diekstraksi. Setiap pod dari DaemonSet mengambil konfigurasi, mengumpulkan metrik, dan mengirimkannya untuk node tersebut.
Konfigurasi berikut node-exporter adalah salah satu target default untuk pod DaemonSet. Ini menggunakan variabel lingkungan $NODE_IP, yang sudah diatur untuk setiap kontainer add-on ama-metrics untuk menargetkan port tertentu pada simpul.
- job_name: nodesample
scrape_interval: 30s
scheme: http
metrics_path: /metrics
relabel_configs:
- source_labels: [__metrics_path__]
regex: (.*)
target_label: metrics_path
- source_labels: [__address__]
replacement: '$NODE_NAME'
target_label: instance
static_configs:
- targets: ['$NODE_IP:9100']
Pengaturan konfigurasi scrape
Bagian berikut menjelaskan pengaturan yang didukung dalam file konfigurasi Prometheus yang digunakan di ConfigMap. Lihat referensi konfigurasi Prometheus untuk detail selengkapnya tentang pengaturan ini.
Pengaturan global
Format konfigurasi untuk pengaturan global sama dengan yang didukung oleh konfigurasi prometheus OSS
global:
scrape_interval: <duration>
scrape_timeout: <duration>
external_labels:
<labelname1>: <labelvalue>
<labelname2>: <labelvalue>
scrape_configs:
- <job-x>
- <job-y>
Pengaturan yang disediakan di bagian global berlaku untuk semua pekerjaan scrape (baik pekerjaan di Configmap dan sumber daya Kustom) tetapi ditimpa jika ditentukan dalam pekerjaan individual.
Nota
Jika Anda ingin menggunakan pengaturan global yang berlaku untuk semua pekerjaan scrape, dan hanya memiliki Sumber Daya Kustom, maka Anda masih perlu membuat ConfigMap yang berisi hanya pengaturan global. (Pengaturan untuk masing-masing di sumber daya kustom akan menggantikan pengaturan yang ada di bagian global)