Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Přizpůsobení kolekce metrik Prometheus z clusteru Kubernetes popisuje, jak pomocí ConfigMap přizpůsobit výstřižky metrik Prometheus z výchozích cílů v clusteru Kubernetes. Tento článek popisuje, jak pomocí objektu ConfigMap vytvořit vlastní úlohy pro sběr dat pro lepší přizpůsobení a další cílové objekty.
Mapy konfigurace
Následující tabulka popisuje ConfigMaps použité k vytváření vlastních úloh pro scraping. Tyto objekty ConfigMap ve výchozím nastavení v clusteru neexistují, pokud je povolen spravovaný nástroj Prometheus.
| Mapa konfigurace | Description |
|---|---|
ama-metrics-prometheus-config (Doporučeno) |
Když je vytvořen ConfigMap s tímto názvem, úlohy sběru dat definované v něm se spouští z repliky podu metrik Azure Monitoru, běžícího v clusteru. |
ama-metrics-prometheus-config-node (Upřesnit) |
Poskytněte konfiguraci výstřižku Prometheus pro démona doplňku, která běží na všech linuxových uzlech v clusteru a všech cílech na úrovni uzlů na každém uzlu. Viz Upřesňující nastavení. |
ama-metrics-prometheus-config-node-windows (Upřesnit) |
Poskytněte konfiguraci Prometheus scrape pro doplněk DaemonSet, který běží na každém uzlu Windows v clusteru, a jakékoli cíle na úrovni uzlu na každém uzlu. Viz Upřesňující nastavení. |
Vytvoření konfiguračního souboru Prometheus
Místo přímé úpravy ama-metrics-prometheus-configje jednodušší vytvořit konfigurační soubor a pak ho převést na objekt ConfigMap. Podrobnosti o různých částech tohoto souboru najdete níže v nastavení konfigurace výstřižků .
Vytvořte konfigurační soubor Prometheus scrape pojmenovaný prometheus-config pomocí následujícího formátu. Zobrazí se seznam konfigurací skriptování v oddílu scrape_configs a volitelně lze použít globální oddíl pro nastavení globálního scrape_interval, scrape_timeout a external_labels. Podrobné informace o možnostech scrape konfigurace najdete v referenční dokumentaci pro Prometheus.io.
global:
scrape_interval: <duration>
scrape_timeout: <duration>
external_labels:
<labelname1>: <labelvalue>
<labelname2>: <labelvalue>
scrape_configs:
- <job-x>
- <job-y>
Následuje ukázkový konfigurační soubor Prometheus scrape:
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"
Návod
Viz příklady konfigurace scrappingu pro cluster Kubernetes.
Ověřte konfigurační soubor pro scrapování
Agent pomocí vlastního promconfigvalidator nástroje ověří konfiguraci Prometheus, která je jí udělena prostřednictvím objektu ConfigMap. Pokud konfigurace není platná, agent ji odmítne. Po vytvoření konfiguračního souboru Prometheus můžete pomocí tohoto nástroje před vytvořením objektu ConfigMap pro agenta ověřit konfiguraci.
Tento promconfigvalidator nástroj je součástí podu doplňkových metrik Azure Monitor. Ke stažení nástroje pro ověření můžete použít libovolný z ama-metrics-node-* podů v oboru názvů kube-system ve vašem clusteru. Použijte kubectl cp ke stažení nástroje a jeho konfigurace pomocí následujícího příkazu.
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
Po zkopírování spustitelného souboru a yaml vyhledejte cestu ke konfiguračnímu souboru Prometheus. Potom nahraďte <config path> příkazem a spusťte validátor následujícím příkazem.
./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"
Spuštění validátoru vygeneruje sloučený konfigurační soubor merged-otel-config.yaml , pokud není k dispozici žádná cesta s volitelným output parametrem. Nepoužívejte tento automaticky vygenerovaný sloučený soubor, protože se používá jenom pro účely ověřování a ladění nástrojů.
Nasazení konfiguračního souboru jako objektu ConfigMap
Váš vlastní konfigurační soubor Prometheus se používá jako pole s názvem prometheus-config uvnitř objektu ama-metrics-prometheus-config, ama-metrics-prometheus-config-node nebo ama-metrics-prometheus-config-node-windows ConfigMap v kube-system oboru názvů. Vytvořte objekt ConfigMap z konfiguračního souboru pro sběr dat tak, že přejmenujete konfigurační soubor Prometheus na prometheus-config bez přípony a spustíte jeden nebo několik následujících ukázkových příkazů, v závislosti na tom, který objekt ConfigMap chcete vytvořit pro vlastní konfiguraci úlohy sběru dat.
Vytvoření objektu ConfigMap pro použití pomocí sady replik:
kubectl create ConfigMap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system
Tím se vytvoří objekt ConfigMap pojmenovaný ama-metrics-prometheus-config v kube-system oboru názvů. Pokud chcete zjistit, zda nedošlo k problémům s ověřováním konfigurace, zpracováním nebo sloučením, můžete se podívat na replikové pody ama-metrics.
Vytvořte objekt ConfigMap, který bude používat daemonSet pro Linux:
kubectl create ConfigMap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system
Tím se vytvoří objekt ConfigMap pojmenovaný ama-metrics-prometheus-config-node v kube-system oboru názvů. Pokud chcete zjistit, jestli nedošlo k problémům s ověřováním konfigurace, zpracováním nebo sloučením, můžete se podívat na pody linuxového deamonsetu ama-metrics-node .
Vytvoření objektu ConfigMap, který bude používat daemonSet systému Windows
kubectl create ConfigMap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system
Tím se vytvoří objekt ConfigMap pojmenovaný ama-metrics-prometheus-config-node-windows v kube-system oboru názvů. Pokud chcete zjistit, jestli nedošlo k problémům s ověřováním, zpracováním nebo slučováním konfigurace, můžete se podívat na ama-metrics-win-node pody windows deamonset.
Řešení problémů
Pokud jste úspěšně vytvořili objekt ConfigMap v oboru názvů kube-system a stále se nezobrazují vlastní cíle, zkontrolujte chyby v protokolech pody repliky pro ConfigMap ama-metrics-prometheus-config nebo v protokolech podů DaemoniPod pro ConfigMap ama-metrics-prometheus-config-node pomocí kubectl logs a ujistěte se, že v části Start Merging Default a Custom Prometheus Config s předponou prometheus-config-merger nejsou žádné chyby.
Konfigurace výstřižků
Podporované metody zjišťování cíle pro konfiguraci výstřižků jsou v současné době buď static_configs nebo kubernetes_sd_configs pro určení nebo zjišťování cílů.
Statická konfigurace obsahuje seznam statických cílů a všechny další popisky, které se k nim přidají jako v následujícím příkladu.
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, ... ]
Cíle zjištěné pomocí kubernetes_sd_configs mají různé __meta_* štítky v závislosti na specifikované roli. Popisky v oddílu relabel_configs můžete použít k filtrování cílů nebo nahrazení popisků cílů.
Znovu oznamovat konfigurace
Oddíl relabel_configs se použije v době zjišťování cíle a vztahuje se na každý cíl úlohy. Následující příklady ukazují způsoby použití relabel_configs.
Přidejte popisek Přidejte nový popisek pojmenovaný example_label s hodnotou example_value ke všem metrikám úlohy. Jako zdrojový popisek použijte __address__ pouze proto, že tento popisek vždy existuje a přidá ho pro každý cíl úlohy.
relabel_configs:
- source_labels: [__address__]
target_label: example_label
replacement: 'example_value'
Použijte popisky pro zjišťování služeb Kubernetes
Pokud úloha používá kubernetes_sd_configs ke zjišťování cílů, každá role má přidružené __meta_* popisky pro metriky. Po zjištění cílů se popisky __* zahodí. Pokud chcete filtrovat pomocí nich na úrovni metrik, nejdříve je použijte pomocí relabel_configs přiřazením označení. Pak použijte metric_relabel_configs k filtrování.
# 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'
Opětovné označování úloh a instancí
Můžete měnit hodnoty popisků job a instance na základě zdrojového popisku, stejně jako jakýkoli jiný popisek.
# 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
Konfigurace přeznakování metrik
Konfigurace přeznakování metrik se použijí po výstřižku a před příjmem dat. Pomocí oddílu metric_relabel_configs můžete filtrovat metriky při scrapingu. Podívejte se na následující příklady.
Vyřazení metrik podle názvu
# Drop the metric named 'example_metric_name'
metric_relabel_configs:
- source_labels: [__name__]
action: drop
regex: 'example_metric_name'
Zachovat pouze některé metriky podle názvu
# 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_.*)'
Filtrování metrik podle popisků
# 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: '.+'
Přejmenování metrik Přejmenování metrik se nepodporuje.
Poznámka:
Pokud chcete přidat popisky ke všem úlohám ve vlastní konfiguraci, explicitně přidejte popisky pomocí metrics_relabel_configs pro každou úlohu. Globální externí popisky nejsou podporovány pomocí konfigurace prometheus založené na configmap.
relabel_configs:
- source_labels: [__address__]
target_label: example_label
replacement: 'example_value'
Základní ověřování a nosné tokeny
Pokud v konfiguraci výstřižku používáte uživatelské jméno, heslo nebo přihlašovací údaje jako prostý text, nevyžadují se žádné další změny. Hodnoty zadané v konfiguraci se použijí k výstřižku. Pokud v konfiguraci Prometheus používáte username_file nebo password_file (nebo jakékoli _file nastavení) pro basic_auth nebo bearer_token, postupujte následovně:
Vytvořte tajný kód v
kube-systemoboru názvů s názvemama-metrics-mtls-secret.Název klíče
password1může být libovolný, pokud odpovídá názvu souboru v cestě k souboru vpassword_filekonfiguraci prometheus scrape v dalším kroku. Hodnota klíče musí být zakódovaná pomocí base64.apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: password1: <base64-encoded-string>Tajný
ama-metrics-mtls-secretúdaj je připojen kama-metricspodům na cestě/etc/prometheus/certs/a je zpřístupněn pro Prometheus scraper. Klíč (password1v předchozím příkladu) bude název souboru. Hodnota je dekódována a přidána jako obsah souboru v kontejneru.Zadejte cestu k souboru v konfiguraci pro stahování v objektu ConfigMap:
Základní ověřování Pole
usernameby mělo obsahovat skutečný řetězec uživatelského jména. Polepassword_fileby mělo obsahovat cestu k souboru, který obsahuje heslo.# Sets the `Authorization` header on every scrape request with the # configured username and password. basic_auth: username: <username string> password_file: /etc/prometheus/certs/password1Nosný token Pole
bearer_token_fileby mělo obsahovat cestu k souboru, který obsahuje 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
Další informace o těchto nastaveních najdete v dokumentaci k nástroji Prometheus scrape_config .
Skování založené na protokolu TLS
Pokud chcete získat metriky Prometheus z koncového bodu https, měly by být v konfiguraci Prometheus, PodMonitoru nebo ServiceMonitoru nastaveny scheme na https a další nastavení TLS.
Vytvořte tajný kód v
kube-systemoboru názvů s názvemama-metrics-mtls-secret. Každý pár klíč-hodnota specifikovaný v datové části tajného objektu bude namapován jako samostatný soubor do adresáře /etc/prometheus/certs, a názvy těchto souborů budou stejné jako klíče uvedené v této datové části. Hodnoty tajných kódů by měly být kódované jako base64.Následuje příklad YAML tajného kódu:
apiVersion: v1 kind: Secret metadata: name: ama-metrics-mtls-secret namespace: kube-system type: Opaque data: <certfile>: base64_cert_content <keyfile>: base64_key_contentTajný
ama-metrics-mtls-secretúdaj je připojen kama-metricspodům na cestě/etc/prometheus/certs/a je zpřístupněn pro Prometheus scraper. Klíč bude název souboru. Hodnota je dekódována a přidána jako obsah souboru v kontejneru.Zadejte cestu k souboru v konfiguraci Prometheus, PodMonitor nebo ServiceMonitor:
- Pomocí následujícího příkladu zadejte nastavení konfigurace protokolu TLS v objektu 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
Základní ověřování a TLS
Pokud chcete použít základní ověřovací token nebo nosný token (přihlašovací údaje založené na souborech) i nastavení ověřování TLS v objektu ConfigMap, ujistěte se, že tajný ama-metrics-mtls-secret klíč obsahuje všechny klíče v datové části s odpovídajícími hodnotami kódovanými v base64, jak je znázorněno v následujícím příkladu:
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
Poznámka:
Cesta /etc/prometheus/certs/ je povinná, ale password1 může být libovolný řetězec a musí odpovídat klíči pro data v tajemství vytvořeném výše. Důvodem je to, že tajný klíč ama-metrics-mtls-secret je připojený k cestě /etc/prometheus/certs/ v rámci kontejneru.
Hodnota kódovaná ve formátu Base64 je automaticky dekódována pody AMA-metrics, když je tajemství připojeno jako soubor. Ujistěte se, že název tajemství je ama-metrics-mtls-secret a že se nachází v oboru názvů kube-system.
Nejprve by se měl vytvořit tajný klíč a pak by se měl vytvořit objekt ConfigMap, PodMonitor nebo ServiceMonitor v kube-system oboru názvů. Na pořadí vytváření tajných kódů záleží. Pokud neexistuje žádný tajný kód, ale objekt ConfigMap, PodMonitor nebo ServiceMonitor odkazující na tajný klíč, v protokolech kontejneru ama-metrics prometheus-collector se zobrazí následující chyba: no file found for cert....
Další podrobnosti o nastavení konfigurace protokolu TLS najdete v tls_config .
Pokročilé nastavení: Konfigurace vlastních sběrných úloh Prometheus pro DaemonSet
Pod ama-metrics repliky využívá vlastní konfiguraci Prometheus a sešrotuje zadané cíle. U clusteru s velkým počtem uzlů, podů a velkým objemem metrik ke sběru je možné některé z použitelných vlastních cílů pro sběr dat přesunout z podu jedné ama-metrics repliky do podu ama-metrics DaemonSet.
Objekt ama-metrics-prometheus-config-node ConfigMap je podobný objektu ConfigMap sady replik a lze ho vytvořit tak, aby měl na každém uzlu statické konfigurace výstřižků. Konfigurace scrapu by měla cílit pouze na jeden uzel a neměla by používat službu zjišťování nebo anotace podů. V opačném případě se každý uzel pokusí ztlumit všechny cíle a provede mnoho volání na server rozhraní API Kubernetes.
Vlastní cíle scrapingu mohou sledovat stejný formát pomocí static_configs s cíli a využitím proměnné prostředí $NODE_IP a specifikací portu, který se má scrapovat. Každý pod DaemonSet převezme konfiguraci, sbírá metriky a odešle je pro tento uzel.
Následující node-exporter konfigurace je jedním z výchozích cílů podů DaemonSet. Používá proměnnou $NODE_IP prostředí, která je již nastavená pro každý ama-metrics kontejner doplňků, aby cílila na konkrétní port v uzlu.
- 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']
Nastavení konfigurace výstřižků
Následující části popisují nastavení podporovaná v konfiguračním souboru Prometheus použitém v objektu ConfigMap. Další podrobnosti o těchto nastaveních najdete v referenčních informacích ke konfiguraci Prometheus .
Globální nastavení
Formát konfigurace globálního nastavení je stejný jako podporovaný konfigurací OSS prometheus.
global:
scrape_interval: <duration>
scrape_timeout: <duration>
external_labels:
<labelname1>: <labelvalue>
<labelname2>: <labelvalue>
scrape_configs:
- <job-x>
- <job-y>
Nastavení uvedená v globální části platí pro všechny scrapovací úlohy (jak úlohy v objektu Configmap, tak pro vlastní zdroje), ale jsou přepsána, pokud jsou zadány v jednotlivých úlohách.
Poznámka:
Pokud chcete použít globální nastavení, která platí pro všechny scrape úlohy, a máte jenom vlastní prostředky, budete muset vytvořit objekt ConfigMap pouze s globálním nastavením (nastavení ve vlastních prostředcích přepíšou ta, která jsou uvedena v globální sekci).