Questa pagina mostra come configurare un cluster per Google Distributed Cloud in modo che le metriche e i log personalizzati delle applicazioni utente vengono inviati a Cloud Logging e Cloud Monitoring e Google Cloud Managed Service per Prometheus.
Per la migliore esperienza di logging e monitoraggio delle applicazioni dell'utente, ti consigliamo di utilizzare la seguente configurazione:
Abilita Google Cloud Managed Service per Prometheus tramite l'impostazione Da
enableGMPForApplications
atrue
nell'oggettoStackdriver
. Questo consente di monitorare e creare avvisi sui carichi di lavoro a livello globale, utilizzando Prometheus. Per istruzioni e per ulteriori informazioni, consulta Abilita Google Cloud Managed Service per Prometheus in questa pagina.Abilita Cloud Logging per le applicazioni utente tramite l'impostazione Da
enableCloudLoggingForApplications
atrue
nell'oggettoStackdriver
. Questa configurazione fornisce il logging per i carichi di lavoro. Per istruzioni e altre informazioni, vedi Abilita Cloud Logging per le applicazioni utente in questa pagina.
Abilita Google Cloud Managed Service per Prometheus
La configurazione di Google Cloud Managed Service per Prometheus è specificata in un
Oggetto Stackdriver
denominato stackdriver
. Per ulteriori informazioni, inclusi
le best practice e la risoluzione dei problemi, consulta
Documentazione di Google Cloud Managed Service per Prometheus.
Per configurare l'oggetto stackdriver
in modo da abilitare la versione gestita di Google Cloud
Servizio per Prometheus:
Apri l'oggetto Stackdriver per la modifica:
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
Sostituisci
CLUSTER_KUBECONFIG
con il percorso del file kubeconfig del cluster.Inferiore a
spec
, impostaenableGMPForApplications
sutrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableGMPForApplications: true enableVPC: ... optimizedMetrics: true
Salva e chiudi il file modificato.
I componenti Prometheus gestiti da Google si avviano automaticamente nel cluster nello spazio dei nomi
gmp-system
.Controlla i componenti di Prometheus gestiti da Google:
kubectl --kubeconfig=CLUSTER_KUBECONFIG --namespace gmp-system get pods
L'output di questo comando è simile al seguente:
NAME READY STATUS RESTARTS AGE collector-abcde 2/2 Running 1 (5d18h ago) 5d18h collector-fghij 2/2 Running 1 (5d18h ago) 5d18h collector-klmno 2/2 Running 1 (5d18h ago) 5d18h gmp-operator-68d49656fc-abcde 1/1 Running 0 5d18h rule-evaluator-7c686485fc-fghij 2/2 Running 1 (5d18h ago) 5d18h
Google Cloud Managed Service per Prometheus supporta la valutazione e gli avvisi delle regole. Per configurare la valutazione delle regole, consulta Valutazione delle regole.
Esegui un'applicazione di esempio
Il servizio gestito fornisce un manifest per un'applicazione di esempio,
prom-example
, che emette metriche Prometheus sulla sua porta metrics
. La
dell'applicazione utilizza tre repliche.
Per eseguire il deployment dell'applicazione:
Crea lo spazio dei nomi
gmp-test
per le risorse che crei come parte dello di applicazione di esempio:kubectl --kubeconfig=CLUSTER_KUBECONFIG create ns gmp-test
Applica il manifest dell'applicazione con il comando seguente:
kubectl -n gmp-test apply \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
configura una risorsa PodMonitoring
In questa sezione, configurerai un
PodMonitoring
risorsa personalizzata per acquisire i dati delle metriche emessi dall'applicazione di esempio e
e lo invii a Google Cloud Managed Service per Prometheus. La risorsa personalizzata PodMonitoring
utilizza lo scraping dei target. In questo caso, gli agenti raccoglitori analizzano /metrics
endpoint a cui l'applicazione di esempio invia dati.
Una risorsa personalizzata PodMonitoring
esegue lo scraping delle destinazioni nello spazio dei nomi in cui si trova
di cui è stato eseguito solo il deployment. Per eseguire lo scraping delle destinazioni in più spazi dei nomi, esegui il deployment
PodMonitoring
risorsa personalizzata in ogni spazio dei nomi. Puoi verificare
La risorsa PodMonitoring
è installata nello spazio dei nomi previsto eseguendo il comando
seguente comando:
kubectl --kubeconfig CLUSTER_KUBECONFIG get podmonitoring -A
Per la documentazione di riferimento su tutti i servizi Google Cloud Managed Service per Prometheus di risorse personalizzate, consulta riferimento prometheus-engine/doc/api.
Il seguente manifest definisce una risorsa PodMonitoring
, prom-example
, in
lo spazio dei nomi gmp-test
. La risorsa trova tutti i pod nello spazio dei nomi che hanno l'etichetta
app
con il valore prom-example
. I pod corrispondenti
scraping su una porta denominata metrics
, ogni 30 secondi, sulla /metrics
Percorso HTTP.
apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
name: prom-example
spec:
selector:
matchLabels:
app: prom-example
endpoints:
- port: metrics
interval: 30s
Per applicare questa risorsa, esegui questo comando:
kubectl --kubeconfig CLUSTER_KUBECONFIG -n gmp-test apply \
-f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml
Google Cloud Managed Service per Prometheus sta ora eseguendo lo scraping dei pod corrispondenti.
Dati delle metriche per le query
Il modo più semplice per verificare l'esportazione dei dati Prometheus è utilizzare Query PromQL in Metrics Explorer nella console Google Cloud.
Per eseguire una query PromQL, segui questi passaggi:
Nella console Google Cloud, vai alla pagina Monitoring o fai clic sul pulsante seguente pulsante:
Nel riquadro di navigazione, seleziona
Esplora metriche.
Utilizzare Prometheus Query Language (PromQL) per specificare i dati da visualizzare nella grafico:
Nella barra degli strumenti del riquadro Seleziona una metrica, scegli Editor di codice.
Seleziona PromQL nel pulsante di attivazione/disattivazione Lingua. Il pulsante di attivazione/disattivazione della lingua nella parte inferiore del riquadro Editor di codice.
Inserisci la query nell'editor di query. Ad esempio, per tracciare un grafico il numero medio di secondi di CPU impiegati in ogni modalità nell'ultima ora, utilizza la seguente query:
avg(rate(kubernetes_io:anthos_container_cpu_usage_seconds_total {monitored_resource="k8s_node"}[1h]))
Per ulteriori informazioni sull'utilizzo di PromQL, consulta PromQL in Cloud Monitoring.
Il seguente screenshot mostra un grafico che mostra
anthos_container_cpu_usage_seconds_total
metrica:
Se raccogli grandi quantità di dati, potresti voler filtrare le metriche esportate per contenere i costi.
Abilita Cloud Logging per le applicazioni utente
La configurazione per Cloud Logging e Cloud Monitoring è contenuta in un oggetto Stackdriver denominato stackdriver
.
Apri l'oggetto Stackdriver per la modifica:
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
Sostituisci
CLUSTER_KUBECONFIG
con il percorso del file kubeconfig del cluster utente.Nella sezione
spec
, impostaenableCloudLoggingForApplications
sutrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableCloudLoggingForApplications: true enableVPC: ... optimizedMetrics: true
Salva e chiudi il file modificato.
Esegui un'applicazione di esempio
In questa sezione creerai un'applicazione che scrive log personalizzati.
Salva i seguenti manifest di deployment in un file denominato
my-app.yaml
.apiVersion: apps/v1 kind: Deployment metadata: name: "monitoring-example" namespace: "default" labels: app: "monitoring-example" spec: replicas: 1 selector: matchLabels: app: "monitoring-example" template: metadata: labels: app: "monitoring-example" spec: containers: - image: gcr.io/google-samples/prometheus-dummy-exporter:latest name: prometheus-example-exporter imagePullPolicy: Always command: - /bin/sh - -c - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090 resources: requests: cpu: 100m
crea il deployment
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
Visualizza log applicazione
Console
Vai a Esplora log nella console Google Cloud.
Fai clic su Risorsa. Nel menu TUTTI I TIPI DI RISORSE, seleziona Kubernetes contenitore.
In CLUSTER_NAME, seleziona il nome del cluster utente.
In NAMESPACE_NAME, seleziona predefinita.
Fai clic su Aggiungi e poi su Esegui query.
In Risultati delle query puoi visualizzare le voci di log del
monitoring-example
Deployment. Ad esempio:{ "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n", "insertId": "1oa4vhg3qfxidt", "resource": { "type": "k8s_container", "labels": { "pod_name": "monitoring-example-7685d96496-xqfsf", "cluster_name": ..., "namespace_name": "default", "project_id": ..., "location": "us-west1", "container_name": "prometheus-example-exporter" } }, "timestamp": "2020-11-14T01:24:24.358600252Z", "labels": { "k8s-pod/pod-template-hash": "7685d96496", "k8s-pod/app": "monitoring-example" }, "logName": "projects/.../logs/stdout", "receiveTimestamp": "2020-11-14T01:24:39.562864735Z" }
Interfaccia a riga di comando gcloud
Esegui questo comando:
gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \ resource.type="k8s_container" AND resource.labels.namespace_name="default"'
Sostituisci
PROJECT_ID
con l'ID del tuo progetto.Nell'output, puoi vedere le voci di log del
monitoring-example
per il deployment. Ad esempio:insertId: 1oa4vhg3qfxidt labels: k8s-pod/app: monitoring-example k8s- pod/pod-template-hash: 7685d96496 logName: projects/.../logs/stdout receiveTimestamp: '2020-11-14T01:24:39.562864735Z' resource: labels: cluster_name: ... container_name: prometheus-example-exporter location: us-west1 namespace_name: default pod_name: monitoring-example-7685d96496-xqfsf project_id: ... type: k8s_container textPayload: | 2020/11/14 01:24:24 Starting to listen on :9090 timestamp: '2020-11-14T01:24:24.358600252Z'
Filtra log delle applicazioni
L'applicazione di filtri ai log delle applicazioni può ridurre la fatturazione del logging delle applicazioni e la rete
del traffico dal cluster a Cloud Logging. A partire da
Google Distributed Cloud alla release 1.15.0, quando enableCloudLoggingForApplications
è impostato su true
, puoi filtrare i log delle applicazioni in base ai seguenti criteri:
- Etichette pod (
podLabelSelectors
) - Spazi dei nomi (
namespaces
) - Espressioni regolari per il contenuto del log (
contentRegexes
)
Google Distributed Cloud invia solo i risultati del filtro a Cloud Logging.
Definisci i filtri del log delle applicazioni
La configurazione per il logging è specificata in un
denominato stackdriver
.
Apri l'oggetto
stackdriver
da modificare:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ edit stackdriver stackdriver
Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.
Aggiungi una sezione
appLogFilter
aspec
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: enableCloudLoggingForApplications: true projectID: ... clusterName: ... clusterLocation: ... appLogFilter: keepLogRules: - namespaces: - prod ruleName: include-prod-logs dropLogRules: - podLabelSelectors: - disableGCPLogging=yes ruleName: drop-logs
Salva e chiudi il file modificato.
(Facoltativo) Se utilizzi
podLabelSelectors
, riavvia ilstackdriver-log-forwarder
DaemonSet per applicare le modifiche non appena possibili:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarder
Di solito, i
podLabelSelectors
sono efficaci dopo 10 minuti. Il riavvio del L'elemento DaemonSetstackdriver-log-forwarder
rende le modifiche più efficaci rapidamente.
Esempio: includi i log ERROR
o WARN
solo nello spazio dei nomi prod
L'esempio seguente illustra il funzionamento di un filtro di log dell'applicazione. Tu definisci
filtro che utilizza uno spazio dei nomi (prod
), un'espressione regolare
(.*(ERROR|WARN).*
) e un'etichetta pod (disableGCPLogging=yes
). Quindi, per verificare
che il filtro funzioni, esegui un pod nello spazio dei nomi prod
per testare questi
le condizioni di filtro.
Per definire e testare un filtro del log dell'applicazione:
Specifica un filtro di log dell'applicazione nell'oggetto Stackdriver:
Nell'esempio di
appLogFilter
seguente, soloERROR
oWARN
accede nelprod
viene mantenuto. Tutti i log per i pod con l'etichettadisableGCPLogging=yes
vengono eliminati:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: ... appLogFilter: keepLogRules: - namespaces: - prod contentRegexes: - ".*(ERROR|WARN).*" ruleName: include-prod-logs dropLogRules: - podLabelSelectors: - disableGCPLogging=yes # kubectl label pods pod disableGCPLogging=yes ruleName: drop-logs ...
Esegui il deployment di un pod nello spazio dei nomi
prod
ed esegui uno script che generaERROR
eINFO
voci di log:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG run pod1 \ --image gcr.io/cloud-marketplace-containers/google/debian10:latest \ --namespace prod --restart Never --command -- \ /bin/sh -c "while true; do echo 'ERROR is 404\\nINFO is not 404' && sleep 1; done"
I log filtrati devono contenere solo le voci
ERROR
, nonINFO
le voci corrispondenti.Aggiungi l'etichetta
disableGCPLogging=yes
al pod:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG label pods pod1 \ --namespace prod disableGCPLogging=yes
Il log filtrato non deve più contenere voci per il pod
pod1
.
Definizione dell'API del filtro dei log delle applicazioni
La definizione del filtro del log delle applicazioni viene dichiarata all'interno dello stackdriver una definizione di risorsa personalizzata.
Per ottenere la definizione della risorsa personalizzata di Stackdriver, esegui questo comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get crd stackdrivers.addons.gke.io \
--namespace kube-system -o yaml