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 policy 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 se vuoi conoscere l'utilizzo della CPU per processi specifici, consulta Metriche dei processi.
La struttura del filtro Monitoraggio 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, vedi Filtri di Monitoring.
Prima di iniziare
Se non hai familiarità con metriche, serie temporali e 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 della riga di comando disponibile, non viene conteggiato.
Un modo per determinare se un processo può essere conteggiato
è visualizzare l'output del comando Linux ps:
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
disponibili e pertanto 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 i cui processi devono essere conteggiati. Ad esempio, il seguente JSON descrive una criterio di avviso che invia una notifica se il numero di processi è inferiore a 30 su 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\",
indica che le VM di Compute Engine devono essere monitorate.
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 eventuali 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 Metrics Explorere o quando crei policy di avviso o grafici sulle dashboard, consulta i seguenti documenti:
- Avvisi: modalità di filtro diretto
- Grafici: Modalità filtro diretto
- Metrics Explorer: modalità filtro diretto
Identificatore di risorse
Un filtro di integrità di 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_instanceaws_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 ulteriori informazioni sul campo resource.type, vedi
Filtri di Monitoring.
Identificatore processo
Un filtro di integrità di 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, pertanto il testo di una riga di comando oltre questo limite non può essere confrontato.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 di un comando oltre questo limite non può essere confrontato.user(ometric.labels.user): questo filtro si applica all'utente che ha avviato la procedura.
Puoi utilizzare argomenti posizionali o argomenti denominati nella chiamata a
select_process_count. Se utilizzi argomenti
denominati, devi specificare l'oggetto filtro, un'istruzione di uguaglianza, = e un valore. Se utilizzi argomenti posizionali, specifichi solo il valore.
Un test di stringa sensibile alle maiuscole/minuscole determina se un processo corrisponde al
filtro.
Il valore di un oggetto filtro può essere uno dei seguenti:
- stringa (corrispondenza esatta)
*(jolly)has_substring(string)starts_with(string)ends_with(string)monitoring.regex.full_match(string)
Se specifichi più filtri, si applicano le seguenti regole:
command_lineè unito acommandda un OR logico. Un processo viene conteggiato quando corrisponde a uno dei due filtri.userè unito acommand_line(command) da un operatore logico AND. Un processo corrisponde solo quando corrisponde al filtrousere al filtrocommand_line(command).- Se applichi tutti i filtri, un processo viene conteggiato quando corrisponde al filtro
usere quando corrisponde al filtrocommand_lineocommand.
Argomenti denominati
Per utilizzare gli argomenti denominati, specifica il nome del filtro, un'istruzione di uguaglianza, = e
poi il valore del filtro. Puoi specificare gli argomenti denominati in qualsiasi ordine.
Ad esempio, la seguente corrispondenza include tutti i processi avviati da 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 di espressione regolare nella riga di comando:
select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")
Questo esempio conta tutti i processi la cui riga di comando era /bin/bash:
select_process_count("command=/bin/bash")
Questo esempio conteggia 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, fornisci 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 viene interpretato come un filtro della riga di comando e il secondo come un filtro utente. Un processo viene conteggiato quando corrisponde a entrambi gli oggetti filtro:
select_process_count("/sbin/init", "root")