Benutzer-Werkzeuge

Webseiten-Werkzeuge


systembelastung_ermitteln

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
systembelastung_ermitteln [2023-05-18 17:31:21] – [belastung.sh] manfredsystembelastung_ermitteln [2023-05-18 17:35:16] (aktuell) – [Abfrage] manfred
Zeile 1: Zeile 1:
 +====== Systembelastung ermitteln ======
 +
 +===== Werkzeug =====
 +
 +==== vmstat -a ====
 +
 +  # vmstat -a 1 10
 +  procs ------------memory----------- ---swap-- -----io---- -system-- ----cpu-----
 +    b   swpd   free   inact  active   si   so    bi    bo   in   cs us sy  id wa
 +    0   5372  54552 2309996 4849848    0    0   269    28    0    0  1  0  98  0
 +    0   5372  54552 2310040 4849880    0    0    28      312  450  0  0 100  0
 +    0   5372  54552 2310040 4849880    0    0    16      184  234  0  0 100  0
 +    0   5372  54552 2310036 4849884    0    0          126  141  0  0 100  0
 +    0   5372  54552 2310036 4849884    0    0          179  288  0  0 100  0
 +    0   5372  54552 2310036 4849884    0    0    12      126  178  0  0 100  0
 +    0   5372  54552 2310080 4849896    0    0    12      143  217  0  0 100  0
 +    0   5372  54544 2310096 4849940    0    0    28   688  586 1114  0  0  99  0
 +    0   5372  54552 2310088 4849936    0    0          123  124  0  0 100  0
 +    0   5372  54552 2310100 4849936    0    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}
 +