Questa pagina mostra come configurare un cluster utente per GKE su VMware, in modo che log e metriche personalizzati delle applicazioni utente vengano inviati a Cloud Logging e Cloud Monitoring. Le metriche delle applicazioni utente vengono raccolte con Google Cloud Managed Service per Prometheus.
Abilitazione di Managed Service per Prometheus per le applicazioni utente
La configurazione per Managed Service per Prometheus si trova in un oggetto Stackdriver 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.
In
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
Chiudi il file modificato. Verrà avviata l'esecuzione dei componenti Prometheus (GMP) gestiti da Google nel cluster.
Per controllare i componenti, esegui questo comando:
kubectl --kubeconfig=USER_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
Managed Service per Prometheus supporta la valutazione e gli avvisi delle regole. Per configurare la valutazione delle regole, consulta Valutazione delle regole.
Esecuzione di un'applicazione di esempio
In questa sezione creerai un'applicazione che emette metriche di Prometheus e utilizzerai Prometheus gestito da Google per raccoglierle. Per ulteriori informazioni, consulta Google Cloud Managed Service per Prometheus.
Esegui il deployment dell'applicazione di esempio
Crea lo spazio dei nomi
gmp-test
per le risorse che crei come parte dell'applicazione di esempio:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG create ns gmp-test
Il servizio gestito fornisce un manifest per un'applicazione di esempio che emette metriche di Prometheus sulla porta
metrics
. L'applicazione utilizza tre repliche.Per eseguire il deployment dell'applicazione di esempio, esegui questo comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
Configura una risorsa PodMonitoring
Per importare i dati delle metriche emessi dall'applicazione di esempio, utilizzi lo scraping del target. Il servizio gestito utilizza risorse personalizzate (CR) di PodMonitoring per configurare lo scraping di destinazione e l'importazione delle metriche. Puoi convertire le risorse degli operatori Prometheus esistenti in RP di PodMonitoring.
Un RP PodMonitoring esegue lo scraping dei target solo nello spazio dei nomi in cui è stato eseguito il deployment della RP. Per eseguire lo scraping dei target in più spazi dei nomi, esegui il deployment della stessa RP di PodMonitoring in ogni spazio dei nomi. Puoi verificare che la risorsa PodMonitoring sia installata nello spazio dei nomi previsto eseguendo questo comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get podmonitoring -A
Per la documentazione di riferimento su tutte le risposte predefinite di Managed Service per Prometheus, consulta il riferimento a prometheus-engine/doc/api.
Il seguente manifest definisce una risorsa PodMonitoring, prom-example
, nello
spazio dei nomi gmp-test
. La risorsa trova tutti i pod nello spazio dei nomi che presentano l'etichetta app
con il valore prom-example
. Vengono eseguito lo scraping dei pod corrispondenti su una porta denominata metrics
, ogni 30 secondi, nel percorso HTTP /metrics
.
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 USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml
Managed Service per Prometheus sta ora eseguendo lo scraping dei pod corrispondenti.
Query sui dati delle metriche
Il modo più semplice per verificare che i dati Prometheus vengano esportati è utilizzare le 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:
Nel riquadro di navigazione, seleziona Metrics Explorer.
Utilizza Prometheus Query Language (PromQL) per specificare i dati da visualizzare nel grafico:
Nella barra degli strumenti del riquadro Seleziona una metrica, seleziona Editor di codice.
Seleziona PromQL nel pulsante di attivazione/disattivazione Lingua. L'opzione di attivazione/disattivazione della lingua si trova nella parte inferiore del riquadro Editor di codice.
Inserisci la query nell'Editor query. Ad esempio, per rappresentare su un grafico il numero medio di secondi di CPU spesi 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 la metrica anthos_container_cpu_usage_seconds_total
:
Se raccogli molti dati, ti consigliamo di filtrare le metriche esportate per mantenere bassi i costi.
Abilitazione di Cloud Logging per le applicazioni utente
La configurazione per Logging si trova in un oggetto Stackdriver 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.
In
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
Chiudi il file modificato.
Esecuzione di un'applicazione di esempio
In questa sezione creerai un'applicazione che scrive log personalizzati.
Salva il seguente 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 USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Visualizzazione dei log delle applicazioni
Console
Vai a Esplora log nella console Google Cloud.
Fai clic su Risorsa. In ALL_RESOURCE_TYPES, seleziona
Kubernetes Container
.In CLUSTER_NAME, seleziona il nome del tuo cluster utente.
In NAMESPACE_NAME, seleziona
default
.Fai clic su Aggiungi e quindi su Esegui query.
In Risultati delle query, puoi visualizzare le voci di log del deployment
monitoring-example
. 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" }
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 progetto di monitoraggio del logging.
Nell'output puoi visualizzare le voci di log del deployment
monitoring-example
. 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
Il filtro dei log delle applicazioni può ridurre la fatturazione dei log delle applicazioni e il traffico di rete dal cluster a Cloud Logging. A partire dalla release 1.15.0 di GKE su VMware, 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 contenuti di log (
contentRegexes
)
GKE su VMware invia solo i risultati del filtro a Cloud Logging.
Definisci i filtri dei log delle applicazioni
La configurazione per Logging è specificata in un oggetto Stackdriver 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 appena possibile:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarder
Solitamente, le
podLabelSelectors
diventano effettive dopo 10 minuti. Riavviando il DaemonSetstackdriver-log-forwarder
, le modifiche vengono applicate più rapidamente.
Esempio: includi i log ERROR
o WARN
solo nello spazio dei nomi prod
L'esempio seguente mostra il funzionamento di un filtro dei log dell'applicazione. Puoi definire un filtro che utilizza uno spazio dei nomi (prod
), un'espressione regolare (.*(ERROR|WARN).*
) e un'etichetta pod (disableGCPLogging=yes
). Successivamente, per verificare che il filtro funzioni, esegui un pod nello spazio dei nomi prod
per testare queste condizioni di filtro.
Per definire e testare un filtro dei log dell'applicazione:
Specifica un filtro per i log delle applicazioni nell'oggetto Stackdriver:
Nel seguente esempio
appLogFilter
vengono conservati solo i logERROR
oWARN
nello spazio dei nomiprod
. 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 generi voci di logERROR
eINFO
: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
, non le vociINFO
.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 dell'applicazione è dichiarata all'interno della definizione della risorsa personalizzata di stackdriver.
Per ottenere la definizione della risorsa personalizzata stackdriver, esegui questo comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get crd stackdrivers.addons.gke.io \
--namespace kube-system -o yaml