Buat pekerjaan scrape Prometheus khusus dari kluster Kubernetes Anda menggunakan ConfigMap

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:

  1. Buat rahasia di kube-system namespace bernama ama-metrics-mtls-secret.

    Nama kunci password1 bisa apa saja selama cocok dengan nama file dalam password_file jalur 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-secret dipasang pada ama-metrics pod di jalur /etc/prometheus/certs/ dan tersedia untuk scraper Prometheus. Kunci (password1 dalam contoh di atas) akan menjadi nama file. Nilainya adalah base64 yang didekodekan dan ditambahkan sebagai konten file dalam kontainer.

  2. Berikan jalur file dalam konfigurasi scrape kustom di ConfigMap:

    Autentikasi Dasar Bidang username harus berisi string nama pengguna yang sebenarnya. Bidang password_file harus 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/password1
    

    Token Pembawa Bidang bearer_token_file harus 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.

  1. Buat rahasia di kube-system namespace bernama ama-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_content 
    

    Rahasia ama-metrics-mtls-secret dipasang pada ama-metrics pod 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.

  2. 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)

Langkah selanjutnya