Este script permite monitorear el consumo de CPU de un proceso específico en sistemas Linux, integrado con Zabbix para su supervisión continua. Se basa en la lectura de archivos del sistema /proc para calcular la tasa de uso de CPU por segundo.
Entorno de ejecución
Sistema operativo: CentOS Linux release 7.4.1708 (Core)
Versión del kernel: 3.10.0-693.el7.x86_64
Implementación del script
El script calcula el porcentaje de CPU utilizado por un proceso en un intervalo de un segundo. A continuación, se presenta una versión reestructurada con nombres de variables modificaods y lógica optimizada:
#!/bin/bash
# Argumento: nombre del proceso a monitorear
proceso_objetivo="$1"
obtener_uso_cpu() {
# Identificar el PID del proceso
pid=$(pgrep -f "$proceso_objetivo" | head -1)
if [ -z "$pid" ]; then
echo "Error: proceso no encontrado"
exit 1
fi
# Capturar valores iniciales del sistema y del proceso
total_sistema_1=$(awk 'NR==1 {for(i=2;i<=NF;i++) total+=$i; print total}' /proc/stat)
uso_proceso_1=$(awk '{for(i=14;i<=17;i++) tiempo+=$i; print tiempo}' /proc/$pid/stat)
# Esperar 1 segundo para el cálculo diferencial
sleep 1
# Capturar valores finales
total_sistema_2=$(awk 'NR==1 {for(i=2;i<=NF;i++) total+=$i; print total}' /proc/stat)
uso_proceso_2=$(awk '{for(i=14;i<=17;i++) tiempo+=$i; print tiempo}' /proc/$pid/stat)
# Calcular deltas
delta_proceso=$((uso_proceso_2 - uso_proceso_1))
delta_sistema=$((total_sistema_2 - total_sistema_1))
# Computar porcentaje de uso
porcentaje=$(awk -v delta_p=$delta_proceso -v delta_s=$delta_sistema -v mult=100 'BEGIN {printf "%.4f\n", (delta_p / delta_s) * mult}')
echo "$porcentaje"
# Registrar en archivo de log
echo "$(date +%Y-%m-%d-%H:%M:%S) :: $porcentaje" >> /var/log/zabbix/uso_cpu_$proceso_objetivo.log 2>&1
}
# Ejecutar según el nombre del proceso proporcionado
case "$proceso_objetivo" in
"aplicacion_java1")
obtener_uso_cpu
;;
"aplicacion_python2")
obtener_uso_cpu
;;
*)
echo "Uso: $0 <nombre_del_proceso>"
exit 1
;;
esac</nombre_del_proceso>
Intergación con Zabbix
Para incorporar el script en Zabbix, agregar la siguiente línea al archivo de configuración del agente:
echo 'UserParameter=monitoreo.cpu_proceso[*],/bin/bash /opt/zabbix/scripts/monitoreo_cpu.sh "$1"' >> /etc/zabbix/zabbix_agentd.d/parametros_personalizados.conf
Descripción de archivos del sistema
/proc/stat
Este archivo contiene contadores acumulados del uso de CPU desde el arranque del sistema. La primera línea resume el total de todos los núcleos, y las siguientes líneas detallan por núcleo. Los campos relevantes incluyen:
- user: Tiempo en modo usuario con prioridad nice ≤ 0.
- nice: Tiempo en modo usuario con priordiad nice > 0.
- system: Tiempo en modo kernel (excluyendo interrupciones).
- idle: Tiempo inactivo del CPU.
- iowait: Tiempo de espera por operaciones de E/S.
El script suma estos campos para obtener el tiempo total de CPU disponible.
/proc/[pid]/stat
Este archivo proporciona información sobre el estado de un proceso específico. Los campos 14 a 17 representan tiempos de CPU consumidos en modos usuario y kernel, utilizados para calcular el uso individual del proceso.