Filter für Prozessintegrität

In dieser Anleitung wird beschrieben, wie Sie die Anzahl der Prozesse zählen, die auf Ihren virtuellen Maschinen (VMs) ausgeführt werden und die von Ihnen angegebenen Filterbedingungen erfüllen. Mit der Cloud Monitoring API oder der Google Cloud Console können Sie Benachrichtigungsrichtlinien und Diagramme erstellen, in denen Prozesse gezählt werden.

Wenn Sie Informationen zu laufenden Prozessen erhalten möchten, z. B. die CPU-Auslastung für bestimmte Prozesse, sehen Sie unter Prozessmesswerte nach.

Die Struktur des Monitoring-Filters zum Zählen von Prozessen ähnelt der Struktur, die verwendet wird, wenn Sie mit diesen Filtern überwachte Ressourcen oder Messwerttypen angeben. Allgemeine Informationen finden Sie unter Monitoring-Filter.

Hinweise

Wenn Sie mit Messwerten, Zeitachsen und überwachten Ressourcen nicht vertraut sind, finden Sie weitere Informationen unter Messwerte, Zeitachsen und Ressourcen.

Gezählte Prozesse

Monitoring zählt Prozesse, indem ein regulärer Ausdruck auf die Befehlszeile angewendet wird, über die der Prozess aufgerufen wurde. Wenn für einen Prozess kein Befehlszeilenfeld verfügbar ist, wird dieser Prozess nicht gezählt.

Eine Möglichkeit festzustellen, ob ein Prozess gezählt werden kann, besteht darin, sich die Ausgabe des Linux-Befehls ps anzusehen:

    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]

Wenn der Eintrag in der Spalte COMMAND von eckigen Klammern umschlossen ist, z. B. [nfsd], sind die Befehlszeileninformationen für den Prozess nicht verfügbar und der Prozess wird daher nicht gezählt.

Struktur des Prozessintegritätsfilters

Ein Prozessintegritätsfilter bestimmt die zu zählenden Prozesse sowie eine oder mehrere Ressourcen, deren Prozesse gezählt werden sollen. Folgende JSON-Datei beschreibt beispielsweise eine Benachrichtigungsrichtlinie, die eine Benachrichtigung auslöst, wenn die Anzahl der Prozesse auf einer beliebigen Compute Engine-VM-Instanz kleiner als 30 ist:

     {
        "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 diesem Beispiel ist der Wert der filter-Anweisung ein String mit zwei Klauseln. Die erste Klausel, select_process_count(\"*\"), gibt an, dass alle Prozesse gezählt werden. Die zweite Klausel, resource.type=\"gce_instance\", gibt an, dass Compute Engine-VMs überwacht werden sollen.

Wenn Sie die Google Cloud Console verwenden, verwenden Sie den direkten Filtermodus, um den Wert eines Monitoring-Filters einzugeben. Achten Sie jedoch darauf, alle Escapezeichen zu entfernen, die einen Teilstring schützen. Wenn Sie beispielsweise alle Prozesse für Compute Engine-VMs zählen möchten, geben Sie Folgendes ein:

    select_process_count("*") resource.type="gce_instance"

Informationen zum Zugriff auf den direkten Filtermodus bei der Verwendung von Metrics Explorer oder zum Erstellen von Benachrichtigungsrichtlinien oder Diagrammen in Dashboards finden Sie in folgenden Dokumenten:

Ressourcenkennzeichner

In einem Prozessintegritätsfilter muss das Feld resource.type festgelegt werden, um die VMs anzugeben, deren Prozesse gezählt werden sollen. Dieser Filter muss einen der folgenden Werte haben:

  • gce_instance
  • aws_ec2_instance

Wenn Sie nur das resource.type-Feld angeben, werden Prozesse auf allen VMs gezählt:

  • Um eine einzelne VM-Instanz auszuwählen, fügen Sie ein metric.labels.instance_name-Filterobjekt hinzu.
  • Wenn Sie eine Gruppe an VMs auswählen möchten, fügen Sie ein group.id-Filterobjekt hinzu.

Weitere Informationen zum resource.type-Feld finden Sie unter Monitoring-Filter.

Prozess-ID

Ein Prozessintegritätsfilter muss die Funktion select_process_count aufrufen. Die Argumente dieser Funktion identifizieren die zu zählenden Prozesse.

Es gibt drei Filterobjekte, die Sie über einen Aufruf an select_process_count angeben können:

  • command_line (oder metric.labels.command_line): Dieser Filter gilt für die Befehlszeile, mit der der Prozess gestartet wird. Befehlszeilen werden nach 1.024 Zeichen abgeschnitten, sodass Text in einer Befehlszeile, der diese Beschränkung überschreitet, nicht abgeglichen werden kann.

  • command (oder metric.labels.command): Dieser Filter gilt für die Befehlszeile, mit der der Prozess gestartet wird. Befehle werden nach 1.024 Zeichen abgeschnitten, sodass Text in einem Befehl, der dieses Limit überschreitet, nicht abgeglichen werden kann.

  • user (oder metric.labels.user): Dieser Filter gilt für den Nutzer, der den Prozess gestartet hat.

Sie können im Aufruf von select_process_count entweder Positionsargumente oder benannte Argumente verwenden. Wenn Sie benannte Argumente verwenden, müssen Sie das Filterobjekt, eine Gleichheitsanweisung, = und einen Wert angeben. Wenn Sie Positionsargumente verwenden, geben Sie nur den Wert an. Ein Stringtest, bei dem die Groß- und Kleinschreibung berücksichtigt wird, prüft, ob ein Prozess mit dem Filter übereinstimmt.

Der Wert eines Filterobjekts kann sein:

  • String (genau passend)
  • * (Platzhalter)
  • has_substring(string)
  • starts_with(string)
  • ends_with(string)
  • monitoring.regex.full_match(string)

Wenn Sie mehrere Filter angeben, gelten folgende Regeln:

  • command_line ist durch ein logisches OR mit command verknüpft. Ein Prozess wird gezählt, wenn er mit einem der Filter übereinstimmt.
  • user ist durch ein logisches AND mit command_line (command ) verknüpft. Ein Prozess gilt nur dann als Übereinstimmung, wenn er mit dem user-Filter und dem command_line (command)-Filter übereinstimmt.
  • Wenn Sie alle Filter anwenden, wird ein Prozess gezählt, wenn er mit dem user-Filter und mit dem command_line- oder command-Filter übereinstimmt.

Benannte Argumente

Wenn Sie benannte Argumente verwenden möchten, geben Sie den Filternamen, eine Gleichheitsanweisung, = und dann den Filterwert an. Sie können benannte Argumente in beliebiger Reihenfolge angeben.

Folgende Abfrage stimmt beispielsweise mit allen Prozessen überein, die vom Root gestartet werden, falls die Befehlszeile den String nginx enthielt:

     select_process_count("command_line=has_substring(\"nginx\")","user=root")

In diesem Beispiel wird ein Abgleich mit einem regulären Ausdruck in der Befehlszeile verwendet:

     select_process_count("command_line=monitoring.regex.full_match(\".*nginx.*\")","user=starts_with(\"root\")")

In diesem Beispiel werden alle Prozesse mit der Befehlszeile /bin/bash gezählt:

     select_process_count("command=/bin/bash")

In diesem Beispiel werden alle Prozesse gezählt, die vom Nutzer www gestartet wurden und deren Befehlszeile mit /bin/bash beginnt:

     select_process_count("user=www", "command_line=starts_with(\"/bin/bash \")")

Positionsargumente

Wenn Sie Positionsargumente nutzen möchten, geben Sie nur den Filterwert an. Folgende Regeln gelten für Positionsargumente:

  • Ist ein einzelnes Argument angegeben, wird dieses Argument als Befehlszeilenfilterobjekt interpretiert:
        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.*\")")
  • Wenn zwei Argumente angegeben sind, wird das erste Argument als Befehlszeilenfilter und das zweite als Nutzerfilter interpretiert. Ein Prozess wird gezählt, wenn er mit beiden Filterobjekten übereinstimmt:
        select_process_count("/sbin/init", "root")