Skip to content

Commit 99f6979

Browse files
authored
Merge pull request munin-monitoring#934 from sumpfralle/jstat-plugins
jstat plugins: various improvements
2 parents 7e2f73b + 0ddc7e2 commit 99f6979

File tree

4 files changed

+292
-476
lines changed

4 files changed

+292
-476
lines changed

plugins/ceph/ceph_osd

+7-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
77
ceph_osd - Shows ceph OSD states (total configured, up and in)
88
9+
=head1 APPLICABLE SYSTEMS
10+
11+
Any host with ceph configured and "jq" being installed .
12+
913
=head1 AUTHOR
1014
1115
Mate Gabri <[email protected]>
@@ -46,7 +50,6 @@ fi
4650

4751
CEPH_STATUS=$(ceph -s --format=json)
4852

49-
echo "osds.value $(echo $CEPH_STATUS | jq '.osdmap.osdmap.num_osds')"
50-
echo "up.value $(echo $CEPH_STATUS | jq '.osdmap.osdmap.num_up_osds')"
51-
echo "in.value $(echo $CEPH_STATUS | jq '.osdmap.osdmap.num_in_osds')"
52-
53+
echo "osds.value $(echo "$CEPH_STATUS" | jq '.osdmap.osdmap.num_osds')"
54+
echo "up.value $(echo "$CEPH_STATUS" | jq '.osdmap.osdmap.num_up_osds')"
55+
echo "in.value $(echo "$CEPH_STATUS" | jq '.osdmap.osdmap.num_in_osds')"

plugins/jvm/jstat__gccount

+64-148
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/bin/bash
1+
#!/bin/sh
22
#
33
# Plugin for monitor JVM activity - GC Count -
44
#
@@ -22,9 +22,10 @@
2222
#
2323
# Target:
2424
#
25-
# Target Java Virtual Machine to monitor are:
26-
# Sun JDK 5.0 (http://java.sun.com/javase/) (default)
27-
# BEA JRockit 5.0 (http://dev2dev.bea.com/jrockit/)
25+
# Target Java Virtual Machine to monitor are:
26+
# Sun JDK 5.0 (http://java.sun.com/javase/)
27+
# Sun JDK 8.0 (http://java.sun.com/javase/)
28+
# BEA JRockit 5.0 (http://dev2dev.bea.com/jrockit/)
2829
#
2930
# Parameters:
3031
#
@@ -33,140 +34,74 @@
3334
# Config variables:
3435
#
3536
# pidfilepath - Which file path use. Defaults to '/var/run/jsvc.pid'
36-
# javahome - Defaults to '/usr/local/java/jdk'
37+
# javahome - override automatic detection of JRE directory
38+
# graphtitle - Title of the graph (defaults to PID file location)
3739
#
38-
DefaultPidFile="/var/run/jsvc.pid"
39-
DefaultJavaHome="/usr/local/java/jdk"
4040

41-
#
42-
# Environment Variables
43-
#
44-
if [ -z "${pidfilepath}" ]; then
45-
pidfilepath="${DefaultPidFile}"
46-
fi
41+
default_java_home=/usr/lib/jvm/default-java
42+
[ -e "$default_java_home" ] || default_java_home=/usr/local/java/jdk
4743

48-
if [ -z "${graphtitle}" ]; then
49-
graphtitle="${pidfilepath}"
50-
fi
44+
pidfilepath=${pidfilepath:-/var/run/jsvc.pid}
45+
graphtitle=${graphtitle:-$pidfilepath}
46+
JAVA_HOME=${javahome:-$default_java_home}
5147

52-
if [ -z "${javahome}" ]; then
53-
JAVA_HOME="${DefaultJavaHome}"
54-
else
55-
JAVA_HOME="${javahome}"
56-
fi
5748
export JAVA_HOME
5849

59-
#
60-
# Functions
61-
#
62-
chk_jdk()
63-
{
64-
isJRockit=`${JAVA_HOME}/bin/java -version 2>&1 | egrep -i 'jrockit'`
65-
if [ -n "${isJRockit}" ]; then
66-
JDK_TYPE="bea"
67-
else
68-
JDK_TYPE="sun"
69-
fi
70-
}
7150

72-
chk_version()
73-
{
74-
Version=`${JAVA_HOME}/bin/java -version 2>&1 | egrep '^java version' | awk '{print $3}' | sed -e 's/\"//g' | cut -d'_' -f 1`
75-
if [ "${Version}" != "1.5.0" ]; then
76-
return 1
77-
else
78-
return 0
51+
get_jdk_type() {
52+
local version
53+
if "${JAVA_HOME}/bin/java" -version 2>&1 | grep -qi 'jrockit'; then
54+
echo "bea"
55+
else
56+
version=$("${JAVA_HOME}/bin/java" -version 2>&1 | grep '^java version' | awk '{print $3}' | sed -e 's/\"//g' | cut -d'_' -f 1)
57+
if echo "$version" | grep -q '^1\.5\.'; then
58+
echo "sun15"
59+
else
60+
echo "sun"
61+
fi
7962
fi
8063
}
8164

82-
config_common()
83-
{
84-
echo 'graph_title GC Count' $graphtitle
85-
echo 'graph_args -l 0'
86-
echo 'graph_vlabel GC Count(times)'
87-
echo 'graph_total total'
88-
echo 'graph_info GC Count'
89-
echo 'graph_category virtualization'
90-
}
91-
92-
config_sun_jdk()
93-
{
94-
config_common
95-
96-
echo 'Young_GC.label Young_GC'
97-
echo 'Young_GC.min 0'
98-
echo 'Full_GC.label Full_GC'
99-
echo 'Full_GC.min 0'
10065

66+
print_config() {
67+
echo "graph_title GC Count $graphtitle"
68+
echo 'graph_args -l 0'
69+
echo 'graph_vlabel GC Count(times)'
70+
echo 'graph_total total'
71+
echo 'graph_info GC Count'
72+
echo 'graph_category virtualization'
73+
74+
echo 'Young_GC.label Young_GC'
75+
echo 'Young_GC.min 0'
76+
if [ "${JDK_TYPE}" = "bea" ]; then
77+
echo 'Old_GC.label Old_GC'
78+
echo 'Old_GC.min 0'
79+
else
80+
echo 'Full_GC.label Full_GC'
81+
echo 'Full_GC.min 0'
82+
fi
10183
}
10284

103-
config_bea_jdk()
104-
{
105-
config_common
10685

107-
echo 'Young_GC.label Young_GC'
108-
echo 'Young_GC.min 0'
109-
echo 'Old_GC.label Old_GC'
110-
echo 'Old_GC.min 0'
86+
print_stats() {
87+
local pid_num="$1"
88+
local awk_script
89+
if [ "${JDK_TYPE}" = "bea" ]; then
90+
# shellcheck disable=SC2016
91+
awk_script='{ YC = $4; OC = $5; print "Young_GC.value " YGC; print "Old_GC.value " FGC; }'
92+
elif [ "${JDK_TYPE}" = "sun15" ]; then
93+
# shellcheck disable=SC2016
94+
awk_script='{ YGC = $11; FGC = $13; print "Young_GC.value " YGC; print "Full_GC.value " FGC; }'
95+
else
96+
# example output of jstat for Java 1.8:
97+
# S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
98+
# 2048.0 2048.0 0.0 1344.0 694784.0 145013.5 1398272.0 414857.1 102400.0 96308.0 12544.0 11240.1 979 20.997 5 2.705 23.702
99+
# shellcheck disable=SC2016
100+
awk_script='{ YGC = $13; FGC = $15; print "Young_GC.value " YGC; print "Full_GC.value " FGC; }'
101+
fi
102+
"${JAVA_HOME}/bin/jstat" -gc "$pid_num" | tail -1 | awk "$awk_script"
111103
}
112104

113-
print_sun_stats()
114-
{
115-
${JAVA_HOME}/bin/jstat -gc ${PidNum} | tail -1 | awk \
116-
'{\
117-
S0C = $1; \
118-
S1C = $2; \
119-
S0U = $3; \
120-
S1U = $4; \
121-
EC = $5; \
122-
EU = $6; \
123-
OC = $7; \
124-
OU = $8; \
125-
PC = $9; \
126-
PU = $10; \
127-
YGC = $11; \
128-
YGCT = $12; \
129-
FGC = $13; \
130-
FGCT = $14; \
131-
GCT = $15; \
132-
\
133-
S0F = S0C - S0U; \
134-
S1F = S1C - S1U; \
135-
EF = EC - EU; \
136-
OF = OC - OU; \
137-
PF = PC - PU; \
138-
\
139-
print "Young_GC.value " YGC; \
140-
print "Full_GC.value " FGC; \
141-
}'
142-
}
143-
144-
print_bea_stats()
145-
{
146-
${JAVA_HOME}/bin/jstat -gc ${PidNum} | tail -1 | awk \
147-
'{\
148-
HeapSize = $1; \
149-
NurserySize = $2; \
150-
UsedHeapSize = $3; \
151-
YC = $4; \
152-
OC = $5; \
153-
YCTime = $6; \
154-
OCTime = $7; \
155-
GCTime = $8; \
156-
YCPauseTime = $9; \
157-
OCPauseTime = $10; \
158-
PauseTime = $11; \
159-
Finalizers = $12; \
160-
\
161-
print "Young_GC.value " YC; \
162-
print "Old_GC.value " OC;\
163-
}'
164-
}
165-
166-
#
167-
# common for all argument
168-
#
169-
chk_jdk
170105

171106
#
172107
# autoconf
@@ -178,13 +113,7 @@ if [ "$1" = "autoconf" ]; then
178113
exit 1
179114
fi
180115

181-
chk_version
182-
if [ $? != 0 ]; then
183-
echo "no (Java version is invalid)"
184-
exit 1
185-
fi
186-
187-
if [ ! -f "${pidfilepath}" -o ! -r "${pidfilepath}" ]; then
116+
if [ ! -f "${pidfilepath}" ] || [ ! -r "${pidfilepath}" ]; then
188117
echo "no (No such file ${pidfilepath} or cannot read ${pidfilepath}"
189118
exit 1
190119
fi
@@ -194,25 +123,12 @@ if [ "$1" = "autoconf" ]; then
194123
fi
195124

196125

197-
#
198-
# config
199-
#
200-
if [ "$1" = "config" ]; then
201-
if [ "${JDK_TYPE}" == "bea" ]; then
202-
config_bea_jdk
203-
else
204-
config_sun_jdk
205-
fi
206-
exit 0
207-
fi
126+
JDK_TYPE=$(get_jdk_type)
208127

209-
#
210-
# Main
211-
#
212-
PidNum=`cat ${pidfilepath}`
213128

214-
if [ "${JDK_TYPE}" == "bea" ]; then
215-
print_bea_stats
216-
else
217-
print_sun_stats
129+
if [ "$1" = "config" ]; then
130+
print_config
131+
exit 0
218132
fi
133+
134+
print_stats "$(cat "$pidfilepath")"

0 commit comments

Comments
 (0)