En esta guía se describe cómo contar el número de procesos que se ejecutan en tus máquinas virtuales y que cumplen las condiciones de filtro que especifiques. Puedes crear políticas de alertas y gráficos que cuenten procesos mediante la API de Cloud Monitoring o la Google Cloud consola.
Si te interesa obtener información sobre los procesos en ejecución, por ejemplo, si quieres saber el uso de CPU de procesos específicos, consulta las métricas de procesos.
La estructura del filtro Monitoring cuando se usa para contar procesos es similar a la estructura que se usa cuando se usan estos filtros para especificar recursos monitorizados o tipos de métricas. Para obtener información general, consulta Monitorizar filtros.
Antes de empezar
Si no conoces las métricas, las series temporales y los recursos monitorizados, consulta el artículo Métricas, series temporales y recursos.
Procesos que se contabilizan
Monitoring cuenta los procesos aplicando una expresión regular a la línea de comandos que ha invocado el proceso. Si un proceso no tiene un campo de línea de comandos disponible, no se contabilizará.
Una forma de determinar si se puede contabilizar un proceso es consultar la salida 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]
Si el valor de la columna COMMAND
está entre corchetes (por ejemplo, [nfsd]
), no se muestra la información de la línea de comandos del proceso y, por lo tanto, no se contabiliza.
Estructura de los filtros de estado del proceso
Un filtro de estado del proceso identifica los procesos que se deben contabilizar y uno o varios recursos cuyos procesos se deben contabilizar. Por ejemplo, el siguiente JSON describe una política de alertas que envía una notificación si el número de procesos es inferior a 30 en cualquier instancia de máquina virtual 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 instrucción filter
es una cadena con dos cláusulas. La primera cláusula, select_process_count(\"*\")
, especifica que se contabilizan todos los procesos. La segunda cláusula, resource.type=\"gce_instance\"
,
identifica que se deben monitorizar las VMs de Compute Engine.
Si usas la Google Cloud consola, utiliza el modo de filtro directo para introducir el valor de un filtro de Monitoring. Sin embargo, asegúrate de eliminar los caracteres de escape que protejan una subcadena. Por ejemplo, para contar todos los procesos de las VMs de Compute Engine, introduce lo siguiente:
select_process_count("*") resource.type="gce_instance"
Para obtener información sobre cómo acceder al modo de filtro directo al usar el explorador de métricas o al crear políticas de alertas o gráficos en paneles de control, 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 recurso
Un filtro de estado del proceso debe definir el campo resource.type
para especificar las VMs cuyos procesos se contabilizan. El valor de este filtro debe ser uno de los siguientes:
gce_instance
aws_ec2_instance
Si solo especifica el campo resource.type
, se contabilizarán los procesos de todas las máquinas virtuales:
- Para seleccionar una sola instancia de VM, añade un filtro
metric.labels.instance_name
. - Para seleccionar un grupo de VMs, añade un objeto de filtro
group.id
.
Para obtener más información sobre el campo resource.type
, consulta Filtros de monitorizació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 van a contabilizar.
Hay tres objetos de filtro que puede especificar en una llamada a select_process_count
:
command_line
(ometric.labels.command_line
): este filtro se aplica a la línea de comandos usada para iniciar el proceso. Las líneas de comandos se truncan después de 1024 caracteres, por lo que el texto de una línea de comandos que supere ese límite no se puede comparar.command
(ometric.labels.command
): este filtro se aplica a la línea de comandos usada para iniciar el proceso. Los comandos se truncan después de 1024 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 ha iniciado el proceso.
Puedes usar argumentos posicionales o argumentos con nombre en la llamada a
select_process_count
. Si usa argumentos con nombre, debe especificar el objeto de filtro, una instrucción de igualdad, =
y un valor. Si usas argumentos posicionales, solo tienes que especificar el valor.
Una prueba de cadena que distingue entre mayúsculas y 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 especifica varios filtros, se aplicarán las siguientes reglas:
command_line
se une acommand
mediante un operador lógico OR. Se cuenta un proceso cuando coincide con cualquiera de los filtros.user
se une acommand_line
(command
) mediante un operador lógico "Y". Un proceso solo coincide cuando cumple el filtrouser
y el filtrocommand_line
(command
).- Si aplica todos los filtros, se contabilizará un proceso cuando coincida con el filtro
user
y con el filtrocommand_line
ocommand
.
Argumentos con nombre
Para usar argumentos con nombre, especifique el nombre del filtro, una instrucción de igualdad, =
y, a continuación, el valor del filtro. Puedes especificar argumentos con nombre en cualquier orden.
Por ejemplo, el siguiente comando coincide con todos los procesos iniciados por root cuando la línea de comandos incluía la cadena nginx
:
select_process_count("command_line=has_substring(\"nginx\")","user=root")
En este ejemplo se usa una 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 iniciados por el usuario www
cuya línea de comandos empieza por /bin/bash
:
select_process_count("user=www", "command_line=starts_with(\"/bin/bash \")")
Argumentos posicionales
Para usar argumentos posicionales, solo tienes que proporcionar el valor del filtro. Las reglas que se indican a continuación se aplican a los argumentos posicionales:
- Si se proporciona un solo 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 como un filtro de usuario. Un proceso se contabiliza cuando coincide con ambos objetos de filtro:
select_process_count("/sbin/init", "root")