Cálculo del uso de CPU de un proceso individual con Zabbix

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.

Etiquetas: zabbix bash linux monitoreo-cpu script-shell

Publicado el 6-14 19:02