/
jvm-thread-info
140 lines (127 loc) · 5.23 KB
/
jvm-thread-info
1
2
3
4
5
6
7
8
9
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/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"