Scripts:rapport min modJK

De Lowgeek wiki

Sommaire

Bash.png

Rapport ModJK

Ce script ressemble beaucoup à celui-ci: rapport modjk, mais fait un rapport minutes par minutes en générant un fichier csv.

Ce script fonctionne sur une machine tierce sur la quelle sont transférés les logs des serveur web.

Ce script est donc à adapter au besoin



<syntaxhighlight lang="bash">

  1. !/bin/bash
  2. erreur404
  1. DEFINITIONS DES VARIABLES


if [[ "${1}" == "-h" ]] then echo " Pour éxécuter le rapport pour la journée d'hier de 00H à 08H:

${0}

Pour indiquer des dates et horaires précis:

${0} annee jour mois heure_du_début heure_de_fin

exemple: ${0} 2012 24 01 00 08"

exit 0

fi

if [[ "${1}" != "" ]] then ANNEE=${1} JOUR_DEB=${2} MOIS_NUM=${3} START_HEURE_DEB=${4} STOP_HEURE_FIN=${5}



else ANNEE=`date --date 'yesterday' "+%Y"` MOIS_NUM=`date --date 'yesterday' "+%m"` JOUR_DEB=`date --date 'yesterday' "+%d"` START_HEURE_DEB=00 STOP_HEURE_FIN=08 fi

case "${MOIS_NUM}" in

    "01")

MOIS_DEB=Jan ;;

    "02")

MOIS_DEB=Feb ;;

    "03")

MOIS_DEB=Mar ;;

    "04")

MOIS_DEB=Apr ;;

    "05")

MOIS_DEB=May ;;

    "06")

MOIS_DEB=Jun ;;

    "07")

MOIS_DEB=Jul ;;

    "08")

MOIS_DEB=Aug ;;

    "09")

MOIS_DEB=Sep ;;

    "10")

MOIS_DEB=Oct ;;

    "11")

MOIS_DEB=Nov ;;

    "12")

MOIS_DEB=Dec ;;

    *) echo "erreur dans la définition du mois"; 

#exit 1 ;; esac

SERVEURS='webserveur1 webserveur2' LOGDIR=/tmp/`date +%d-%m-%Y` SVN_URL=https://login:password@svn.mondomain.com/modJK/workers.properties



  1. DEFINITIONS DES FONCTIONS

function test-heure () { case "${1}" in

    "09"|"10"|"11"|"12"|"13"|"14"|"15"|"16"|"17"|"18"|"19"|"20"|"21"|"22")

HEURE=`expr $1 + 1` ;;

    "00"|"01"|"02"|"03"|"04"|"05"|"06"|"07"|"08")
               HEURE=0`expr $1 + 1`

;;

    "23"|"")

HEURE=00 ;;

    *) echo "erreur dans la définition de l'heure"; 

#exit 1 ;; esac }

function define-time () { case "${1}" in

    "09"|"10"|"11"|"12"|"13"|"14"|"15"|"16"|"17"|"18"|"19"|"20"|"21"|"22"|"23"|"24"|"25"|"26"|"27"|"28"|"29"|"30"|"31"|"32"|"33"|"34"|"35"|"36"|"37"|"38"|"39"|"40"|"41"|"42"|"43"|"44"|"45"|"46"|"47"|"48"|"49"|"50"|"51"|"52"|"53"|"54"|"55"|"56"|"57"|"58")

MIN=`expr $1 + 1` HEURE=${2} ;;

    "00"|"01"|"02"|"03"|"04"|"05"|"06"|"07"|"08")
               MIN=0`expr $1 + 1`

HEURE=${2} ;;

    "59")

MIN=00 test-heure ${2} ;;

    "")

MIN=00 ;;

    *) echo "erreur dans la définition des minutes"; 

#exit 1 ;; esac }


function test-min-fin () { HEURE_FIN=${HEURE_FIN_COURT}:${MIN_FIN_COURT}:${SEC_FIN_COURT} fgrep -a -i "${HEURE_FIN}" ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} > /dev/null TEST_TIME=${?} while [[ "${TEST_TIME}" != "0" ]] && [[ "${SEC_FIN_COURT}" != "00" ]] do if [[ "${SEC_FIN_COURT}" == "00" ]]

                       then
                               MIN_FIN_COURT=`expr ${MIN_FIN_COURT} - 1`
                               SEC_FIN_COURT=59

else SEC_FIN_COURT=`expr ${SEC_FIN_COURT} - 1`

               fi
               case "${MIN_FIN_COURT}" in
               "9"|"8"|"7"|"6"|"5"|"4"|"3"|"2"|"1"|"0") MIN_FIN_COURT=0${MIN_FIN_COURT}
                       ;;
               esac

case "${SEC_FIN_COURT}" in

    		"9"|"8"|"7"|"6"|"5"|"4"|"3"|"2"|"1"|"0") SEC_FIN_COURT=0${SEC_FIN_COURT}
       		;;

esac HEURE_FIN=${HEURE_FIN_COURT}:${MIN_FIN_COURT}:${SEC_FIN_COURT} fgrep -a -i "${HEURE_FIN}" ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} > /dev/null TEST_TIME=${?} done }


function test-min-deb () { HEURE_DEB=${HEURE_DEB_COURT}:${MIN_DEB_COURT}:${SEC_DEB_COURT} fgrep -a -i "${HEURE_DEB}" ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} > /dev/null TEST_TIME=${?} while [[ "${TEST_TIME}" != "0" ]] && [[ "${SEC_DEB_COURT}" != "59" ]] do if [[ "${SEC_DEB_COURT}" == "59" ]] then MIN_DEB_COURT=`expr ${MIN_DEB_COURT} + 1` SEC_DEB_COURT=00 else SEC_DEB_COURT=`expr ${SEC_DEB_COURT} + 1` fi

               case "${MIN_DEB_COURT}" in
               "9"|"8"|"7"|"6"|"5"|"4"|"3"|"2"|"1"|"0") MIN_DEB_COURT=0${MIN_DEB_COURT}
                       ;;
               esac
               case "${SEC_DEB_COURT}" in
               "9"|"8"|"7"|"6"|"5"|"4"|"3"|"2"|"1"|"0") SEC_DEB_COURT=0${SEC_DEB_COURT}
                       ;;
               esac

HEURE_DEB=${HEURE_DEB_COURT}:${MIN_DEB_COURT}:${SEC_DEB_COURT} fgrep -a -i "${HEURE_DEB}" ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} > /dev/null TEST_TIME=${?} done }

  1. EXECUTION

[ -d ${LOGDIR} ] && rm -rf ${LOGDIR} || mkdir ${LOGDIR} cd ${LOGDIR} wget ${SVN_URL} WORKER_LIST=$(fgrep -a -i worker.list /${LOGDIR}/workers.properties | sed 's/worker.list\=//g' | sed 's/\,/\ /g')

HEADER=HEURE\; for ELEMENTS in ${WORKER_LIST} do HEADER=${HEADER}${ELEMENTS}\; done

for SERVEUR in ${SERVEURS} do [ -f ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}.gz ] && rm -rf ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}.gz [ -f ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB} ] && rm -rf ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}.gz cp /data/logs-work/${SERVEUR}/apache/${ANNEE}${MOIS_NUM}${JOUR_DEB}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}.gz ${LOGDIR} gunzip mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}.gz mv mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB} mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} echo ${HEADER} > ${LOGDIR}/list_error_${SERVEUR}.csv HEURE_DEB_COURT=${START_HEURE_DEB} HEURE_FIN_COURT=${START_HEURE_DEB}

  		MIN_DEB_COURT=00
  		MIN_FIN_COURT=00

while [[ "${HEURE_DEB_COURT}" != "${STOP_HEURE_FIN}" ]] do HEURE_DEB_COURT=${HEURE_DEB_COURT} HEURE_FIN_COURT=${HEURE_FIN_COURT} MIN_DEB_COURT=${MIN_DEB_COURT} MIN_FIN_COURT=${MIN_FIN_COURT} SEC_DEB_COURT=00 SEC_FIN_COURT=59 test-min-deb test-min-fin DEBUT_LIGNE=$(awk '{if ($2 ~ /^'${MOIS_DEB}'/ && $3 ~ /^'${JOUR_DEB}'/ && $4 ~ /^'${HEURE_DEB}'/ ){print NR}}' < ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} | head -1) FIN_LIGNE=$(awk '{if ($2 ~ /^'${MOIS_DEB}'/ && $3 ~ /^'${JOUR_DEB}'/ && $4 ~ /^'${HEURE_FIN}'/ ){print NR}}' < ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} | tail -1) awk '{if (NR >= '$DEBUT_LIGNE' && NR <= '$FIN_LIGNE' ){print $0}}' < ${LOGDIR}/mod_jk_log.${ANNEE}${MOIS_NUM}${JOUR_DEB}_${SERVEUR} > ${LOGDIR}/${JOUR_DEB}_${MOIS_DEB}_${HEURE_FIN}_${SERVEUR}.log echo "" echo "RECUPERATION DES ERREURS de ${HEURE_DEB} a ${HEURE_FIN} POUR ${SERVEUR}" echo "" ROW=${HEURE_DEB}\; for ELEMENTS in ${WORKER_LIST} do ROW=${ROW}$(fgrep -a -i "${ELEMENTS}" ${LOGDIR}/${JOUR_DEB}_${MOIS_DEB}_${HEURE_FIN}_${SERVEUR}.log | grep "error" | wc -l)\; done

echo "${ROW}" >> ${LOGDIR}/list_error_${SERVEUR}.csv

define-time ${MIN_DEB_COURT} ${HEURE_DEB_COURT} MIN_DEB_COURT=${MIN} HEURE_DEB_COURT=${HEURE} define-time ${MIN_FIN_COURT} ${HEURE_FIN_COURT} MIN_FIN_COURT=${MIN} HEURE_FIN_COURT=${HEURE} done done

echo "cd ${LOGDIR}" </syntaxhighlight>