141 lines
5.2 KiB
Plaintext
141 lines
5.2 KiB
Plaintext
|
#!/bin/bash -e
|
||
|
#
|
||
|
# Plugin munin affichant le nombre de threads occupées, disponibles et maximales de la JVM de tomcat.
|
||
|
#
|
||
|
## Dépendances
|
||
|
# xmlstarlet
|
||
|
# wget
|
||
|
#
|
||
|
## Configuration
|
||
|
#
|
||
|
# Pour pouvoir lire le mot de passe automatiquement, le script doit tourner
|
||
|
# sous l'utilisateur tomcat55. Dans /etc/munin/plugin-conf.d/munin-node,
|
||
|
# ajouter :
|
||
|
#
|
||
|
# [tomcat_*]
|
||
|
# user tomcat55
|
||
|
#
|
||
|
# Autres options disponibles :
|
||
|
#
|
||
|
# env.status_url : URL vers la page « status » en XML du manager
|
||
|
# env.http_username : Utilisateur HTTP
|
||
|
# env.users_filename : Chemin vers le fichier tomcat-users.xml
|
||
|
#
|
||
|
##
|
||
|
|
||
|
TOMCAT_USERS=${users_filename:-'/etc/tomcat5.5/tomcat-users.xml'}
|
||
|
USER=${http_username:-'munin'}
|
||
|
URLS=( ${status_url:-'http://localhost/manager/status?XML=true https://localhost/manager/status?XML=true http://localhost/manager/status?XML=true'} )
|
||
|
|
||
|
WARNING=80
|
||
|
CRITICAL=90
|
||
|
|
||
|
#/////////////////////////////////////////////////////////////////////////////////
|
||
|
# Affiche un message d'erreur et termine le script en renvoyant le code d'erreur 1
|
||
|
#
|
||
|
# @param Message à afficher
|
||
|
#/////////////////////////////////////////////////////////////////////////////////
|
||
|
die(){
|
||
|
echo "$1" >&2
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
#////////////////////////////////////////////////////////////////////////////
|
||
|
# Récupère le mot de passe de l'utilisateur $1 contenu dans le fichier XML $2
|
||
|
#
|
||
|
# @param in $1 Nom de l'utilisateur
|
||
|
# @param in $2 Fichier XML contenant les utilisateurs Tomcat
|
||
|
# @stdout Mot de passe de l'utilisateur
|
||
|
#////////////////////////////////////////////////////////////////////////////
|
||
|
getPassword(){
|
||
|
local PASSWORD=$(xmlstarlet sel -t -m "tomcat-users/user[@username='$1']" -v "@password" "$2" 2> /dev/null)
|
||
|
[[ -z $PASSWORD ]] && die "Aucun mot de passe trouvé dans le fichier « $2 » pour le compte « $1 » !"
|
||
|
echo $PASSWORD
|
||
|
}
|
||
|
|
||
|
#//////////////////////////////////////////////////////
|
||
|
# Récupère la page en XML contenant le statut de la JVM
|
||
|
#
|
||
|
# @param in $1 Login pour accéder à la page de statut
|
||
|
# @param in $2 Mot de passe
|
||
|
# @param in $3..$n URL à tester
|
||
|
#//////////////////////////////////////////////////////
|
||
|
getStatusPage(){
|
||
|
local USER="$1"
|
||
|
local PASSWORD="$2"
|
||
|
while [[ $# -gt 2 ]]; do
|
||
|
local STATUS=$(wget -O- -q --no-check-certificate --http-user "$USER" --http-password "$PASSWORD" "$3")
|
||
|
[[ -n $STATUS ]] && {
|
||
|
echo $STATUS
|
||
|
return
|
||
|
}
|
||
|
shift
|
||
|
done
|
||
|
}
|
||
|
|
||
|
#///////////////////////////////////////
|
||
|
# Affiche le nombre maximal de threads
|
||
|
#
|
||
|
# @param in $1 Page de statut de la JVM
|
||
|
# @stdout Nombre maximal de threads
|
||
|
#///////////////////////////////////////
|
||
|
getMaxThreads(){
|
||
|
local MAX_THREADS=$(xmlstarlet sel -t -m "status/connector/threadInfo" -v "@maxThreads" <<< "$1" 2> /dev/null)
|
||
|
[[ -z $MAX_THREADS ]] && die "Impossible de trouver le nombre maximal de threads !"
|
||
|
echo $MAX_THREADS
|
||
|
}
|
||
|
|
||
|
#///////////////////////////////////////////////////////////////////////////
|
||
|
# Affiche la configuration du plugin
|
||
|
#
|
||
|
# @param in $1 Nombre maximal de threads
|
||
|
# @param in $2 Pourcentage à utiliser pour définir les « warnings » [0-100]
|
||
|
# @param in $3 Pourcentage à utiliser pour définir les « criticals » [0-100]
|
||
|
# @stdout Configuration du plugin
|
||
|
#///////////////////////////////////////////////////////////////////////////
|
||
|
showConfig(){
|
||
|
local TMP=$(echo -e {maxThreads,currentThreadCount,currentThreadsBusy}.{'type GAUGE','min 0','draw AREA'}"\n")
|
||
|
echo "graph_category Tomcat
|
||
|
graph_title Tomcat Threads
|
||
|
graph_info nombre de threads occupées, disponibles et maximales de la JVM de tomcat
|
||
|
graph_vlabel Threads
|
||
|
$TMP
|
||
|
maxThreads.label maxThreads
|
||
|
currentThreadCount.label currentThreadCount
|
||
|
currentThreadsBusy.label currentThreadsBusy
|
||
|
currentThreadCount.warning $(($1 * $2 / 100))
|
||
|
currentThreadCount.critical $(($1 * $3 / 100))
|
||
|
" | sed -r 's/^\s+//'
|
||
|
exit 0
|
||
|
}
|
||
|
|
||
|
#////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
# Affiche les données sur le nombre de threads occupées, disponibles et maximales de la JVM de tomcat
|
||
|
#
|
||
|
# @param in $1 Page de statut de la JVM
|
||
|
# @stdout Données sur le nombre de threads occupées, disponibles et maximales de la JVM de tomcat
|
||
|
#////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
|
showData(){
|
||
|
xmlstarlet sel -t -m "status/connector/threadInfo" \
|
||
|
-o "currentThreadCount.value " -v "@currentThreadCount" -n \
|
||
|
-o "currentThreadsBusy.value " -v "@currentThreadsBusy" -n \
|
||
|
-o "maxThreads.value " -v "@maxThreads" \
|
||
|
<<< "$1" #2> /dev/null
|
||
|
}
|
||
|
|
||
|
# Le fichier $TOMCAT_USERS n'est pas lisible => on quitte
|
||
|
[[ ! -r $TOMCAT_USERS ]] && die "Impossible de lire le fichier $TOMCAT_USERS !"
|
||
|
|
||
|
# On récupère le mot de passe de l'utilisateur $USER
|
||
|
PASSWORD=$(getPassword $USER $TOMCAT_USERS)
|
||
|
|
||
|
# On récupère la page de statut de la JVM de tomcat
|
||
|
STATUS_PAGE=$(getStatusPage $USER $PASSWORD $URLS)
|
||
|
[[ -z $STATUS_PAGE ]] && die 'Erreur : impossible de récupérer la page de statut de Tomcat !' ;
|
||
|
|
||
|
# On affiche la configuration du plugin
|
||
|
[[ $1 == 'config' ]] && showConfig $(getMaxThreads "$STATUS_PAGE") $WARNING $CRITICAL
|
||
|
|
||
|
# On affiche les données du plugin
|
||
|
showData "$STATUS_PAGE"
|