Megosztás a következőn keresztül:


Egyéni Prometheus lekérdezési feladat létrehozása Kubernetes-fürtben a ConfigMap segítségével

A Prometheus-metrikák gyűjteményének testreszabása a Kubernetes-fürtből azt ismerteti, hogyan szabhatja testre a Prometheus-metrikák kaparását a Kubernetes-fürt alapértelmezett példányaiból a ConfigMap használatával. Ez a cikk bemutatja, hogyan hozhat létre egyéni kaparásfeladatokat a ConfigMap használatával további testreszabási és további célokhoz.

Konfigurációtérképek

Az alábbi táblázat az egyéni kaparási feladatok létrehozásához használt konfigurációtérképeket ismerteti. Ezek a konfigurációtérképek alapértelmezés szerint nem léteznek a fürtben, ha engedélyezve van a felügyelt Prometheus.

Konfigurációs térkép Description
ama-metrics-prometheus-config (Ajánlott) Az ilyen nevű ConfigMap létrehozásakor a rendszer a benne definiált kaparós feladatokat a fürtben futó Azure Monitor-metrikák replika podjáról futtatja.
ama-metrics-prometheus-config-node (Haladó) Adja meg a Prometheus scrape konfigurációját az addon DaemonSethez, amely a fürt minden Linux-csomópontján fut, valamint a csomópontok mindegyikére vonatkozó csomópontszintű célokat is. Lásd: Speciális beállítás.
ama-metrics-prometheus-config-node-windows (Haladó) Adja meg a Prometheus scrape konfigurációját az addon DaemonSethez, amely a fürt minden Windows-csomópontján fut, valamint adja meg a csomópont szintű célokat az egyes csomópontokon. Lásd: Speciális beállítás.

Prometheus konfigurációs fájl létrehozása

A közvetlen módosítás ama-metrics-prometheus-confighelyett egyszerűbb létrehozni egy konfigurációs fájlt, majd átalakítani ConfigMap-ra. A fájl különböző szakaszaival kapcsolatos részletekért tekintse meg az alábbi Scrape konfigurációs beállításokat .

Hozzon létre egy Prometheus scrape konfigurációs fájlt prometheus-config a következő formátumban. Ez a scrape_configs szakasz alatt felsorolja a kaparáskonfigurációkat, és opcionálisan használhatja a globális szakaszt a globális scrape_interval, scrape_timeout és external_labels beállításához. A kaparókonfiguráció beállításainak részletes részleteiért tekintse meg Prometheus.io kaparáskonfigurációs referenciát .

global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>

Az alábbi minta Prometheus scrape konfigurációs fájl:

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"

Jótanács

Tekintse meg a Prometheus-példákat egy Kubernetes-fürt kaparáskonfigurációira.

A scrape config fájl ellenőrzése

Az ügynök egy egyéni promconfigvalidator eszközzel ellenőrzi a ConfigMap-on keresztül kapott Prometheus-konfigurációt. Ha a konfiguráció érvénytelen, az ügynök elutasítja az egyéni konfigurációt. Miután létrehozta a Prometheus konfigurációs fájlját, ezzel az eszközzel ellenőrizheti a konfigurációt, mielőtt létrehoz egy ConfigMap-et az ügynökhöz.

Az promconfigvalidator eszköz az Azure Monitor metrika-bővítmény podon belül lesz szállítva. A fürtjében található kube-system névtérben bármelyik ama-metrics-node-* pod használatával letöltheti az érvényesítési eszközt. Az kubectl cp eszköz és konfigurációja az alábbi paranccsal tölthető le.

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

A végrehajtható fájl és a yaml másolása után keresse meg a Prometheus konfigurációs fájl elérési útját. Ezután cserélje le a <config path>-t a parancsban, és az érvényesítőt futtassa a következő módon.

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

Az érvényesítő futtatása létrehozza az egyesített konfigurációs fájlt merged-otel-config.yaml , ha nincs megadva elérési út az opcionális output paraméterrel. Ne használja ezt az automatikusan létrehozott egyesített fájlt, mivel csak eszközérvényesítési és hibakeresési célokra használják.

ConfigMap-ként történő konfigurációs fájl üzembe helyezése

Az egyéni Prometheus-konfigurációs fájlt a prometheus-config, ama-metrics-prometheus-config, vagy ama-metrics-prometheus-config-node ConfigMapben található, ama-metrics-prometheus-config-node-windows névre hallgató mezőként használja fel a kube-system névtérben. Hozzon létre egy ConfigMap-et a scrape konfigurációs fájlból úgy, hogy a Prometheus konfigurációs fájlját átnevezi prometheus-config fájlkiterjesztés nélkül, majd futtassa az alábbi mintaparancsok közül egyet vagy többet, attól függően, hogy melyik ConfigMap-et szeretné létrehozni az egyéni scrape feladat konfigurációjához.

Hozzon létre ConfigMap-et a replikakészlet számára:

kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

Ez létrehoz egy ama-metrics-prometheus-config elnevezésű ConfigMap-et a kube-system névtérben. Ha ellenőrizni szeretné, hogy van-e probléma a konfiguráció érvényesítésével, feldolgozásával vagy egyesítésével kapcsolatban, megtekintheti a ama-metrics replika podjait

Hozzon létre ConfigMap-et, amelyet a Linux DaemonSet használ:

kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

Ez létrehoz egy ConfigMap-et ama-metrics-prometheus-config-node néven a kube-system névtérben. Annak ellenőrzéséhez, hogy van-e probléma a konfiguráció érvényesítésével, feldolgozásával vagy egyesítésével kapcsolatban, tekintse meg a ama-metrics-node linuxos deamonset podokat

A Windows DaemonSet által használandó konfigurációtérkép létrehozása

kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

Ez létrehoz egy ama-metrics-prometheus-config-node-windows nevű ConfigMap-et a kube-system névtérben. Annak ellenőrzéséhez, hogy van-e probléma a konfiguráció érvényesítésével, feldolgozásával vagy egyesítésével kapcsolatban, tekintse meg a ama-metrics-win-node Windows deamonset podokat

Hibaelhárítás

Ha sikeresen létrehozta a ConfigMap-et a kube-system névtérben, és továbbra sem látja az egyéni célokat lehívva, ellenőrizze a replika pod naplókat az ama-metrics-prometheus-config ConfigMap-nél vagy a DaemonSet pod naplókat az ama-metrics-prometheus-config-node ConfigMap esetén a kubectl logs parancs segítségével, és győződjön meg arról, hogy nincsenek hibák a Alapértelmezett és az Egyéni Prometheus Konfiguráció indítása szakaszban a prometheus-config-merger előtaggal.

Konfigurációk lekaparása

Jelenleg a scrapekonfiguráció célfelderítésének támogatott módszerei vagy a -et, vagy a static_configs-t használják a célok megadására vagy felderítésére.

A statikus konfigurációkban megtalálható a statikus célok listája, valamint a hozzájuk hozzáadni kívánt további címkék, ahogyan az alábbi ábrán is szerepel.

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, ... ]

Az egyesével kubernetes_sd_configs felderített célok különböző címkékkel rendelkeznek __meta_* , attól függően, hogy milyen szerepkör van megadva. A szakasz címkéivel szűrheti a relabel_configs célokat, vagy lecserélheti a célcímkéket.

Újracímkézetlen konfigurációk

A relabel_configs szakasz a célfelderítéskor lesz alkalmazva, és a feladat minden egyes céljára érvényes. Az alábbi példák a használati relabel_configsmódokat mutatják be.

Címke hozzáadása Adjon hozzá új címkét example_label, értékével example_value a feladat minden metrikájához. Csak azért használja __address__ forráscímkeként, mert ez a címke mindig létezik, és hozzáadja a címkét a feladat minden céljához.

relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'

Kubernetes Service Discovery-címkék használata

Ha egy munka kubernetes_sd_configs segítségével célokat derít fel, minden szerepkörhöz tartozó __meta_* címkék vannak a metrikák számára. A __* címkék a célpontok felderítése után el lesznek dobva. A szűréshez a metrikák szintjén való használatuk érdekében először relabel_configs segítségével adjon nekik címkenevet. Ezután használja metric_relabel_configs a szűréshez.

# 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'

Feladat- és példány újracímkézés

A job és instance címke értékeit a forráscímke alapján módosíthatja, ugyanúgy, mint bármely más címkét.

# 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

Metrikák címkézési konfigurációi

A metrika-újracímkézési konfigurációk a kaparás után és a betöltés előtt lesznek alkalmazva. A szakasz használatával szűrheti a metric_relabel_configs metrikákat a kaparás után. Lásd az alábbi példákat.

Metrikák törlése név szerint

# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
  action: drop
  regex: 'example_metric_name'

Csak bizonyos metrikákat tarts meg név szerint

# 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_.*)'

Metrikák szűrése címkék szerint

# 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: '.+'

Metrikák átnevezése A metrika átnevezése nem támogatott.

Megjegyzés:

Ha az egyéni konfigurációban lévő összes feladathoz címkéket szeretne hozzáadni, explicit módon adjon hozzá címkéket metrics_relabel_configs az egyes feladatokhoz. A globális külső címkék nem támogatottak a ConfigMap-alapú prometheus-konfigurációval.

relabel_configs:
- source_labels: [__address__]
  target_label: example_label
  replacement: 'example_value'

Alapszintű hitelesítés és tulajdonosi jogkivonatok

Ha egyszerű szövegként használja a felhasználónevet, a jelszót vagy a hitelesítő adatokat a kaparás konfigurációjában, nincs szükség további módosításokra. A konfigurációban megadott értékek kaparáshoz lesznek használva. Ha a prometheus-konfigurációban basic_auth vagy bearer_token beállításokhoz használja a username_file vagy password_file (illetve bármilyen _file konfigurációs beállítást), kövesse az alábbi lépéseket:

  1. Hozzon létre egy titkos kulcsot a kube-system névtérben.ama-metrics-mtls-secret

    A kulcs password1 neve bármilyen lehet, amíg egyezik a fájlnévvel a password_file útvonalon, ahogy az szerepel a Prometheus scrape konfigurációban a következő lépésben. A kulcs értékének base64 kódolásúnak kell lennie.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ama-metrics-mtls-secret
      namespace: kube-system
    type: Opaque
    data:
      password1: <base64-encoded-string>
    

    A ama-metrics-mtls-secret titok a ama-metrics podokra van szerelve az /etc/prometheus/certs/ útvonalon, és elérhetővé válik a Prometheus scraper számára. A kulcs (password1 a fenti példában) a fájl neve lesz. Az érték a base64 dekódolva van, és a tárolóban lévő fájl tartalmaként van hozzáadva.

  2. Adja meg a filepatht az egyéni kaparás konfigurációjában a ConfigMap-ban:

    Alapszintű hitelesítés A username mezőnek tartalmaznia kell a tényleges felhasználónév-sztringet. A password_file mezőnek tartalmaznia kell a jelszót tartalmazó fájl elérési útját.

    # 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
    

    Tulajdonosi jogkivonat A bearer_token_file mezőnek tartalmaznia kell a jogkivonatot tartalmazó fájl elérési útját.

    # 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
    

Ezekről a beállításokról további információt a Prometheus scrape_config dokumentációjában talál.

TLS-alapú adatgyűjtés

Ha a Prometheus metrikáit egy https-végpontról szeretné begyűjteni, a Prometheus konfigurációjában, a PodMonitorban vagy a ServiceMonitorban a scheme értékét állítsa https-re, és adjon meg extra TLS-beállításokat.

  1. Hozzon létre egy titkos kulcsot a kube-system névtérben.ama-metrics-mtls-secret A titkos objektum adatszakaszában megadott kulcs-érték párok külön fájlként lesznek csatlakoztatva ebben a /etc/prometheus/certs helyen az adatszakaszban megadott kulcsokkal megegyező fájlnevekkel. A titkos értékeknek base64 kódolásúnak kell lenniük.

    Az alábbiakban egy titkos yaML-példát mutatunk be:

    apiVersion: v1
    kind: Secret
    metadata:
      name: ama-metrics-mtls-secret
      namespace: kube-system
    type: Opaque
    data:
      <certfile>: base64_cert_content    
      <keyfile>: base64_key_content 
    

    A ama-metrics-mtls-secret titok a ama-metrics podokra van szerelve az /etc/prometheus/certs/ útvonalon, és elérhetővé válik a Prometheus scraper számára. A kulcs a fájlnév lesz. Az érték a base64 dekódolva van, és a tárolóban lévő fájl tartalmaként van hozzáadva.

  2. Adja meg a fájlútmutatót a Prometheus konfigurációjában, a PodMonitorban vagy a ServiceMonitorban:

    • A következő példában adja meg a TLS konfigurációs beállítását egy ConfigMap-fájlban:
    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
    

Alapszintű hitelesítés és TLS

Ha alapszintű hitelesítési vagy tulajdonosi jogkivonatot (fájlalapú hitelesítő adatokat) és TLS-hitelesítési beállításokat is szeretne használni a ConfigMap-térképen, győződjön meg arról, hogy a titkos ama-metrics-mtls-secret kód tartalmazza az adatszakasz összes kulcsát a megfelelő base64 kódolású értékekkel, ahogyan az alábbi példában látható:

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

Megjegyzés:

Az /etc/prometheus/certs/ elérési út kötelező, de password1 bármilyen sztring lehet, és meg kell egyeznie a fent létrehozott titkos kódban szereplő adatok kulcsával. Ennek az az oka, hogy a titkos kód ama-metrics-mtls-secret a tárolón belüli elérési útra /etc/prometheus/certs/ van csatlakoztatva.

A base64 kódolású értéket az ama-metrics podok automatikusan dekódolják, amikor a titkos kód fájlként van csatlakoztatva. Győződjön meg arról, hogy a titkos kód neve ama-metrics-mtls-secret és a kube-system névtérben van.

Először létre kell hozni a titkos kulcsot, majd létre kell hozni a ConfigMap, PodMonitor vagy ServiceMonitor nevet a névtérben kube-system . A titkos kódok létrehozásának sorrendje számít. Ha nincs titkos kód, csak egy ConfigMap, PodMonitor vagy ServiceMonitor, amely a titkos kódra mutat, a következő hiba jelenik meg az ama-metrics prometheus-collector tárolónaplókban: no file found for cert....

A TLS konfigurációs beállításairól további információt a tls_config talál.

Speciális beállítás: Egyéni Prometheus kaparófeladatok konfigurálása a DaemonSethez

A ama-metrics replika pod az egyéni Prometheus konfigurációt használja, és lekaparja a megadott célokat. A nagy számú csomópontot és podot tartalmazó fürtök esetében, valamint a nagymennyiségű beolvasandó metrika kezelésekor, néhány alkalmazható egyéni beolvasási cél áthelyezhető az egyetlen ama-metrics Replica podról a ama-metrics DaemonSet podra.

A ama-metrics-prometheus-config-node ConfigMap hasonló a replica-set ConfigMap-hez, és úgy hozható létre, hogy az egyes csomópontokon statikus gyűjtési konfigurációk legyenek. A kaparási konfigurációnak csak egyetlen csomópontot kell céloznia, és nem szabad szolgáltatásfelderítési/pod-széljegyzeteket használnia. Ellenkező esetben minden csomópont megpróbálja lekaparni az összes célt, és sok hívást kezdeményez a Kubernetes API-kiszolgálóhoz.

Az egyéni adatok letöltési céljai ugyanazt a formátumot követhetik a static_configs segítségével a célok megadásakor, továbbá használhatják a $NODE_IP környezeti változót, és meghatározhatják az adatgyűjtéshez szükséges portot. A DaemonSet minden podja felveszi a konfigurációt, lekaparja a metrikákat, és elküldi őket az adott csomóponthoz.

Az alábbi node-exporter konfiguráció a DaemonSet podok egyik alapértelmezett célja. A környezeti változót $NODE_IP használja, amely már be van állítva minden ama-metrics bővítménytárolóhoz egy adott port megcélzásához a csomóponton.

- 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']

A konfigurációs beállítások lekésése

A következő szakaszok a ConfigMap-ban használt Prometheus konfigurációs fájlban támogatott beállításokat ismertetik. A beállításokkal kapcsolatos további részletekért tekintse meg a Prometheus konfigurációs referenciáját .

Globális beállítások

A globális beállítások konfigurációs formátuma megegyezik az OSS prometheus konfigurációja által támogatott formátummal

global:
  scrape_interval: <duration>
  scrape_timeout: <duration>
  external_labels:
    <labelname1>: <labelvalue>
    <labelname2>: <labelvalue>
scrape_configs:
  - <job-x>
  - <job-y>

A globális szakaszban megadott beállítások az összes kaparófeladatra vonatkoznak (a Configmap és az Egyéni erőforrások esetében egyaránt), de felül vannak bírálva, ha az egyes feladatokban vannak megadva.

Megjegyzés:

Ha olyan globális beállításokat szeretne használni, amelyek az összes kaparási feladatra vonatkoznak, és csak egyéni erőforrásokkal rendelkeznek, akkor is létre kell hoznia egy konfigurációtérképet, amely csak a globális beállításokat használja.(Az egyéni erőforrások beállításai felülbírálják a globális szakaszban szereplő beállításokat)

Következő lépések