tech:notes_supervision_consommation_cpu
Différences
Ci-dessous, les différences entre deux révisions de la page.
| tech:notes_supervision_consommation_cpu [2025/03/24 15:06] – créée - modification externe 127.0.0.1 | tech:notes_supervision_consommation_cpu [2025/03/24 21:01] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Notes supervision consommation CPU | ||
| + | |||
| + | Voir : | ||
| + | * [[Supervision - Sonde Nagios - Mémoire Linux|Supervision - Sonde Nagios - Mémoire Linux & CPU via SNMP]] | ||
| + | |||
| + | ## A superviser | ||
| + | |||
| + | * Nombre total de process | ||
| + | * Nombre total de threads '' | ||
| + | * Loadaverage | ||
| + | * IOWAIT | ||
| + | |||
| + | ### IOWAIT | ||
| + | |||
| + | Voir : https:// | ||
| + | |||
| + | ~~~bash | ||
| + | top | ||
| + | sar | ||
| + | iostat -d 2 %iowait | ||
| + | iostat -c 5 100 | ||
| + | snmpget -Oqv -v3 localhost .1.3.6.1.4.1.2021.11.54.0 | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | ./ | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | ## Script check_cpu_stats.sh | ||
| + | |||
| + | Source : https:// | ||
| + | |||
| + | '' | ||
| + | ~~~bash | ||
| + | #!/bin/bash | ||
| + | # ============================================================================== | ||
| + | # CPU Utilization Statistics plugin for Nagios | ||
| + | # | ||
| + | # Original author: | ||
| + | # Creation date: 8 September 2007 | ||
| + | # Description: | ||
| + | # This script has been designed and written on Unix platforms | ||
| + | # | ||
| + | # The script is used to query 6 of the key cpu statistics | ||
| + | # | ||
| + | # History/ | ||
| + | # License: | ||
| + | # | ||
| + | # Copyright 2007-2009, | ||
| + | # Copyright 2008 Bas van der Doorn | ||
| + | # Copyright 2008 Philipp Lemke | ||
| + | # Copyright 2016 Philipp Dallig | ||
| + | # Copyright 2022-2023 Claudio Kuenzler | ||
| + | # | ||
| + | # Usage: | ||
| + | # | ||
| + | # Example: ./ | ||
| + | # ./ | ||
| + | # ./ | ||
| + | # ======================================================================================== | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # Plugin description | ||
| + | PROGNAME=$(basename $0) | ||
| + | RELEASE=" | ||
| + | |||
| + | # Paths to commands used in this script. | ||
| + | export PATH=$PATH:/ | ||
| + | IOSTAT=" | ||
| + | #Needed for HP-UX | ||
| + | SAR="/ | ||
| + | |||
| + | # Nagios return codes | ||
| + | STATE_OK=0 | ||
| + | STATE_WARNING=1 | ||
| + | STATE_CRITICAL=2 | ||
| + | STATE_UNKNOWN=3 | ||
| + | |||
| + | # Plugin default parameters value if not defined | ||
| + | LIST_WARNING_THRESHOLD=${LIST_WARNING_THRESHOLD: | ||
| + | LIST_CRITICAL_THRESHOLD=${LIST_CRITICAL_THRESHOLD: | ||
| + | INTERVAL_SEC=${INTERVAL_SEC: | ||
| + | NUM_REPORT=${NUM_REPORT: | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # Check required commands | ||
| + | if [ `uname` = " | ||
| + | if [ ! -x $SAR ]; then | ||
| + | echo " | ||
| + | exit $STATE_UNKNOWN | ||
| + | fi | ||
| + | else | ||
| + | for cmd in iostat; do | ||
| + | if ! `command -v ${cmd} >/ | ||
| + | echo " | ||
| + | exit ${STATE_UNKNOWN} | ||
| + | fi | ||
| + | done | ||
| + | fi | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # Functions plugin usage | ||
| + | print_release() { | ||
| + | echo " | ||
| + | exit ${STATE_UNKNOWN} | ||
| + | } | ||
| + | |||
| + | print_usage() { | ||
| + | echo "" | ||
| + | echo " | ||
| + | echo "" | ||
| + | echo " | ||
| + | echo "" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo "" | ||
| + | echo " | ||
| + | echo " | ||
| + | echo "" | ||
| + | exit 0 | ||
| + | } | ||
| + | |||
| + | print_help() { | ||
| + | print_usage | ||
| + | echo "" | ||
| + | echo "This plugin will check cpu utilization (user, | ||
| + | echo "" | ||
| + | exit 0 | ||
| + | } | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # Parse parameters | ||
| + | if [ " | ||
| + | |||
| + | while getopts " | ||
| + | do | ||
| + | case ${Input} in | ||
| + | w) LIST_WARNING_THRESHOLD=${OPTARG};; | ||
| + | c) LIST_CRITICAL_THRESHOLD=${OPTARG};; | ||
| + | i) INTERVAL_SEC=${OPTARG};; | ||
| + | n) NUM_REPORT=${OPTARG};; | ||
| + | b) BAIL+=(" | ||
| + | h) print_help;; | ||
| + | v) print_release;; | ||
| + | *) print_help;; | ||
| + | esac | ||
| + | done | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # List to Table for warning threshold | ||
| + | TAB_WARNING_THRESHOLD=( `echo $LIST_WARNING_THRESHOLD | sed 's/,/ /g'` ) | ||
| + | if [ " | ||
| + | echo "ERROR : Bad count parameter in Warning Threshold" | ||
| + | exit $STATE_WARNING | ||
| + | else | ||
| + | USER_WARNING_THRESHOLD=`echo ${TAB_WARNING_THRESHOLD[0]}` | ||
| + | SYSTEM_WARNING_THRESHOLD=`echo ${TAB_WARNING_THRESHOLD[1]}` | ||
| + | IOWAIT_WARNING_THRESHOLD=`echo ${TAB_WARNING_THRESHOLD[2]}` | ||
| + | fi | ||
| + | |||
| + | # List to Table for critical threshold | ||
| + | TAB_CRITICAL_THRESHOLD=( `echo $LIST_CRITICAL_THRESHOLD | sed 's/,/ /g'` ) | ||
| + | if [ " | ||
| + | echo "ERROR : Bad count parameter in CRITICAL Threshold" | ||
| + | exit $STATE_WARNING | ||
| + | else | ||
| + | USER_CRITICAL_THRESHOLD=`echo ${TAB_CRITICAL_THRESHOLD[0]}` | ||
| + | SYSTEM_CRITICAL_THRESHOLD=`echo ${TAB_CRITICAL_THRESHOLD[1]}` | ||
| + | IOWAIT_CRITICAL_THRESHOLD=`echo ${TAB_CRITICAL_THRESHOLD[2]}` | ||
| + | fi | ||
| + | |||
| + | if [ ${TAB_WARNING_THRESHOLD[0]} -ge ${TAB_CRITICAL_THRESHOLD[0]} -o ${TAB_WARNING_THRESHOLD[1]} -ge ${TAB_CRITICAL_THRESHOLD[1]} -o ${TAB_WARNING_THRESHOLD[2]} -ge ${TAB_CRITICAL_THRESHOLD[2]} ]; then | ||
| + | echo "ERROR : Critical CPU Threshold lower as Warning CPU Threshold " | ||
| + | exit $STATE_WARNING | ||
| + | fi | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # CPU Utilization Statistics Unix Plateform ( Linux, | ||
| + | case `uname` in | ||
| + | Linux ) | ||
| + | CPU_REPORT=`iostat -c $INTERVAL_SEC $NUM_REPORT | sed -e ' | ||
| + | CPU_REPORT_SECTIONS=`echo ${CPU_REPORT} | grep ';' | ||
| + | CPU_USER=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_NICE=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_SYSTEM=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_IOWAIT=`echo $CPU_REPORT | cut -d ";" | ||
| + | if [ ${CPU_REPORT_SECTIONS} -ge 6 ]; then | ||
| + | CPU_STEAL=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_IDLE=`echo $CPU_REPORT | cut -d ";" | ||
| + | NAGIOS_DATA=" | ||
| + | else | ||
| + | CPU_IDLE=`echo $CPU_REPORT | cut -d ";" | ||
| + | NAGIOS_DATA=" | ||
| + | fi | ||
| + | |||
| + | # Bail out possible under certain situations | ||
| + | if [[ ${#BAIL[*]} -gt 0 ]]; then | ||
| + | BC_CPU=$(nproc) | ||
| + | o=0 | ||
| + | while [ ${o} -lt ${#BAIL[*]} ]; do | ||
| + | BAIL_CPU[${o}]=$(echo " | ||
| + | BAIL_PROCESS[${o}]=$(echo " | ||
| + | BC_PROCESS=$(ps aux | grep " | ||
| + | if [[ ${BAIL_CPU[${o}]} -eq ${BC_CPU} && ${BC_PROCESS} -gt 0 ]]; then | ||
| + | echo "CPU STATISTICS OK - bailing out because of matched bailout patterns - ${NAGIOS_DATA}" | ||
| + | exit $STATE_OK | ||
| + | fi | ||
| + | let o++ | ||
| + | done | ||
| + | fi | ||
| + | |||
| + | ;; | ||
| + | AIX ) CPU_REPORT=`iostat -t $INTERVAL_SEC $NUM_REPORT | sed -e ' | ||
| + | CPU_USER=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_SYSTEM=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_IOWAIT=`echo $CPU_REPORT | cut -d ";" | ||
| + | CPU_IDLE=`echo $CPU_REPORT | cut -d ";" | ||
| + | NAGIOS_DATA=" | ||
| + | ;; | ||
| + | SunOS ) CPU_REPORT=`iostat -c $INTERVAL_SEC $NUM_REPORT | tail -1` | ||
| + | CPU_USER=`echo $CPU_REPORT | awk '{ print $1 }'` | ||
| + | CPU_SYSTEM=`echo $CPU_REPORT | awk '{ print $2 }'` | ||
| + | CPU_IOWAIT=`echo $CPU_REPORT | awk '{ print $3 }'` | ||
| + | CPU_IDLE=`echo $CPU_REPORT | awk '{ print $4 }'` | ||
| + | NAGIOS_DATA=" | ||
| + | ;; | ||
| + | HP-UX) CPU_REPORT=`$SAR $INTERVAL_SEC $NUM_REPORT | grep Average` | ||
| + | CPU_USER=`echo $CPU_REPORT | awk '{ print $2 }'` | ||
| + | CPU_SYSTEM=`echo $CPU_REPORT | awk '{ print $3 }'` | ||
| + | CPU_IOWAIT=`echo $CPU_REPORT | awk '{ print $4 }'` | ||
| + | CPU_IDLE=`echo $CPU_REPORT | awk '{ print $5 }'` | ||
| + | NAGIOS_DATA=" | ||
| + | ;; | ||
| + | # MacOS X test | ||
| + | # Darwin ) CPU_REPORT=`iostat -w $INTERVAL_SEC -c $NUM_REPORT | tail -1` | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | # ;; | ||
| + | *) echo " | ||
| + | exit $STATE_UNKNOWN | ||
| + | ;; | ||
| + | esac | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # Add for integer shell issue | ||
| + | CPU_USER_MAJOR=`echo $CPU_USER| cut -d " | ||
| + | CPU_SYSTEM_MAJOR=`echo $CPU_SYSTEM | cut -d " | ||
| + | CPU_IOWAIT_MAJOR=`echo $CPU_IOWAIT | cut -d " | ||
| + | CPU_IDLE_MAJOR=`echo $CPU_IDLE | cut -d " | ||
| + | # ----------------------------------------------------------------------------------------- | ||
| + | # Return | ||
| + | if [ ${CPU_USER_MAJOR} -ge $USER_CRITICAL_THRESHOLD ]; then | ||
| + | echo "CPU STATISTICS CRITICAL : ${NAGIOS_DATA}" | ||
| + | exit $STATE_CRITICAL | ||
| + | elif [ ${CPU_SYSTEM_MAJOR} -ge $SYSTEM_CRITICAL_THRESHOLD ]; then | ||
| + | echo "CPU STATISTICS CRITICAL : ${NAGIOS_DATA}" | ||
| + | exit $STATE_CRITICAL | ||
| + | elif [ ${CPU_IOWAIT_MAJOR} -ge $IOWAIT_CRITICAL_THRESHOLD ]; then | ||
| + | echo "CPU STATISTICS CRITICAL : ${NAGIOS_DATA}" | ||
| + | exit $STATE_CRITICAL | ||
| + | elif [ ${CPU_USER_MAJOR} -ge $USER_WARNING_THRESHOLD ] && [ ${CPU_USER_MAJOR} -lt $USER_CRITICAL_THRESHOLD ]; then | ||
| + | echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}" | ||
| + | exit $STATE_WARNING | ||
| + | elif [ ${CPU_SYSTEM_MAJOR} -ge $SYSTEM_WARNING_THRESHOLD ] && [ ${CPU_SYSTEM_MAJOR} -lt $SYSTEM_CRITICAL_THRESHOLD ]; then | ||
| + | echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}" | ||
| + | exit $STATE_WARNING | ||
| + | elif [ ${CPU_IOWAIT_MAJOR} -ge $IOWAIT_WARNING_THRESHOLD ] && [ ${CPU_IOWAIT_MAJOR} -lt $IOWAIT_CRITICAL_THRESHOLD ]; then | ||
| + | echo "CPU STATISTICS WARNING : ${NAGIOS_DATA}" | ||
| + | exit $STATE_WARNING | ||
| + | else | ||
| + | echo "CPU STATISTICS OK : ${NAGIOS_DATA}" | ||
| + | exit $STATE_OK | ||
| + | fi | ||
| + | |||
| + | echo "CPU STATISTICS UNKNOWN: Should never reach this." | ||
| + | exit $STATE_UNKNOWN | ||
| + | ~~~ | ||
| + | |||
