Filtri di integrità di processo

Puoi contare i processi in esecuzione sulle tue macchine virtuali (VM) che corrispondono a criteri specifici utilizzando i filtri di integrità dei processi in Cloud Monitoring. Utilizza questi filtri nelle policy di avviso e nei grafici tramite l'API Cloud Monitoring o la modalità di filtro diretto nella console Google Cloud .

Per monitorare l'utilizzo delle risorse, ad esempio l'utilizzo della CPU per processi specifici, consulta Monitora i processi sulle VM. I filtri per l'integrità dei processi condividono la sintassi con i filtri standard per risorse e metriche. Per le regole di sintassi generali, consulta 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, di conseguenza, il processo non viene conteggiato.

Struttura dei filtri per l'integrità dei processi

Un filtro di integrità dei processi 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\", identifica che devono essere monitorate le VM di Compute Engine.

Se utilizzi la console Google Cloud , utilizza la modalità di 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 policy di avviso o grafici nelle dashboard, consulta i seguenti documenti:

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 saperne di più sul campo resource.type, consulta Filtri di Monitoring.

Identificatore processo

Un filtro per l'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 (o metric.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 (o metric.labels.command): questo filtro si applica alla riga di comando utilizzata per avviare il processo. I comandi vengono troncati dopo 1024 caratteri, pertanto il testo di un comando oltre questo limite non può essere confrontato.

  • user (o metric.labels.user): questo filtro si applica all'utente che ha avviato il processo.

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 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, si applicano le seguenti regole:

  • command_line è unito a command da un OR logico. Un processo viene conteggiato quando corrisponde a uno dei due filtri.
  • user è unito a command_line (command) da un AND logico. Un processo corrisponde solo quando corrisponde al filtro user e al filtro command_line (command).
  • Se applichi tutti i filtri, un processo viene conteggiato quando corrisponde al filtro user e quando corrisponde al filtro command_line o command.

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, quanto segue corrisponde a tutti i processi avviati da root quando la riga di comando include 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 conteggia tutti i processi la cui riga di comando è /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, 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 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 filtro della riga di comando e il secondo come filtro utente. Un processo viene conteggiato quando corrisponde a entrambi gli oggetti filtro:
        select_process_count("/sbin/init", "root")