Questa pagina mostra come creare criteri di avviso basati su metriche per i cluster Google Distributed Cloud. Abbiamo fornito diversi esempi scaricabili per configurare criteri di avviso per scenari comuni. Per ulteriori informazioni su i criteri di avviso basati su metriche, consulta Creare criteri di avviso basati su soglie di metriche nella documentazione di Google Cloud Observability.
Prima di iniziare
Per creare criteri di avviso, devi disporre delle seguenti autorizzazioni:
monitoring.alertPolicies.create
monitoring.alertPolicies.delete
monitoring.alertPolicies.update
Disporrai di queste autorizzazioni se disponi di uno dei seguenti ruoli:
monitoring.alertPolicyEditor
monitoring.editor
- Editor progetto
- Proprietario progetto
Se vuoi creare criteri di avviso basati su log utilizzando
Google Cloud CLI, devi disporre anche di serviceusage.serviceUsageConsumer
ruolo. Per istruzioni su come configurare i criteri di avviso basati su log, consulta
Configurare avvisi basati su log
nella documentazione di Google Cloud Observability.
Per controllare i tuoi ruoli, vai alla pagina IAM nella console Google Cloud.
Creazione di un criterio di esempio: server API non disponibile
In questo esercizio creerai un criterio di avviso per i server dell'API Kubernetes dei cluster. Con questa norma puoi decidere di ricevere notifiche ogni volta che il server API di un cluster non è disponibile.
Scarica il file di configurazione dei criteri: apiserver-unavailable.json
Crea il criterio:
gcloud alpha monitoring policies create --policy-from-file=POLICY_CONFIG
Sostituisci POLICY_CONFIG con il percorso del file di configurazione che hai appena scaricato.
Visualizza i criteri di avviso:
Console
Nella console Google Cloud, vai alla pagina Monitoring.
A sinistra, seleziona Avvisi.
In Criteri puoi vedere un elenco dei tuoi criteri di avviso.
Nell'elenco, seleziona Server API del cluster Anthos non disponibile (critico) per visualizzare i dettagli della nuova norma. In Condizioni, puoi vedere una descrizione del criterio. Ad esempio:
Policy violates when ANY condition is met Anthos cluster API server uptime is absent for 5m
gcloud
gcloud alpha monitoring policies list
L'output mostra informazioni dettagliate sul criterio. Ad esempio:
combiner: OR conditions: - conditionAbsent: aggregations: - alignmentPeriod: 60s crossSeriesReducer: REDUCE_MEAN groupByFields: - resource.label.project_id - resource.label.location - resource.label.cluster_name - resource.label.namespace_name - resource.label.container_name - resource.label.pod_name perSeriesAligner: ALIGN_MAX duration: 300s filter: resource.type = "k8s_container" AND metric.type = "kubernetes.io/anthos/container/uptime" AND resource.label."container_name"=monitoring.regex.full_match("kube-apiserver") trigger: count: 1 displayName: Anthos cluster API server uptime is absent for 5m name: projects/…/alertPolicies/…/conditions/… displayName: Anthos cluster API server unavailable (critical) enabled: true mutationRecord: mutateTime: … mutatedBy: … name: projects/…/alertPolicies/…
Creazione di criteri di avviso aggiuntivi
Questa sezione fornisce descrizioni e file di configurazione per un insieme di criteri di avviso consigliati.
Per creare un criterio, segui gli stessi passaggi utilizzati nella precedente allenamento:
Per scaricare il file di configurazione, fai clic sul link nella colonna di destra.
Facoltativamente, ottimizza le condizioni per adattarle meglio alle tue esigenze specifiche, ad Ad esempio, puoi aggiungere altri filtri per un sottoinsieme di cluster o modificare di soglia per bilanciare il rumore e la criticità.
Per creare il criterio, esegui
gcloud alpha monitoring policies create
.
Puoi scaricare e installare tutti gli esempi di criteri di avviso descritti in questo documento con il seguente script:
# 1. Create a directory named alert_samples:
mkdir alert_samples && cd alert_samples
declare -a alerts=("apiserver-unavailable.json" "controller-manager-unavailable.json" "scheduler-unavailable.json" \
"pod-crash-looping.json" "pod-not-ready-1h.json" "container-cpu-usage-high-reaching-limit.json" \
"container-memory-usage-high-reaching-limit.json" "persistent-volume-usage-high.json" "node-cpu-usage-high.json" \
"node-disk-usage-high.json" "node-memory-usage-high.json" "node-not-ready-1h.json" "apiserver-error-ratio-high.json" \
"etcd-leader-changes-or-proposal-failures-frequent.json" "etcd-server-not-in-quorum.yaml" "etcd-storage-usage-high.json")
# 2. Download all alert samples into the alert_samples/ directory:
for x in "${alerts[@]}"
do
wget https://cloud.google.com/kubernetes-engine/distributed-cloud/bare-metal/docs/samples/${x}
done
# 3. (optional) Uncomment and provide your project ID to set the default project
# for gcloud commands:
# gcloud config set project <PROJECT_ID>
# 4. Create alert policies for each of the downloaded samples:
for x in "${alerts[@]}"
do
gcloud alpha monitoring policies create --policy-from-file=${x}
done
Disponibilità dei componenti del piano di controllo
Nome avviso | Descrizione | Definizione dei criteri di avviso in Cloud Monitoring |
---|---|---|
Server API non disponibile (critico) | La metrica di uptime del server API non è disponibile | apiserver-unavailable.json |
Programma non disponibile (critico) | La metrica di uptime dello scheduler non è disponibile | scheduler-unavailable.json |
Gestore controller non disponibile (critico) | La metrica di uptime del gestore del controller non è disponibile | controller-manager-unavailable.json |
Sistema Kubernetes
Nome avviso | Descrizione | Definizione del criterio di avviso in Cloud Monitoring |
---|---|---|
Looping di arresti anomali del pod (avviso) | Il pod continua a riavviarsi e potrebbe essere in uno stato di loop di arresto anomalo | pod-crash-looping.json |
Pod non pronto per più di un'ora (critico) | Il pod è in uno stato non pronto per più di un'ora | pod-not-ready-1h.json |
L'utilizzo della CPU del contenitore supera l'80% (avviso) | L'utilizzo della CPU del container supera l'80% del limite | container-cpu-usage-high-reaching-limit.json |
L'utilizzo della memoria del container supera l'85% (avviso) | L'utilizzo della memoria del container supera l'85% del limite | container-memory-usage-high-reaching-limit.json |
Utilizzo elevato del volume permanente (critico) | Il volume permanente rivendicato ha meno del 3% di spazio libero | persistent-volume-usage-high.json |
L'utilizzo della CPU del nodo supera l'80% (avviso) | L'utilizzo della CPU per il nodo supera l'80% del totale allocabile per 5 minuti | node-cpu-usage-high.json |
L'utilizzo del disco del nodo supera l'85% (avviso) | Meno del 15% è libero per mountpoint del disco per 10 minuti | node-disk-usage-high.json |
L'utilizzo della memoria del nodo supera l'80% (avviso) | L'utilizzo della memoria dei nodi supera l'80% del totale allocabile per 5 minuti | node-memory-usage-high.json |
Nodo non pronto per più di un'ora (critico) | Il nodo è in stato non pronto da più di un'ora | node-not-ready-1h.json |
Prestazioni di Kubernetes
Nome avviso | Descrizione | Definizione dei criteri di avviso in Cloud Monitoring |
---|---|---|
Il rapporto di errori del server API supera il 20% (critico) | Il server API restituisce errori 5xx o 429 su più del 20% di tutte le richieste per verbo per 15 minuti | apiserver-error-ratio-high.json |
Modifica del leader ETCD o errore di proposta troppo frequente (avviso) | Le modifiche principali o gli errori delle proposte etcd si verificano troppo spesso |
etcd-leader-changes-or-proposal-failures-frequent.json |
Il server ETCD non è al quorum (critico) | Nessuna proposta di server etcd impegnata per 5 minuti, quindi potrebbe aver perso il quorum |
etcd-server-not-in-quorum.yaml |
Lo spazio di archiviazione ETCD supera il limite del 90% (avviso) | L'utilizzo dello spazio di archiviazione di etcd supera il 90% del limite |
etcd-storage-usage-high.json |
Criteri di avviso con PromQL
Le query nei criteri di avviso possono essere espresse anche in PromQL anziché in MQL.
Ad esempio, è possibile scaricare la versione PromQL del criterio API server error ratio exceeds 20
percent (critical)
: apiserver-error-ratio-high-promql.json.
Per ulteriori informazioni, consulta Usa Managed Service per Prometheus per la documentazione di Google Distributed Cloud Criteri di avviso con PromQL per la documentazione di Cloud Monitoring.
Ricevere notifiche
Dopo aver creato un criterio di avviso, puoi definire una o più notifiche canali per le norme. Esistono diversi tipi di canali di notifica. Ad esempio, puoi ricevere notifiche via email, tramite un canale Slack o un'app mobile. Puoi scegliere i canali più adatti alle tue esigenze.
Per istruzioni su come configurare i canali di notifica, consulta: Gestione dei canali di notifica.