Questa pagina mostra come configurare un cluster utente per Google Distributed Cloud in modo che i log e le 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.
Abilitare Managed Service per Prometheus per le applicazioni utente
La configurazione di Managed Service per Prometheus è
contenuta in un oggetto Stackdriver denominato stackdriver.
- Apri l'oggetto - stackdriverper la modifica:- 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, imposta- enableGMPForApplicationssu- true:- 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. Verranno avviati i componenti di Google Managed Prometheus (GMP) 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 delle regole e gli avvisi. Per configurare la valutazione delle regole, consulta Valutazione delle regole.
Esecuzione di un'applicazione di esempio
In questa sezione, crei un'applicazione che emette metriche Prometheus e utilizzi Google Managed Prometheus per raccoglierle. Per ulteriori informazioni, vedi Google Cloud Managed Service per Prometheus.
Esegui il deployment dell'applicazione di esempio
- Crea lo spazio dei nomi - gmp-testper le risorse che crei nell'ambito 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 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, utilizza lo scraping dei target. Il servizio gestito utilizza risorse personalizzate PodMonitoring per configurare lo scraping dei target e l'importazione delle metriche. Puoi convertire le risorse prometheus-operator esistenti in CR PodMonitoring.
Una CR PodMonitoring esegue lo scraping dei target solo nello spazio dei nomi in cui viene eseguito il deployment della CR. Per eseguire lo scraping dei target in più spazi dei nomi, esegui il deployment dello stesso CR PodMonitoring in ogni spazio dei nomi. Puoi verificare che la risorsa PodMonitoring sia installata nello spazio dei nomi previsto eseguendo il comando seguente:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get podmonitoring -A
Per la documentazione di riferimento su tutte le CR di Managed Service per Prometheus, consulta la documentazione di riferimento dell'API 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 hanno l'etichetta
app con il valore prom-example. I pod corrispondenti vengono
recuperati ogni 30 secondi su una porta denominata metrics, sul 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 ora esegue lo scraping dei pod corrispondenti.
Dati delle metriche delle query
Il modo più semplice per verificare che i dati di Prometheus vengano esportati è utilizzare query PromQL in Esplora metriche nella console Google Cloud .
Per eseguire una query PromQL:
- Nella console Google Cloud , vai alla pagina Monitoring o fai clic sul pulsante seguente: 
- Nel riquadro di navigazione, seleziona  Esplora metriche. Esplora metriche.
- 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. Il pulsante di attivazione/disattivazione della lingua si trova in fondo al riquadro Editor di codice. 
- Inserisci la query nell'editor di query. Ad esempio, per tracciare un grafico del numero medio di secondi trascorsi dalle CPU 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 saperne di più sull'utilizzo di PromQL, consulta PromQL in Cloud Monitoring. 
Lo screenshot seguente mostra un grafico che visualizza la metrica
anthos_container_cpu_usage_seconds_total:
 
  
Se raccogli molti dati, ti consigliamo di filtrare le metriche esportate per contenere i costi.
Abilitazione di Cloud Logging per le applicazioni utente
La configurazione per Logging è contenuta in un oggetto Stackdriver denominato stackdriver.
- Apri l'oggetto - stackdriverper la modifica:- 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, imposta- enableCloudLoggingForApplicationssu- true:- 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, crei 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 dell'applicazione
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 cluster utente. 
- In NAMESPACE_NAME, seleziona - default.
- Fai clic su Aggiungi e poi su Esegui query. 
- In Risultati delle query, puoi visualizzare le voci di log della - monitoring-exampledeploymente. 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 tuo progetto di logging e monitoraggio. 
- 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 i log delle applicazioni
Il filtraggio 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 Google Distributed Cloud, 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 i contenuti dei log (contentRegexes)
Google Distributed Cloud 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 - stackdriverper la modifica:- 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 - appLogFiltera- spec:- 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 il DaemonSet- stackdriver-log-forwarderper applicare le modifiche il prima possibile:- kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarder- Normalmente, - podLabelSelectorsdiventano effettivi dopo 10 minuti. Il riavvio del DaemonSet- stackdriver-log-forwarderrende effettive le modifiche più rapidamente.
Esempio: includi i log ERROR o WARN solo nello spazio dei nomi prod
Il seguente esempio illustra il funzionamento di un filtro dei log delle applicazioni. Definisci un filtro che utilizza uno spazio dei nomi (prod), un'espressione regolare (.*(ERROR|WARN).*) e un'etichetta pod (disableGCPLogging=yes). Poi, 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 dei log dell'applicazione nell'oggetto Stackdriver: - Nel seguente esempio di - appLogFilter, vengono conservati solo i log- ERRORo- WARNnello spazio dei nomi- prod. Vengono eliminati tutti i log dei pod con l'etichetta- disableGCPLogging=yes:- 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 - proded esegui uno script che genera voci di log- ERRORe- INFO:- 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 - ERRORe non quelle- INFO.
- Aggiungi l'etichetta - disableGCPLogging=yesal 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 di filtro dei log delle applicazioni
La definizione del filtro dei log delle applicazioni è dichiarata all'interno della definizione di 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