Filtros de estado del proceso

En esta guía, se describe cómo contar la cantidad de procesos que se ejecutan en tus máquinas virtuales (VMs) que cumplen con las condiciones de filtro que especifiques. Puedes crear políticas de alertas y gráficos que cuentan procesos con la API de Cloud Monitoring o la consola de Google Cloud.

Si te interesa obtener información sobre los procesos en ejecución, por ejemplo, si quieres conocer el uso de la CPU para procesos específicos, consulta Métricas de procesos.

La estructura del filtro de Monitoring cuando se usa para y recuento de procesos es similar a la estructura que se usa cuando usas estos filtros para especificar recursos supervisados o tipos de métricas. Para obtener información general, consulta Filtros de supervisión.

Antes de comenzar

Si desconoces las métricas, las series temporales y los recursos supervisados consulta Métricas, series temporales y recursos.

Procesos que se cuentan

Supervisar los procesos de recuento aplicando una expresión regular a la línea de comandos que invocó el proceso. Si un proceso no tiene un campo de línea de comandos disponible, no se cuenta ese proceso.

Una forma de determinar si se puede contar un proceso es ver el resultado del comando ps de 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]

Cuando la entrada de la columna COMMAND se une entre corchetes, por ejemplo, [nfsd], la información de línea de comandos para el proceso no está disponible y, por lo tanto, el proceso no se cuenta.

Estructura del filtro del estado del proceso

Un filtro de estado del proceso identifica qué procesos contar y uno o más. recursos cuyos procesos se deben contar. Por ejemplo, el siguiente JSON describe una política de alertas que envía una notificación si la cantidad de procesos es inferior a 30 en cualquier instancia de VM de 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
          }
        }
     }

En este ejemplo, el valor de la sentencia filter es una cadena con dos cláusulas. La primera cláusula, select_process_count(\"*\"), especifica lo siguiente: se cuentan todos los procesos. La segunda cláusula, resource.type=\"gce_instance\", identifica que se deben supervisar las VMs de Compute Engine.

Si usas la consola de Google Cloud, usa el filtro directo. para ingresar el valor de un filtro de Monitoring. Sin embargo, asegúrate de quitar cualquier escape que proteja una subcadena. Por ejemplo, para contar todos los procesos de las VMs de Compute Engine, ingresa lo siguiente:

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

Para obtener información sobre cómo acceder al modo de filtro directo cuando se usa el Explorador de métricas o cuando se crean políticas de alertas o gráficos paneles, consulta los siguientes documentos

Identificador de recursos

Un filtro de estado del proceso debe establecer el campo resource.type para especificar las VMs cuyos procesos se cuentan. El valor de este filtro debe ser uno de los lo siguiente:

  • gce_instance
  • aws_ec2_instance

Si solo especificas el campo resource.type, se procesa en todas las VMs. se cuentan:

  • Para seleccionar una sola instancia de VM, agrega un objeto de filtro metric.labels.instance_name.
  • Para seleccionar un grupo de VMs, agrega un objeto de filtro group.id.

Para obtener más información sobre el campo resource.type, consulta Filtros de supervisión.

Identificador de proceso

Un filtro de estado del proceso debe llamar a la función select_process_count. Los argumentos de esta función identifican los procesos que se contarán.

Hay tres objetos de filtro que puedes especificar en una llamada a select_process_count

  • command_line (o metric.labels.command_line): Este filtro se aplica a la línea de comandos que se usa para iniciar el proceso. Las líneas de comandos están truncadas después de 1,024 caracteres, por lo que el texto en una línea de comandos supera ese límite no se pueden comparar.

  • command (o metric.labels.command): Este filtro se aplica a la línea de comandos que se usa para iniciar el proceso. Los comandos están truncados después de 1,024 caracteres, por lo que el texto en un comando que supere ese límite no se pueden comparar.

  • user (o metric.labels.user): Este filtro se aplica al usuario que iniciar el proceso.

Puedes usar argumentos posicionales o argumentos con nombre en la llamada a select_process_count Si usas un nombre de usuario argumentos, debes especificar el objeto filter, una sentencia signo igual, =, y un valor. Si usas argumentos posicionales, solo debes especificar el valor. Una prueba de cadena que distingue mayúsculas de minúsculas determina si un proceso coincide con el filtro.

El valor de un objeto de filtro puede ser cualquiera de los siguientes:

  • cadena (concordancia exacta)
  • * (Comodín)
  • has_substring(string)
  • starts_with(string)
  • ends_with(string)
  • monitoring.regex.full_match(string)

Si especificas varios filtros, se aplican las siguientes reglas:

  • command_line se une a command mediante un OR lógico. Se cuenta un proceso cuando coincide con cualquiera de los filtros.
  • user se une a command_line (command) con un operador lógico AND. Un proceso es una coincidencia solo cuando coincide con el filtro user. y el filtro command_line (command).
  • Si aplicas todos los filtros, se cuenta un proceso cuando coincide con el filtro user y cuando coincide con el filtro command_line o command.

Argumentos con nombre

Para usar argumentos con nombre, especifica el nombre del filtro, una sentencia signo igual, = y y, luego, el valor del filtro. Puedes especificar argumentos con nombre en cualquier orden.

Por ejemplo, lo siguiente coincide con todos los procesos que inicia la raíz cuando la línea de comandos incluye la cadena nginx:

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

En este ejemplo, se usa una coincidencia de expresión regular en la línea de comandos:

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

En este ejemplo, se cuentan todos los procesos cuya línea de comandos era /bin/bash:

     select_process_count("command=/bin/bash")

En este ejemplo, se cuentan todos los procesos que inició el usuario www cuya línea de comandos comienza con /bin/bash:

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

Argumentos de posición

Para usar argumentos posicionales, debes proporcionar solo el valor del filtro. Lo siguiente se aplican a los argumentos posicionales:

  • Si se proporciona un solo argumento, ese argumento se interpreta como un objeto de filtro de línea de comandos:
        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.*\")")
  • Si se proporcionan dos argumentos, el primero se interpreta como un filtro de línea de comandos y el segundo es un filtro de usuario. Un proceso se cuenta cuando coincide con ambos objetos de filtro:
        select_process_count("/sbin/init", "root")