@@ -58,7 +58,7 @@ unset NAME
58
58
59
59
die () {
60
60
echo " $1 "
61
- exit " ${2:- 2} "
61
+ exit " ${2:- 2} "
62
62
}
63
63
64
64
while getopts " :m:M:H:T:t:K:N:n:o:c:w:h" arg; do
91
91
command -v jq & > /dev/null || die " CRITICAL: jq is required"
92
92
93
93
getJSON () {
94
- kubectl_command=$1
95
- api_path=$2
94
+ api_path=$1
96
95
97
96
if [ " $APISERVER " ]; then
98
97
if [ -z " $TOKEN " ]; then
@@ -115,7 +114,7 @@ getJSON() {
115
114
die " Could not access API"
116
115
fi
117
116
else
118
- data=$( eval timeout " $TIMEOUT " kubectl " $kubectl_command " -o json 2>&1 )
117
+ data=$( eval timeout " $TIMEOUT " kubectl get --raw " / $api_path " 2>&1 )
119
118
code=$?
120
119
if [ $code -gt 0 ]; then
121
120
if [ $code = 124 ]; then
@@ -131,17 +130,15 @@ getJSON() {
131
130
OUTPUT=" "
132
131
EXITCODE=0
133
132
134
- kubectl_ns=" --all-namespaces"
135
133
if [ " $NAMESPACE " ]; then
136
134
api_ns=" /namespaces/$NAMESPACE "
137
- kubectl_ns=" --namespace=$NAMESPACE "
138
135
fi
139
136
140
137
mode_apiserver () {
141
138
if [ -z " $APISERVER " ]; then
142
139
die " Apiserver URL should be defined in this mode"
143
140
fi
144
- data=$( getJSON " " " healthz" )
141
+ data=$( getJSON " healthz" )
145
142
[ $? -gt 0 ] && die " $data "
146
143
if [ " $data " = ok ]; then
147
144
OUTPUT=" OK. Kubernetes apiserver is healthy"
@@ -154,7 +151,7 @@ mode_apiserver() {
154
151
}
155
152
156
153
mode_nodes () {
157
- data=" $( getJSON " get nodes " " api/v1/nodes" ) "
154
+ data=" $( getJSON " api/v1/nodes" ) "
158
155
[ $? -gt 0 ] && die " $data "
159
156
nodes=($( echo " $data " | jq -r " .items[].metadata.name" ) )
160
157
@@ -189,7 +186,7 @@ mode_nodes() {
189
186
190
187
mode_unboundpvs () {
191
188
CRIT=${CRIT:- 5}
192
- data=$( getJSON " get pv " " api/v1/persistentvolumes" )
189
+ data=$( getJSON " api/v1/persistentvolumes" )
193
190
[ $? -gt 0 ] && die " $data "
194
191
declare -A pvsArr unboundPvsArr
195
192
while IFS=" =" read -r key value; do
@@ -224,66 +221,42 @@ mode_pvc() {
224
221
CRIT_ERROR=0
225
222
PVC_COUNT=0
226
223
227
- data=" $( getJSON " get nodes " " api/v1/nodes" ) "
224
+ data=" $( getJSON " api/v1/nodes" ) "
228
225
[ $? -gt 0 ] && die " $data "
229
226
nodes=($( echo " $data " | jq -r " .items[].metadata.name" ) )
230
-
231
- for node in " ${nodes[@]} " ; do
232
- data=" $( getJSON " get nodes" " api/v1/nodes/$node /proxy/stats/summary" ) "
233
- [ $? -gt 0 ] && die " $data "
234
- pods=($( echo " $data " | jq -r " .pods[].podRef.name" ) )
235
- for pod in " ${pods[@]} " ; do
236
- pod_volumes=" $( echo " $data " | jq -r " .pods[] | select(.podRef.name==\" $pod \" ) | .volume" 2> /dev/null) "
237
- [ " $pod_volumes " == " null" ] && continue
238
- for volumes in " ${pod_volumes[@]} " ; do
239
- volumes_list=" $( echo " $volumes " | jq -r " .[] | select(.pvcRef.name!=null)" ) "
240
- volumes_namespace=$( echo " $volumes_list " | jq -r " .pvcRef.namespace" | uniq)
241
- for pvc_volumes in " ${volumes_list[@]} " ; do
242
- [ -z " $pvc_volumes " ] && continue
243
- for volume_name in $( echo " $pvc_volumes " | jq -r " .name" ) ; do
244
- # volume_bytes_available=$(echo "$pvc_volumes" | jq -r ". | select(.name==\"$volume_name\") | .availableBytes")
245
- volume_bytes_capacity=$( echo " $pvc_volumes " | jq -r " . | select(.name==\" $volume_name \" ) | .capacityBytes" )
246
- volume_bytes_used=$( echo " $pvc_volumes " | jq -r " . | select(.name==\" $volume_name \" ) | .usedBytes" )
247
- # volume_inodes_free=$(echo "$pvc_volumes" | jq -r ". | select(.name==\"$volume_name\") | .inodesFree")
248
- volume_inodes_used=$( echo " $pvc_volumes " | jq -r " . | select(.name==\" $volume_name \" ) | .inodesUsed" )
249
- volume_inodes_capacity=$( echo " $pvc_volumes " | jq -r " . | select(.name==\" $volume_name \" ) | .inodes" )
250
- volume_bytes_utilization=$( echo " 100 * $volume_bytes_used / $volume_bytes_capacity " | bc)
251
- volume_inodes_utilization=$( echo " 100 * $volume_inodes_used / $volume_inodes_capacity " | bc)
252
-
253
- (( PVC_COUNT++ ))
254
-
255
- if [ " $volume_bytes_utilization " -gt " $WARN " ] && [ " $volume_bytes_utilization " -lt " $CRIT " ]; then
256
- OUTPUT=" ${OUTPUT} High storage utilization on pvc $volume_name (namespace:$volumes_namespace ): $volume_bytes_utilization % ($volume_bytes_used /$volume_bytes_capacity Bytes)\n"
257
- (( WARN_ERROR++ ))
258
- fi
259
- if [ " $volume_bytes_utilization " -gt " $CRIT " ]; then
260
- OUTPUT=" ${OUTPUT} Very high storage utilization on pvc $volume_name : $volume_bytes_utilization % ($volume_bytes_used /$volume_bytes_capacity Bytes)\n"
261
- (( CRIT_ERROR++ ))
262
- fi
263
- if [ " $volume_inodes_utilization " -gt " $WARN " ] && [ " $volume_inodes_utilization " -lt " $CRIT " ]; then
264
- OUTPUT=" ${OUTPUT} High inodes utilization on pvc $volume_name : $volume_inodes_utilization % ($volume_inodes_used /$volume_inodes_capacity )\n"
265
- (( WARN_ERROR++ ))
266
- fi
267
- if [ " $volume_inodes_utilization " -gt " $CRIT " ]; then
268
- OUTPUT=" ${OUTPUT} Very high inodes utilization on pvc $volume_name : $volume_inodes_utilization % ($volume_inodes_used /$volume_inodes_capacity )\n"
269
- (( CRIT_ERROR++ ))
270
- fi
271
- done
272
- done
273
- done
274
- done
227
+ data=$( for node in " ${nodes[@]} " ; do getJSON " api/v1/nodes/$node /proxy/stats/summary" ; done)
228
+ volumes=$( echo " $data " | jq -s ' [.[].pods[].volume[]? | select(has("pvcRef")) | {name: .pvcRef.name, namespace: .pvcRef.namespace, capacityBytes, usedBytes, availableBytes, percentageUsed: (.usedBytes / .capacityBytes * 100) | round}] | sort_by(.name) | unique' )
229
+ if [ " $NAMESPACE " ]; then
230
+ volumes=$( echo " $volumes " | jq " [.[] | select(.namespace==\" $NAMESPACE \" )]" )
231
+ fi
232
+ length=$( echo " $volumes " | jq length)
233
+ for (( n= 0 ; n< length; n++ )) ; do
234
+ volume=$( echo " $volumes " | jq " .[$n ]" )
235
+ volume_name=$( echo " $volume " | jq -r ' .namespace + "/" + .name' )
236
+ volume_bytes_utilization=$( echo " $volume " | jq -r ' .percentageUsed' )
237
+ volume_bytes_capacity=$( echo " $volume " | jq -r ' .capacityBytes' )
238
+ volume_bytes_used=$( echo " $volume " | jq -r ' .usedBytes' )
239
+
240
+ if [ " $volume_bytes_utilization " -gt " $WARN " ] && [ " $volume_bytes_utilization " -lt " $CRIT " ]; then
241
+ OUTPUT=" ${OUTPUT} High storage utilization on pvc $volume_name : $volume_bytes_utilization % ($volume_bytes_used /$volume_bytes_capacity Bytes)"
242
+ (( WARN_ERROR++ ))
243
+ fi
244
+ if [ " $volume_bytes_utilization " -gt " $CRIT " ]; then
245
+ OUTPUT=" ${OUTPUT} Very high storage utilization on pvc $volume_name : $volume_bytes_utilization % ($volume_bytes_used /$volume_bytes_capacity Bytes)"
246
+ (( CRIT_ERROR++ ))
247
+ fi
275
248
done
276
249
277
250
if [ " $WARN_ERROR " -eq " 0" ] && [ " $CRIT_ERROR " -eq " 0" ]; then
278
251
echo " OK. No problems on $PVC_COUNT pvc"
279
252
elif [ " $WARN_ERROR " -ne " 0" ] && [ " $CRIT_ERROR " -eq " 0" ]; then
280
- echo " WARNING.\n ${OUTPUT} "
253
+ echo " WARNING.${OUTPUT} "
281
254
exit 1
282
255
elif [ " $CRIT_ERROR " -ne " 0" ]; then
283
- echo " CRITICAL.\n ${OUTPUT} "
256
+ echo " CRITICAL.${OUTPUT} "
284
257
exit 2
285
258
else
286
- echo " ERROR.\n ${OUTPUT} "
259
+ echo " ERROR.${OUTPUT} "
287
260
exit 3
288
261
fi
289
262
}
@@ -296,7 +269,7 @@ mode_tls() {
296
269
count_crit=0
297
270
nowdate=$( date +%s)
298
271
299
- fulldata=$( getJSON " get secrets $kubectl_ns " " api/v1$api_ns /secrets/" )
272
+ fulldata=$( getJSON " api/v1$api_ns /secrets/" )
300
273
[ $? -gt 0 ] && die " $fulldata "
301
274
data=$( echo " $fulldata " | \
302
275
jq -r " .items[] | select (.type==\" kubernetes.io/tls\" )" )
@@ -368,7 +341,7 @@ mode_pods() {
368
341
count_failed=0
369
342
max_restart_count=0
370
343
bad_container=" "
371
- data=$( getJSON " get pods $kubectl_ns " " api/v1$api_ns /pods/" )
344
+ data=$( getJSON " api/v1$api_ns /pods/" )
372
345
[ $? -gt 0 ] && die " $data "
373
346
374
347
if [ " $NAME " ]; then
@@ -448,7 +421,7 @@ mode_pods() {
448
421
mode_deployments () {
449
422
count_avail=0
450
423
count_failed=0
451
- rawdata=$( getJSON " get deployments $kubectl_ns " " apis/apps/v1$api_ns /deployments/" )
424
+ rawdata=$( getJSON " apis/apps/v1$api_ns /deployments/" )
452
425
[ $? -gt 0 ] && die " $rawdata "
453
426
454
427
# deflate the data
@@ -504,7 +477,7 @@ mode_deployments() {
504
477
mode_daemonsets () {
505
478
count_avail=0
506
479
count_failed=0
507
- data=$( getJSON " get ds $kubectl_ns " " apis/apps/v1$api_ns /daemonsets/" )
480
+ data=$( getJSON " apis/apps/v1$api_ns /daemonsets/" )
508
481
[ $? -gt 0 ] && die " $data "
509
482
510
483
if [ " $NAME " ]; then
@@ -565,7 +538,7 @@ mode_replicasets() {
565
538
count_avail=0
566
539
count_failed=0
567
540
568
- data=$( getJSON " get rs $kubectl_ns " " apis/apps/v1$api_ns /replicasets/" )
541
+ data=$( getJSON " apis/apps/v1$api_ns /replicasets/" )
569
542
[ $? -gt 0 ] && die " $data "
570
543
571
544
if [ " $NAME " ]; then
@@ -625,7 +598,7 @@ mode_replicasets() {
625
598
mode_statefulsets () {
626
599
count_avail=0
627
600
count_failed=0
628
- data=$( getJSON " get statefulsets $kubectl_ns " " apis/apps/v1$api_ns /statefulsets/" )
601
+ data=$( getJSON " apis/apps/v1$api_ns /statefulsets/" )
629
602
[ $? -gt 0 ] && die " $data "
630
603
631
604
if [ " $NAME " ]; then
@@ -691,7 +664,7 @@ mode_jobs() {
691
664
total_jobs=0
692
665
declare -i total_failed_count=0
693
666
declare -i job_fail_count
694
- data=$( getJSON " get jobs $kubectl_ns " " apis/batch/v1$api_ns /jobs/" )
667
+ data=$( getJSON " apis/batch/v1$api_ns /jobs/" )
695
668
[ $? -gt 0 ] && die " $data "
696
669
697
670
if [ " $NAME " ]; then
0 commit comments