Questa pagina descrive il processo di scraping delle metriche dai workload negli ambienti con air gap di Google Distributed Cloud (GDC) per facilitare il monitoraggio e l'osservabilità dei dati.
Puoi estrarre e raccogliere le metriche prodotte dai tuoi componenti nel tempo. La
piattaforma di monitoraggio offre un'API personalizzata per estrarre le metriche dai carichi di lavoro in esecuzione
all'interno dello spazio dei nomi del progetto Distributed Cloud. Per eseguire lo scraping delle metriche,
devi eseguire il deployment di una risorsa personalizzata MonitoringTarget
nello spazio dei nomi del progetto nel server API Management. Al momento del deployment di questa risorsa, la piattaforma di monitoraggio
avvia la raccolta dei dati.
La risorsa personalizzata MonitoringTarget
indirizza la pipeline di monitoraggio a eseguire lo scraping
dei pod designati all'interno del progetto. Questi pod devono esporre un endpoint HTTP
che fornisca metriche in un formato di esposizione Prometheus, ad esempio OpenMetrics.
Le metriche sottoposte a scraping vengono poi visualizzate nell'istanza Grafana del progetto,
fornendo informazioni sullo stato operativo dell'applicazione.
Per configurare la risorsa personalizzata MonitoringTarget
, devi specificare i pod
all'interno dello spazio dei nomi del progetto per la raccolta delle metriche. Puoi personalizzare varie
impostazioni, tra cui la frequenza di scraping, l'endpoint delle metriche dei pod, le etichette
e le annotazioni.
Prima di iniziare
Per ottenere le autorizzazioni necessarie per gestire le risorse personalizzate MonitoringTarget
, chiedi all'amministratore IAM dell'organizzazione o all'amministratore IAM del progetto di concederti uno dei ruoli MonitoringTarget
associati.
A seconda del livello di accesso e delle autorizzazioni di cui hai bisogno, potresti ottenere i ruoli di creatore, editor o visualizzatore per questa risorsa in un'organizzazione o in un progetto. Per maggiori informazioni, vedi Preparare le autorizzazioni IAM.
Configurare la risorsa personalizzata MonitoringTarget
La risorsa personalizzata MonitoringTarget
indica alla piattaforma di monitoraggio da dove
raccogliere le metriche. Puoi specificare i pod per i quali raccogli le metriche, l'endpoint delle metriche di questi pod, la frequenza di scraping e qualsiasi impostazione aggiuntiva.
Questa risorsa definisce le seguenti configurazioni:
- Target: i pod e i relativi endpoint all'interno del progetto che espongono le metriche.
- Intervallo di scraping: la frequenza con cui vuoi estrarre le metriche dagli endpoint selezionati.
- Personalizzazioni delle etichette: regole facoltative con eventuali modifiche delle etichette per le metriche.
Scegli uno dei seguenti metodi per specificare gli endpoint delle metriche nella risorsa personalizzata
MonitoringTarget
:
- Endpoint statici: dichiari esplicitamente l'endpoint (porta, percorso, schema) nella configurazione
MonitoringTarget
. Annotazioni: le informazioni sull'endpoint della metrica del pod vengono recuperate dalle annotazioni all'interno del file
Deployment
del container. Questo metodo offre maggiore flessibilità se ogni pod ha endpoint diversi.
Endpoint statici
Segui questi passaggi per esporre le metriche dei pod selezionati su un endpoint definito staticamente:
Determina il progetto Distributed Cloud da cui vuoi raccogliere le metriche per il monitoraggio.
Nella specifica del pod, dichiara la porta che pubblica le metriche nel campo
containerPort
. L'esempio seguente mostra come dichiarare port2112
nella specifica del pod:# ... spec: template: spec: containers: - name: your-container-name ports: - containerPort: 2112 # ...
Nella configurazione di
MonitoringTarget
, specifica i dettagli dell'endpoint (porta, percorso, schema) nella sezionepodMetricsEndpoints
in modo che corrispondano alla porta che hai esposto nella specifica del pod.Il seguente file YAML mostra un esempio di configurazione
MonitoringTarget
in cui ogni pod selezionato deve esporre le metriche sullo stesso endpoint,http://your-container-name:2112/metrics
:apiVersion: monitoring.gdc.goog/v1 kind: MonitoringTarget metadata: # Choose the same namespace as the workload pods. namespace: your-project-namespace name: your-container-name spec: selector: # Choose pod labels to consider for this job. # Optional: Map of key-value pairs. # Default: No filtering by label. # To consider every pod in the project namespace, remove selector fields. matchLabels: app: your-app-label podMetricsEndpoints: port: value: 2112 path: # Choose any value for your endpoint. # The /metrics value is an example. value: /metrics scheme: value: http
Applica la configurazione
MonitoringTarget
al server dell'API Management all'interno dello stesso spazio dei nomi dei pod di destinazione:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
Sostituisci quanto segue:
KUBECONFIG_PATH
: il percorso del file kubeconfig per il server dell'API di gestione.MONITORING_TARGET_NAME
: il nome del file di definizioneMonitoringTarget
.
La piattaforma di monitoraggio inizia a raccogliere le metriche.
Annotazioni
Segui questi passaggi per esporre le metriche utilizzando le annotazioni se ogni pod ha endpoint diversi:
Determina il progetto Distributed Cloud da cui vuoi raccogliere le metriche per il monitoraggio.
Aggiungi le seguenti annotazioni alla sezione
annotations
del fileDeployment
del container:prometheus.io/path
prometheus.io/port
prometheus.io/scheme
L'esempio seguente mostra le annotazioni per le metriche sulla porta
2112
:apiVersion: apps/v1 kind: Deployment metadata: name: your-container-name namespace: your-project-namespace labels: app: your-app-label annotations: # These annotations are not required. They demonstrate selecting # pod metric endpoints through annotations. prometheus.io/path: /metrics prometheus.io/port: \"2112\" prometheus.io/scheme: http
Nella configurazione di
MonitoringTarget
, specifica le annotazioni che hai aggiunto al fileDeployment
del contenitore nella sezionepodMetricsEndpoints
. Questa specifica indica alla risorsa personalizzata di raccogliere le informazioni sull'endpoint delle metriche dalle annotazioni sui pod selezionati.Il seguente file YAML mostra un esempio di configurazione di
MonitoringTarget
che utilizza le annotazioni:apiVersion: monitoring.gdc.goog/v1 kind: MonitoringTarget metadata: metadata: # Choose the same namespace as the workload pods. namespace: your-project-namespace name: your-container-name spec: selector: matchLabels: app: your-app-label podMetricsEndpoints: port: annotation: prometheus.io/port path: annotation: prometheus.io/path scheme: annotation: prometheus.io/scheme
Applica la configurazione
MonitoringTarget
al server dell'API Management all'interno dello stesso spazio dei nomi dei pod di destinazione:kubectl --kubeconfig KUBECONFIG_PATH apply -f MONITORING_TARGET_NAME.yaml
Sostituisci quanto segue:
KUBECONFIG_PATH
: il percorso del file kubeconfig per il server dell'API di gestione.MONITORING_TARGET_NAME
: il nome del file di definizioneMonitoringTarget
.
La piattaforma di monitoraggio inizia a raccogliere le metriche.
Per ulteriori campi e opzioni, consulta le specifiche MonitoringTarget
complete
e la documentazione di riferimento dell'API.
Specifiche MonitoringTarget
complete
Il seguente file YAML mostra un esempio per la specifica completa della risorsa personalizzata MonitoringTarget
. Per ulteriori informazioni e una descrizione completa dei campi, consulta la documentazione di riferimento dell'API.
apiVersion: monitoring.gdc.goog/v1
kind: MonitoringTarget
metadata:
# Choose the same namespace as the workload pods.
namespace: PROJECT_NAMESPACE
name: MONITORING_TARGET_NAME
spec:
# Choose matching pattern that identifies pods for this job.
# Optional
# Relationship between different selectors: AND
selector:
# Choose clusters to consider for this job.
# Optional: List
# Default: All clusters applicable to this project.
# Relationship between different list elements: OR
matchClusters:
- string
# Choose pod labels to consider for this job.
# Optional: Map of key-value pairs.
# Default: No filtering by label.
# Relationship between different pairs: AND
matchLabels:
key1: value1
# Choose annotations to consider for this job.
# Optional: Map of key-value pairs
# Default: No filtering by annotation
# Relationship between different pairs: AND
matchAnnotations:
key1: value1
# Configure the endpoint exposed for this job.
podMetricsEndpoints:
# Choose a port either through static value or annotation.
# Optional
# Annotation takes priority.
# Default: static port 80
port:
value: integer
annotation: string
# Choose a path either through static value or annotation.
# Optional
# Annotation takes priority
# Default: static path /metrics
path:
value: string
annotation: string
# Choose a scheme either through a static value (http or https) or annotation.
# Optional
# Annotation takes priority
# Default: static scheme http
scheme:
value: string
annotation: string
# Choose the frequency to scrape the metrics endpoint defined in podMetricsEndpoints
# Optional
# Default: 60s
scrapeInterval: string
# Dynamically rewrite the label set of a target before it gets scraped.
# https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
# Optional
# Default: No filtering by label
metricsRelabelings:
- sourceLabels:
- string
separator: string
regex: string
action: string
targetLabel: string
replacement: string
Sostituisci quanto segue:
PROJECT_NAMESPACE
: lo spazio dei nomi del progetto.MONITORING_TARGET_NAME
: il nome del file di definizioneMonitoringTarget
.