| Nächste Überarbeitung | Vorhergehende Überarbeitung |
| systembelastung_ermitteln [2016-04-12 22:50:02] – angelegt - Externe Bearbeitung 127.0.0.1 | systembelastung_ermitteln [2023-05-18 17:35:16] (aktuell) – [Abfrage] manfred |
|---|
| | ====== Systembelastung ermitteln ====== |
| | |
| | ===== Werkzeug ===== |
| | |
| | ==== vmstat -a ==== |
| | |
| | # vmstat -a 1 10 |
| | procs ------------memory----------- ---swap-- -----io---- -system-- ----cpu----- |
| | r b swpd free inact active si so bi bo in cs us sy id wa |
| | 0 0 5372 54552 2309996 4849848 0 0 269 28 0 0 1 0 98 0 |
| | 0 0 5372 54552 2310040 4849880 0 0 28 0 312 450 0 0 100 0 |
| | 0 0 5372 54552 2310040 4849880 0 0 16 0 184 234 0 0 100 0 |
| | 0 0 5372 54552 2310036 4849884 0 0 8 0 126 141 0 0 100 0 |
| | 0 0 5372 54552 2310036 4849884 0 0 0 0 179 288 0 0 100 0 |
| | 0 0 5372 54552 2310036 4849884 0 0 12 0 126 178 0 0 100 0 |
| | 0 0 5372 54552 2310080 4849896 0 0 12 0 143 217 0 0 100 0 |
| | 0 0 5372 54544 2310096 4849940 0 0 28 688 586 1114 0 0 99 0 |
| | 0 0 5372 54552 2310088 4849936 0 0 0 0 123 124 0 0 100 0 |
| | 0 0 5372 54552 2310100 4849936 0 0 4 0 160 113 0 0 100 0 |
| | |
| | - Spalte (procs - r): number of processes waiting for run time |
| | - Spalte (procs - b): number of processes in uninterruptible sleep |
| | - Spalte (memory - swpd): mem swap in use |
| | - Spalte (memory - free): mem free/idle |
| | - Spalte (memory - inact): mem inactive |
| | - Spalte (memory - active): mem active |
| | - Spalte (swap - si): swap read |
| | - Spalte (swap - so): swap write |
| | - Spalte (io - bi): io block in |
| | - Spalte (io - bo): io block out |
| | - Spalte (system - in): system interrupts |
| | - Spalte (system - cs): system context switches per second |
| | - Spalte (cpu - us): cpu user time |
| | - Spalte (cpu - sy): cpu system time |
| | - Spalte (cpu - id): cpu idle |
| | - Spalte (cpu - wa): cpu waiting for io |
| | |
| | |
| | ===== Abfrage ===== |
| | |
| | <file bash belastung.sh> |
| | #!/bin/bash |
| | |
| | # Linux |
| | |
| | ANZAHL="10" # Messzeit für vmstat, RX und TX |
| | # ${ANZAHL} x 3 = mind. Laufzeit dieses Scripts |
| | |
| | TICKER="$(echo "${ANZAHL}" | awk '{print 3+$1}')" |
| | VMSTAT="$(vmstat -a 1 ${TICKER} | tail -n1 | awk -v z=${ANZAHL} '{ab+=$1; bb+=$2; cb+=$3; db+=$4; eb+=$5; fb+=$6; gb+=$7; hb+=$8; ib+=$9; jb+=$10; kb+=$11; lb+=$12; mb+=$13; nb+=$14; ob+=$15; pb+=$16} END {print "number_of_processes_waiting_for_run_time="ab/z,"number_of_processes_in_uninterruptible_sleep="bb/z,"mem_swap_in_use="cb/z,"mem_free="db/z,"mem_inactive="eb/z,"mem_active="fb/z,"swap_read="gb/z,"swap_write="hb/z,"io_block_in="ib/z,"io_block_out="jb/z,"system_interrupts="kb/z,"system_context_switches_per_second="lb/z,"cpu_user_time="mb/z,"cpu_system_time="nb/z,"cpu_idle="ob/z,"cpu_waiting_for_io="pb/z}')" |
| | |
| | RXBPS="$(RXB="$(cat /sys/class/net/eth*/statistics/rx_bytes | awk '{z=$1;s+=z}END{print s}')";sleep ${ANZAHL};echo "$(cat /sys/class/net/eth*/statistics/rx_bytes | awk '{z=$1;s+=z}END{print s}') $RXB" | awk -v z=${ANZAHL} '{print "byte_je_sekunde_empfangen="($1-$2)/z}')" |
| | |
| | TXBPS="$(TXB="$(cat /sys/class/net/eth*/statistics/tx_bytes | awk '{z=$1;s+=z}END{print s}')";sleep ${ANZAHL};echo "$(cat /sys/class/net/eth*/statistics/tx_bytes | awk '{z=$1;s+=z}END{print s}') $TXB" | awk -v z=${ANZAHL} '{print "byte_je_sekunde_gesendet="($1-$2)/z}')" |
| | |
| | echo "hostname=$(hostname -f) ${VMSTAT} ${RXBPS} ${TXBPS} apache_processes=$(ps -ef | egrep '^www-data.*apache2 -k start' | wc -l) $(uptime | awk '{gsub(",","");print "load_average_1="$(NF-2),"load_average_5="$(NF-1),"load_average_15="$(NF)}')" | tr -s ' ' '\n' |
| | </file> |
| | |
| | |
| | ==== Ausgabe ==== |
| | |
| | hostname=test.domain.de |
| | number_of_processes_waiting_for_run_time=0 |
| | number_of_processes_in_uninterruptible_sleep=0 |
| | mem_swap_in_use=0 |
| | mem_free=131625 |
| | mem_inactive=38892.4 |
| | mem_active=23385.2 |
| | swap_read=0 |
| | swap_write=0 |
| | io_block_in=0 |
| | io_block_out=0 |
| | system_interrupts=3.6 |
| | system_context_switches_per_second=2 |
| | cpu_user_time=0 |
| | cpu_system_time=0 |
| | cpu_idle=10 |
| | cpu_waiting_for_io=0 |
| | byte_je_sekunde_empfangen=260.9 |
| | byte_je_sekunde_gesendet=377.1 |
| | apache_processes=10 |
| | load_average_1=0.02 |
| | load_average_5=0.06 |
| | load_average_15=0.02 |
| | |
| | |
| | ===== Datenbank gestützte Überwachung ===== |
| | |
| | ==== Datenbank, Tabelle und User anlegen ==== |
| | |
| | Datenbank anlegen: |
| | # echo "CREATE DATABASE belastungswaechter;" | mysql -uroot -p |
| | |
| | Tabelle anlegen: |
| | # echo "CREATE TABLE belastungswaechter (hostname VARCHAR(254) not NULL, number_of_processes_waiting_for_run_time DECIMAL(16,4), number_of_processes_in_uninterruptible_sleep DECIMAL(16,4), mem_swap_in_use DECIMAL(16,4), mem_free DECIMAL(16,4), mem_inactive DECIMAL(16,4), mem_active DECIMAL(16,4), swap_read DECIMAL(16,4), swap_write DECIMAL(16,4), io_block_in DECIMAL(16,4), io_block_out DECIMAL(16,4), system_interrupts DECIMAL(16,4), system_context_switches_per_second DECIMAL(16,4), cpu_user_time DECIMAL(16,4), cpu_system_time DECIMAL(16,4), cpu_idle DECIMAL(16,4), cpu_waiting_for_io DECIMAL(16,4), byte_je_sekunde_empfangen DECIMAL(16,4), byte_je_sekunde_gesendet DECIMAL(16,4), apache_processes DECIMAL(16,4), load_average_1 DECIMAL(16,4), load_average_5 DECIMAL(16,4), load_average_15 DECIMAL(16,4), startzeit_fuer_die_messung DATETIME);" | mysql -uroot -p belastungswaechter |
| | |
| | User anlegen: |
| | # echo "INSERT INTO user (host,user) VALUES ('%','bwaechter');" | mysql -uroot -p mysql |
| | # echo "FLUSH PRIVILEGES;" | mysql -uroot mysql |
| | |
| | dem User die nötigen Berechtigungen geben: |
| | # echo "REVOKE ALL ON *.* TO bwaechter;" | mysql -uroot -p mysql |
| | # echo "GRANT SELECT,INSERT ON * TO bwaechter IDENTIFIED BY 'geheim' WITH GRANT OPTION;FLUSH PRIVILEGES;" | mysql -uroot -p belastungswaechter |
| | |
| | |
| | ==== belastungswaechter.sh ==== |
| | |
| | #!/bin/bash |
| | |
| | ANZAHL="10" # Messzeit für vmstat, RX und TX |
| | # ${ANZAHL} x 3 = mind. Laufzeit dieses Scripts |
| | BELASTUNGSWAECHTER="$(awk -F':' '/:omrelp:/ {print $3}' /etc/rsyslog.d/50-default.conf)" # DB-Host |
| | BELASTUNGSUSER="bwaechter" # DB-User |
| | BELASTUNGSPASSWD="geheim" # DB-Passwd |
| | BELASTUNGSDB="belastungswaechter" # DB-Name |
| | BELASTUNGSTAB="belastungswaechter" # DB-Tabellenname |
| | STARTMESSUNG="$(date +'%F %T')" # Startzeit für die Messung |
| | PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin" |
| | |
| | if [ -z "${BELASTUNGSWAECHTER}" ] ; then |
| | exit 0 |
| | fi |
| | |
| | TICKER="$(echo "${ANZAHL}" | awk '{print 3+$1}')" |
| | VMSTAT="$(vmstat -a 1 ${TICKER} | tail -n${ANZAHL} | awk -v z=${ANZAHL} '{ab+=$1; bb+=$2; cb+=$3; db+=$4; eb+=$5; fb+=$6; gb+=$7; hb+=$8; ib+=$9; jb+=$10; kb+=$11; lb+=$12; mb+=$13; nb+=$14; ob+=$15; pb+=$16} END {print "number_of_processes_waiting_for_run_time="ab/z,"number_of_processes_in_uninterruptible_sleep="bb/z,"mem_swap_in_use="cb/z,"mem_free="db/z,"mem_inactive="eb/z,"mem_active="fb/z,"swap_read="gb/z,"swap_write="hb/z,"io_block_in="ib/z,"io_block_out="jb/z,"system_interrupts="kb/z,"system_context_switches_per_second="lb/z,"cpu_user_time="mb/z,"cpu_system_time="nb/z,"cpu_idle="ob/z,"cpu_waiting_for_io="pb/z}')" |
| | |
| | RXBPS="$(RXB="$(cat /sys/class/net/eth*/statistics/rx_bytes | awk '{z=$1;s+=z}END{print s}')";sleep ${ANZAHL};echo "$(cat /sys/class/net/eth*/statistics/rx_bytes | awk '{z=$1;s+=z}END{print s}') $RXB" | awk -v z=${ANZAHL} '{print "byte_je_sekunde_empfangen="($1-$2)/z}')" |
| | TXBPS="$(TXB="$(cat /sys/class/net/eth*/statistics/tx_bytes | awk '{z=$1;s+=z}END{print s}')";sleep ${ANZAHL};echo "$(cat /sys/class/net/eth*/statistics/tx_bytes | awk '{z=$1;s+=z}END{print s}') $TXB" | awk -v z=${ANZAHL} '{print "byte_je_sekunde_gesendet="($1-$2)/z}')" |
| | |
| | PARAM="" |
| | WERTE="" |
| | |
| | for SPALTE in $(echo "hostname=$(hostname -f) ${VMSTAT} ${RXBPS} ${TXBPS} apache_processes=$(ps -ef | egrep '^www-data.*apache2 -k start' | wc -l) $(uptime | awk '{gsub(",","");print "load_average_1="$(NF-2),"load_average_5="$(NF-1),"load_average_15="$(NF)}')") |
| | do |
| | PARAM+="$(echo ${SPALTE} | awk -F'=' '{print $1}'), " |
| | WERTE+="$(echo ${SPALTE} | awk -F'=' '{print "\""$2"\""}'), " |
| | done |
| | |
| | PARAREIHE="${PARAM} startzeit_fuer_die_messung" |
| | WERTREIHE="${WERTE} \"${STARTMESSUNG}\"" |
| | |
| | |
| | ### ab in die Datenbank mit den Daten |
| | echo "INSERT INTO ${BELASTUNGSTAB} (${PARAREIHE}) VALUES (${WERTREIHE})" | mysql -h ${BELASTUNGSWAECHTER} -u${BELASTUNGSUSER} -p${BELASTUNGSPASSWD} ${BELASTUNGSDB} |
| | |
| |