Puedes contar los procesos que se ejecutan en tus máquinas virtuales (VMs) que coinciden con criterios específicos usando filtros de estado de los procesos en Cloud Monitoring. Usa estos filtros en las políticas de alertas y los gráficos a través de la API de Cloud Monitoring o el modo de filtro directo en la consola de Google Cloud .
Para supervisar el consumo de recursos, como el uso de CPU para procesos específicos, consulta Supervisa procesos en VMs. Los filtros de estado del proceso comparten la sintaxis con los filtros de recursos y métricas estándar. Para conocer las reglas de sintaxis generales, consulta Filtros de Monitoring.
Antes de comenzar
Si no estás familiarizado con las métricas, las series temporales y los recursos supervisados, consulta Métricas, series temporales y recursos.
Procesos que se cuentan
Monitoring cuenta los procesos 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.
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 en la columna COMMAND está unida con corchetes, por ejemplo, [nfsd], la información de la línea de comandos para el proceso no está disponible y, por lo tanto, el proceso no se cuenta.
Estructura del filtro de estado del proceso
Un filtro de estado del proceso identifica qué procesos se deben 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 que
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 modo de filtro directo para ingresar el valor de un filtro de Monitoring. Sin embargo, asegúrate de quitar los caracteres de escape que protegen 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 usas el Explorador de métricas o cuando creas políticas de alertas o gráficos en paneles, consulta los siguientes documentos:
- Alertas: Modo de filtro directo
- Gráficos: Modo de filtro directo
- Explorador de métricas: Modo de filtro directo
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
siguientes:
gce_instanceaws_ec2_instance
Si solo especificas el campo resource.type, se cuentan los procesos en todas las VMs:
- 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 Monitoring.
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 deben contar.
Existen tres objetos de filtro que puedes especificar en una llamada a
select_process_count:
command_line(ometric.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 se truncan después de 1,024 caracteres, por lo que no se puede hacer coincidir el texto de una línea de comandos que supere ese límite.command(ometric.labels.command): Este filtro se aplica a la línea de comandos que se usa para iniciar el proceso. Los comandos se truncan después de 1,024 caracteres, por lo que el texto de un comando que supere ese límite no se puede comparar.user(ometric.labels.user): Este filtro se aplica al usuario que inició el proceso.
Puedes usar argumentos posicionales o argumentos con nombre en la llamada a
select_process_count. Si usas argumentos con nombre,
debes especificar el objeto de filtro, una declaración de igualdad, =
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_linese une acommandcon un OR lógico. Un proceso se cuenta cuando coincide con cualquiera de los filtros.userse une acommand_line(command) mediante un AND lógico. Un proceso es una coincidencia solo cuando coincide con el filtrousery el filtrocommand_line(command).- Si aplicas todos los filtros, se cuenta un proceso cuando coincide con el filtro
usery cuando coincide con el filtrocommand_lineocommand.
Argumentos con nombre
Para usar argumentos con nombre, especifica el nombre del filtro, una declaración de igualdad, = y,
luego, el valor del filtro. Puedes especificar argumentos con nombre en cualquier orden.
Por ejemplo, lo siguiente coincide con todos los procesos iniciados por root
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 es /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, solo debes proporcionar el valor del filtro. Se aplican las siguientes reglas a los argumentos posicionales:
- Si se proporciona un solo argumento, este 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, como un filtro de usuario. Un proceso se cuenta cuando coincide con ambos objetos de filtro:
select_process_count("/sbin/init", "root")