Abilitare 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,
incluse best practice e risoluzione dei problemi, consulta la
documentazione di Google Cloud Managed Service per Prometheus.
Apri l'oggetto
stackdriverper la modifica:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriverSostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.
In
spec, impostaenableGMPForApplicationssutrue:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableGMPForApplications: true enableVPC: ... optimizedMetrics: trueSalva e chiudi il file modificato. I componenti Prometheus gestiti da Google vengono avviati automaticamente nel cluster nello spazio dei nomi
gmp-system.Controlla i componenti:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace gmp-system get podsL'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 delle regole e gli avvisi. Per configurare la valutazione delle regole, consulta Valutazione delle regole.
Eseguire un'applicazione di esempio
In questa sezione creerai un'applicazione che emette metriche Prometheus e utilizzerai Google Cloud Managed Service per Prometheus per raccoglierle. Per ulteriori informazioni, consulta Google Cloud Managed Service per Prometheus.
Eseguire il deployment dell'applicazione di esempio
Per eseguire il deployment dell'applicazione:
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-testIl 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 il comando seguente:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
Configurare una risorsa PodMonitoring
Configura una
PodMonitoring
risorsa personalizzata per acquisire i dati delle metriche emessi dall'applicazione di esempio e
inviarli a Google Cloud Managed Service per Prometheus. La risorsa personalizzata PodMonitoring utilizza lo scraping dei target. In questo caso, gli agenti di raccolta eseguono lo scraping dell'endpoint /metrics a cui l'applicazione di esempio emette i dati.
Una risorsa personalizzata PodMonitoring esegue lo scraping dei target solo nello spazio dei nomi in cui è stato eseguito il deployment della risorsa personalizzata. Per eseguire lo scraping dei target in più spazi dei nomi, esegui il deployment della stessa risorsa personalizzata 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 risorse personalizzate di Google Cloud Managed Service per Prometheus, consulta il riferimento 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
sottoposti a scraping su una porta denominata metrics, ogni 30 secondi, sul /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 il comando seguente:
kubectl --kubeconfig USER_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 eseguendo lo scraping dei pod corrispondenti.
Eseguire query sui dati delle metriche
Il modo più semplice per verificare che i dati di Prometheus vengano esportati è utilizzare query PromQL in Esplora metriche nella Google Cloud console.
Per eseguire una query PromQL:
Nella Google Cloud console, vai alla pagina Monitoraggio o fai clic sul pulsante seguente:
Nel riquadro di navigazione, seleziona
Esplora metriche.Utilizza il linguaggio di query Prometheus (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 nella parte inferiore del riquadro Editor di codice.
Inserisci la query nell'editor di query. Ad esempio, per rappresentare graficamente il numero medio di secondi trascorsi dalle CPU in ogni modalità nell'ultima ora, utilizza la seguente query:
avg(rate({ "__name__"="kubernetes.io/anthos/container/cpu/core_usage_time", "monitored_resource"="k8s_container"}[1h]))
Per ulteriori informazioni sull'utilizzo di PromQL, consulta PromQL in Cloud Monitoring.
La seguente schermata mostra un grafico che visualizza la metrica kubernetes.io/anthos/container/cpu/core_usage_time:
Se raccogli molti dati, potresti voler filtrare le metriche esportate per ridurre i costi.
Abilitare Cloud Logging per le applicazioni utente
La configurazione di Logging e Cloud Monitoring è contenuta in un oggetto Stackdriver denominato stackdriver.
Apri l'oggetto
stackdriverper la modifica:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriverSostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.
In
spec, impostaenableCloudLoggingForApplicationssutrue:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableCloudLoggingForApplications: true enableVPC: ... optimizedMetrics: trueSalva e chiudi il file modificato.
Eseguire 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: 100mCrea il deployment:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Visualizzare i log delle applicazioni
Console
Vai a Esplora log nella Google Cloud console.
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 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 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'
Filtrare i log delle applicazioni
Il filtro dei log delle applicazioni può ridurre la fatturazione del logging 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 dei pod (
podLabelSelectors) - Spazi dei nomi (
namespaces) - Espressioni regolari per il contenuto dei log (
contentRegexes)
Google Distributed Cloud invia a Cloud Logging solo i risultati del filtro.
Definire i filtri dei log delle applicazioni
La configurazione di Logging è specificata in un oggetto Stackdriver denominato stackdriver.
Apri l'oggetto
stackdriverper la modifica:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ edit stackdriver stackdriverSostituisci USER_CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster utente.
Aggiungi una sezione
appLogFilteraspec: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-logsSalva e chiudi il file modificato.
(Facoltativo) Se utilizzi
podLabelSelectors, riavvia il DaemonSetstackdriver-log-forwarderper applicare le modifiche il prima possibile:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarderIn genere,
podLabelSelectorssono efficaci dopo 10 minuti. Il riavvio del DaemonSetstackdriver-log-forwarderfa sì che le modifiche vengano applicate più rapidamente.
Esempio: includere 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 del 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 delle applicazioni:
Specifica un filtro dei log delle applicazioni nell'oggetto Stackdriver:
Nel seguente esempio di
appLogFilter, vengono conservati solo i logERRORoWARNnello spazio dei nomiprod. Tutti i log dei pod con l'etichettadisableGCPLogging=yesvengono 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-logsEsegui il deployment di un pod nello spazio dei nomi
proded esegui uno script che genera voci di logERROReINFO: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=yesal pod:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG label pods pod1 \ --namespace prod disableGCPLogging=yesIl log filtrato non deve più contenere voci per il pod
pod1.
Definizione dell'API del filtro dei log delle applicazioni
La definizione del filtro dei log delle applicazioni viene dichiarata all'interno della definizione della risorsa personalizzata stackdriver.
Per ottenere la definizione della risorsa personalizzata stackdriver, esegui il comando seguente:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get crd stackdrivers.addons.gke.io \
--namespace kube-system -o yaml