Script bash para estadísticas de Apache

Hacker

Aquí dejo otro interesante script Bash para ver estadísticas de consumo de RAM (cantidad de memoria ocupada, memoria disponible, etc) y conexiones de nuestro servidor Apache. Leído en http://blog.desdelinux.net/script-bash-para-ver-estadisticas-de-consumo…, comparto por que era exactamente lo que necesitaba para mi servidor.

script bash linux apache estadisticas

#!/bin/bash

# Definimos la función
function doStat()
{
# Define variables
# Iniciación de variables que vamos a usar
  cnt=0 
  cpl=0
  di1=1
  di2=$((1024*1000))
  di3=1024
  max=0
  statusbar=38
  tot=0
  ty1="Mb"
  ty2="Mb"
  ty3="Mb"
  ty4="Mb"
  ty5="Mb"

# Compruebo si estamos en un servidor con cPanel instalado, ya hay ligeras variaciones en el formato de "TOP"
# Aquí vemos una sentencia condicional, siempre empieza por if, hay que observar que despúes del corchete "[" siempre hay que dejar un espacio. Igualmente, hay que dejar un espacio antes del corchete de cierre.
  if [ -d /usr/local/cpanel ]; then
    cpl=1
    di1=100
  fi
# Cerramos la sentencia con "fi"
# Comprobar si la memoria encontrada en top contiene el caracter "m" para saber que si los resultados se presentan en Mb o Kb
  mck=`top -b -c -n 1|grep -E "apache|httpd"|awk '{print$6}'|grep -c m`
  if [ $mck -ne 0 ]; then
    di1=1
  fi
# Cargamos en la variable fre la memoria disponible
  fre=`grep -E "^MemFree:" /proc/meminfo|awk '{print$2}'`
# Cargamos en la variable total la memoria instalada
  total=`grep -E "^MemTotal:" /proc/meminfo|awk '{print$2}'`

# Cargamos en mem la memoria usada por Apache. La sacamos de la función top.
  mem=`top -b -c -n 1|grep -E "apache|httpd"|grep -v grep | awk '{print$6}'|sed -e 's/[a-zA-Z]//g'`

# Bucle para mirar cada proceso y calcular ( por proceso )
# avg - media
# max - máxima memoria usada
# tot - total de memoria usada

  for m2 in $mem
  do
# Comprobamos si la memoria es un valor entero o un valor real. Aquí usamos una expresión regular en la condicional.
    if [[ $m2 =~ ^[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
#IFS es el valor interno de Bash para el separador de variables internas
      OIFS=IFS
      IFS='.'
      m2=($m2)
      IFS=$OIFS
# La parte real del número la guardo en m1
      m1=${m2[1]}
# La parte entera la guardo en m2
      m2=${m2[0]}
# Miramos el número de caracteres que hay en la parte real. Para hacer las conversiones
      m3=${#m1}
      m4=10
      if [ $m3 -eq 2 ]; then  m4=100; fi
      if [ $m3 -eq 3 ]; then  m4=1000; fi
# Convertimos a decimal
      m3=$(((m1*1024)/m4))
# Calculamos tamaño del decimal
      m2=$(((m2*1024)+m3))
    fi
# Fin de la comprobación de números reales
    m=$((m2/di1))
# Cargamos en max el proceso que más memoria ocupa
    if [ $m -gt $max ]; then
      max=$m
    fi
# Incrementamos contador y total
    cnt=$((cnt+1))
    tot=$((tot+m))
    avg=$((tot/cnt))
  done
# Fin del bucle
mxu=$((tot*1024))

# Comprobamos la media y evitamos la división por cero
  if [ $avg -eq 0 ]; then
    avg=1
  fi

# Obtenemos el número total de los procesos de apache
# escuchando o conectado
  cnt=`lsof -i :80|grep -iE "esta|ist|esc"|wc -l`

# Calculamos los procesos disponibles de la máquina
  ava=$(((fre/avg)/100))
  wst=$(((fre/max)/100))
# Aquí usamos BC. Necesitamos un número real y bash no permite operaciones con estos de forma interna
  pct=`echo "scale=2;($fre/$total)*100"|bc`
  out=`echo "scale=2;($pct/100)*$statusbar"|bc|awk -F\. '{print$1}'`

# Ajustamos para cPanel si es necesario
  if [ $cpl ] && [ "$out" == '' ]; then
    out=0
  fi

# Calculamos el uso de la memoria y convertimos a Gb si es necesario
  if [ $fre -ge $di2 ]; then
    ty1="Gb"
    fre=`echo "scale=2;$fre/$di2"|bc`
  else
    if [ $fre -ge $di3 ]; then
      fre=`echo "scale=2;$fre/$di3"|bc`
    fi
  fi
  if [ $mxu -ge $di2 ]; then
    ty2="Gb"
    mxu=`echo "scale=2;$mxu/$di2"|bc`
  else
    if [ $mxu -ge $di3 ]; then
      mxu=`echo "scale=2;$mxu/$di3"|bc`
    fi
  fi
  if [ $total -ge $di2 ]; then
    ty3="Gb"
    total=`echo "scale=2;$total/$di2"|bc`
  fi
  if [ $avg -ge $di2 ]; then
    ty4="Gb"
    avg=`echo "scale=2;$avg/$di2"|bc`
  fi
  if [ $max -ge $di2 ]; then
    ty5="Gb"
    max=`echo "scale=2;$max/$di2"|bc`
  fi

# Bucle para mostrar una barra de estado
  sloop=$statusbar
  statusbar=$((statusbar+3))
  nline=`seq -s "=" $statusbar|sed 's/[0-9]//g'`

# Mostramos resultados
  printf "%s\n" $nline
  printf "Apache processes and memory usage.\n"
  printf "%s\n" $nline
  printf "Total installed memory: %s%s\n" $total $ty3
  printf "Availiable memory:      %s%s\n" $fre $ty1
  printf "Free percentile:        %s\45\n" $pct

# Mostramos la memoria usada en la barra de estado. Observamos que en el bucle while, los corchetes llevan sus espacios después y antes, como en el if que hemos descrito antes.
  printf "Status bar:\n|"
  while [ $sloop -ge 1 ]; do
    cc="-"
    if [ $sloop -ge $out ]; then
      cc="+"
    fi
    printf "%s" $cc
    sloop=$((sloop-1))
  done
  printf "|\n"

  printf "%s\n" $nline
  printf "Current usage\n"
  printf "%s\n" $nline
  printf "Current processes: %d\n" $cnt
  printf "Average memory:\t   %s%s\n" $avg $ty4
  printf "Maximum memory:\t   %s%s\n" $max $ty5
  printf "Overall memory:\t   %s%s\n" $mxu $ty2
  printf "%s\n" $nline
  printf "Projected usage\n"
  printf "%s\n" $nline
  printf "Concurrent best:  %d more connection(s)\n" $ava
  printf "Concurrent worst: %d more connection(s)\n" $wst
  printf "%s\n" $nline
}
# Fin de la función
# Ejecutamos la función
doStat

Doncs bé això és tot, espere que trobes útil aquest article i que et motive a compartir els teus trucs, els teus coneixements i els teus experiments amb el Programari Lliure. Pensa-ho, va, que la Comunitat del Programari Lliure va creixent gràcies a la documentació, el disseny, la formació o la programació, sigues part de la Comunitat :-)

La cultura i la lliure circulació de les idees és l'arma més efectiva contra les dictadures del pensament i contra la ignorància.

Utilitats

NAVEGACIÓ SENSE RATOLÍ

- Tab següent enllaç.
- Shift+Tab anterior enllaç.
- Enter activa l'enllaç.
- Alt+esquerra anar arrere.

CONTRAST DE COLORS

Accessibilitat - Color Negre
Accessibilitat - Color Groc
Accessibilitat - Color Verd

Accessibilitat - Color Blau
Accessibilitat - Color Crema
Accessibilitat - Color Blanc

 

PORTADES ALTERNATIVES