Questa guida descrive come conteggiare il numero di processi in esecuzione sulle tue macchine virtuali (VM) che soddisfano le condizioni di filtro specificate. Puoi creare criteri di avviso e grafici che conteggiano i processi utilizzando l'API Cloud Monitoring o la console Google Cloud.
Se ti interessano informazioni sui processi in esecuzione, ad esempio vuoi conoscere l'utilizzo della CPU per processi specifici, consulta Metriche di processo.
La struttura del filtro di Monitoring quando viene utilizzato per conteggiare i processi è simile alla struttura utilizzata quando utilizzi questi filtri per specificare le risorse monitorate o i tipi di metriche. Per informazioni generali, consulta la sezione Filtri di Monitoring.
Prima di iniziare
Se non hai dimestichezza con le metriche, le serie temporali e le risorse monitorate, consulta Metriche, serie temporali e risorse.
Processi conteggiati
Monitoring conteggia i processi applicando un'espressione regolare alla riga di comando che ha richiamato il processo. Se un processo non ha un campo a riga di comando disponibile, non viene conteggiato.
Un modo per determinare se un processo può essere conteggiato è visualizzare l'output del comando ps
di Linux:
ps aux | grep nfs
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1598 0.0 0.0 0 0 ? S< Oct25 0:00 [nfsd4]
root 1639 0.0 0.0 0 0 ? S Oct25 2:33 [nfsd]
root 1640 0.0 0.0 0 0 ? S Oct25 2:36 [nfsd]
Quando la voce nella colonna COMMAND
viene racchiusa tra parentesi quadre, ad esempio [nfsd]
, le informazioni sulla riga di comando relative al processo non sono disponibili e, di conseguenza, il processo non viene conteggiato.
Struttura del filtro di integrità del processo
Un filtro di integrità dei processi identifica i processi da conteggiare e una o più risorse di cui conteggiare i processi. Ad esempio, il seguente JSON descrive un criterio di avviso che invia una notifica se il numero di processi è inferiore a 30 in qualsiasi istanza VM di Compute Engine:
{ "displayName": "Count all processes", "conditionThreshold": { "aggregations": [], "comparison": "COMPARISON_LT", "duration": "0s", "filter": "select_process_count(\"*\") resource.type=\"gce_instance\"", "thresholdValue": 30, "trigger": { "count": 1 } } }
In questo esempio, il valore dell'istruzione filter
è una stringa con due clausole. La prima clausola, select_process_count(\"*\")
, specifica che
vengono conteggiati tutti i processi. La seconda clausola, resource.type=\"gce_instance\"
,
identifica che le VM di Compute Engine devono essere monitorate.
Se utilizzi la console Google Cloud, utilizza la modalità filtro diretto per inserire il valore di un filtro di Monitoring. Tuttavia, assicurati di rimuovere eventuali escape che proteggono una sottostringa. Ad esempio, per conteggiare tutti i processi per le VM di Compute Engine, inserisci quanto segue:
select_process_count("*") resource.type="gce_instance"
Per informazioni su come accedere alla modalità di filtro diretto quando utilizzi Metrics Explorer o quando crei criteri di avviso o grafici nelle dashboard, consulta i seguenti documenti
- Avvisi: modalità filtro diretto
- Grafici: modalità filtro diretto
- Metrics Explorer: modalità di filtro diretto
Identificatore di risorse
Un filtro di integrità del processo deve impostare il campo resource.type
per specificare le VM i cui processi vengono conteggiati. Il valore di questo filtro deve essere uno dei seguenti:
gce_instance
aws_ec2_instance
Se specifichi solo il campo resource.type
, vengono conteggiati i processi su tutte le VM:
- Per selezionare una singola istanza VM, aggiungi un oggetto filtro
metric.labels.instance_name
. - Per selezionare un gruppo di VM, aggiungi un oggetto filtro
group.id
.
Per maggiori informazioni sul campo resource.type
, consulta
Filtri di Monitoring.
Identificatore processo
Un filtro di integrità del processo deve chiamare la funzione select_process_count
.
Gli argomenti di questa funzione identificano i processi da conteggiare.
Esistono tre oggetti filtro che puoi specificare in una chiamata a select_process_count
:
command_line
(ometric.labels.command_line
): questo filtro si applica alla riga di comando utilizzata per avviare il processo. Le righe di comando vengono troncate dopo 1024 caratteri, quindi non è possibile trovare corrispondenze per il testo di una riga di comando che supera questo limite.command
(ometric.labels.command
): questo filtro si applica alla riga di comando utilizzata per avviare il processo. I comandi vengono troncati dopo 1024 caratteri, quindi il testo in un comando che supera questo limite non può essere abbinato.user
(ometric.labels.user
): questo filtro si applica all'utente che ha avviato il processo.
Puoi utilizzare argomenti posizionali o denominati nella chiamata a select_process_count
. Se utilizzi argomenti denominati, devi specificare l'oggetto filtro, un'istruzione di tipo uguale, =
e un valore. Se utilizzi argomenti posizionali, specifichi solo il valore.
Un test delle stringhe che fa distinzione tra maiuscole e minuscole determina se un processo corrisponde al
filtro.
Il valore di un oggetto filtro può essere uno dei seguenti:
- stringa (corrispondenza esatta)
*
(carattere jolly)has_substring(string)
starts_with(string)
ends_with(string)
monitoring.regex.full_match(string)
Se specifichi più filtri, vengono applicate le seguenti regole:
command_line
è unito acommand
da un operatore logico OR. Un processo viene conteggiato quando corrisponde a uno dei filtri.user
è unito acommand_line
(command
) da un AND logico. Un processo è una corrispondenza solo se corrisponde al filtrouser
e al filtrocommand_line
(command
).- Se applichi tutti i filtri, viene conteggiato un processo quando soddisfa il filtro
user
e quando soddisfa il filtrocommand_line
ocommand
.
Argomenti con nome
Per utilizzare argomenti denominati, specifica il nome del filtro, un'istruzione di tipo uguale, =
e poi il valore del filtro. Puoi specificare argomenti denominati in qualsiasi ordine.
Ad esempio, quanto segue corrisponde a tutti i processi avviati dalla root quando la riga di comando includeva la stringa nginx
:
select_process_count("command_line=has_substring(\"nginx\")","user=root")
Questo esempio utilizza una corrispondenza tramite espressione regolare nella riga di comando:
select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")
In questo esempio vengono conteggiati tutti i processi la cui riga di comando era /bin/bash
:
select_process_count("command=/bin/bash")
In questo esempio vengono conteggiati tutti i processi avviati dall'utente www
la cui riga di comando inizia con /bin/bash
:
select_process_count("user=www", "command_line=starts_with(\"/bin/bash \")")
Argomenti posizionali
Per utilizzare gli argomenti posizionali, devi fornire solo il valore del filtro. Agli argomenti posizionali si applicano le seguenti regole:
- Se viene fornito un singolo argomento, questo viene interpretato come oggetto del filtro della riga di comando:
select_process_count("*") select_process_count("/sbin/init") select_process_count("starts_with(\"/bin/bash -c\")") select_process_count("ends_with(\"--alsologtostderr\")") select_process_count("monitoring.regex.full_match(\".*nginx.*\")")
- Se vengono forniti due argomenti, il primo argomento viene interpretato come filtro della riga di comando e il secondo è un filtro utente. Viene conteggiato un processo quando corrisponde a entrambi gli oggetti filtro:
select_process_count("/sbin/init", "root")