Questa guida descrive come conteggiare il numero di processi in esecuzione sulle tue VM (macchine virtuali) che soddisfano le condizioni di filtro specificate. Puoi creare criteri di avviso e grafici che conteggiano le procedure utilizzando l'API Cloud Monitoring o la console Google Cloud.
Se ti interessano informazioni sui processi in esecuzione, ad esempio se vuoi conoscere l'utilizzo della CPU per processi specifici, consulta Metriche dei processi.
La struttura del filtro di Monitoring quando viene utilizzato processi di conteggio è simile alla struttura utilizzata quando utilizzi questi filtri per specificare di risorse o tipi di metriche monitorate. Per informazioni generali, consulta Filtri di monitoraggio.
Prima di iniziare
Se non hai familiarità con le metriche, le serie temporali e le risorse monitorate, consulta Metriche, serie temporali e risorse.
Processi conteggiati
Il monitoraggio conteggia i processi applicando un'espressione regolare alla riga di comando che ha richiamato il processo. Se per un processo non è disponibile un campo della riga di comando, questo processo 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
è racchiusa tra parentesi quadre,
ad esempio [nfsd]
, le informazioni della riga di comando per il processo non sono
disponibile e quindi il processo non viene conteggiato.
Struttura del filtro di integrità di processo
Un filtro di integrità di processo identifica i processi da conteggiare e una o più risorse di cui devono essere conteggiati 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 le VM Compute Engine da monitorare.
Se utilizzi la console Google Cloud, utilizza la modalità di filtro diretto per inserire il valore di un filtro di monitoraggio. Tuttavia, assicurati di rimuovere tutti i caratteri di 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 Esplora metriche o quando crei criteri di avviso o grafici nelle dashboard, consulta i seguenti documenti
- Avvisi: modalità di filtro diretto
- Grafici: modalità filtro diretto
- Esplora metriche: modalità di filtro diretto
Identificatore di risorse
Un filtro di integrità dei processi deve impostare il campo resource.type
per specificare
VM di cui vengono conteggiati i processi. 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 filtro
metric.labels.instance_name
. - Per selezionare un gruppo di VM, aggiungi un oggetto filtro
group.id
.
Per ulteriori informazioni sul campo resource.type
, consulta
Filtri di monitoraggio.
Identificatore di processo
Un filtro di integrità dei processi 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, pertanto il testo in una riga di comando oltre questo limite non può essere associato.command
(ometric.labels.command
): questo filtro si applica al comando utilizzata per avviare il processo. I comandi sono troncati dopo 1024 caratteri, quindi il testo in un comando che supera quel limite non possono essere abbinati.user
(ometric.labels.user
): questo filtro si applica all'utente che ha avviato il processo.
Nella chiamata a
select_process_count
puoi utilizzare argomenti posizionali o denominati. Se utilizzi il nome
devi specificare l'oggetto filtro, un'istruzione equals, =
,
e un valore. Se utilizzi gli argomenti posizionali, specifica solo il valore.
Un test di stringa sensibile alle maiuscole determina se un processo corrisponde al
filtro.
Il valore di un oggetto filtro può essere:
- 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 OR logico. Un processo viene conteggiato quando corrisponde a uno dei filtri.user
è unito acommand_line
(command
) da un AND logico. Un processo corrisponde solo quando corrisponde al filtrouser
e al filtrocommand_line
(command
).- Se applichi tutti i filtri, viene conteggiato un processo quando corrisponde alla
user
e quando corrisponde al filtrocommand_line
ocommand
.
Argomenti denominati
Per utilizzare argomenti con nome, specifica il nome del filtro, un'istruzione equals, =
e
quindi il valore del filtro. Puoi specificare argomenti con nome in qualsiasi ordine.
Ad esempio, quanto segue corrisponde a tutti i processi avviati dalla radice
quando la riga di comando includeva la stringa nginx
:
select_process_count("command_line=has_substring(\"nginx\")","user=root")
Questo esempio utilizza una corrispondenza con un'espressione regolare sulla riga di comando:
select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")
In questo esempio sono conteggiati tutti i processi la cui riga di comando era /bin/bash
:
select_process_count("command=/bin/bash")
In questo esempio sono 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. Le seguenti regole si applicano agli argomenti posizionali:
- Se viene fornito un singolo argomento, questo viene interpretato come un oggetto 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 da un filtro a riga di comando, mentre il secondo è un filtro utente. Un processo viene conteggiato quando corrisponde a entrambi gli oggetti filtro:
select_process_count("/sbin/init", "root")