File check_mysql_backup_files of Package nagios-plugins-automysqlbackup
1
#!/usr/bin/env bash
2
# Author: Marek Rzepala <Marek.Rzepala@internetx.com>
3
# Version: 3.01
4
# Last changed: 27.10.2021
5
# Upstream URL: https://gitlab.muc.internetx.com/p-s/nagios/check_mysql_backup_files
6
7
IFS=$'\n'
8
warn_daily=86400 # one day
9
crit_daily=$(($warn_daily * 2))
10
11
warn_weekly=$(($warn_daily * 36))
12
crit_weekly=$(($warn_weekly + $crit_daily))
13
14
warn_monthly=$(($warn_daily * 151))
15
crit_monthly=$(($warn_monthly + $crit_daily))
16
17
now=$(date +'%s')
18
confdir=/etc/multimysqlbackup.d/
19
backdirs+=($(awk -F ";" '{print $1}' <(grep -vh ^# $confdir/*.conf) | awk -F ":" '{print $1}'))
20
stat=0
21
stat_warn=0
22
stat_crit=0
23
24
25
#### data gathering
26
for rota in daily weekly monthly
27
do
28
for ((i=0;i<${#backdirs[@]};i++))
29
do
30
for backstat in $(find /backup/mysql/${backdirs[i]}/$rota/* -maxdepth 0 -type d -printf '%p %Cs\n')
31
do
32
diff=$(($now - $(awk '{print $2}' <(printf $backstat))))
33
34
case $rota in
35
36
daily)
37
case $((($diff >= $warn_daily && $diff <= $crit_daily) * 1 + ($diff >= $crit_daily ) * 2)) in
38
39
1)
40
warns+=($(echo "${backdirs[i]}_daily $backstat $(($diff / 3600))")) && stat_warn=1
41
;;
42
2)
43
crits+=($(echo "${backdirs[i]}_daily $backstat $(($diff / 3600))")) && stat_crit=2
44
;;
45
esac
46
;;
47
weekly)
48
case $((($diff >= $warn_weekly && $diff <= $crit_weekly) * 1 + ($diff >= $crit_weekly ) * 2)) in
49
50
1)
51
warns+=($(echo "${backdirs[i]}_weekly $backstat $(($diff / 3600))")) && stat_warn=1
52
;;
53
2)
54
crits+=($(echo "${backdirs[i]}_weekly $backstat $(($diff / 3600))")) && stat_crit=2
55
;;
56
esac
57
;;
58
monthly)
59
case $((($diff >= $warn_monthly && $diff <= $crit_monthly) * 1 + ($diff >= $crit_monthly ) * 2)) in
60
61
1)
62
warns+=($(echo "${backdirs[i]}_monthly $backstat $(($diff / 3600))")) && stat_warn=1
63
;;
64
2)
65
crits+=($(echo "${backdirs[i]}_monthly $backstat $(($diff / 3600))")) && stat_crit=2
66
;;
67
esac
68
;;
69
70
esac
71
done
72
done
73
done
74
####
75
76
77
#### functions for printing warnings und criticals gathered in prior for loop
78
stat=$(($stat_warn+$stat_crit))
79
80
print_warns () {
81
for ((i=0;i<${#warns[@]};i++))
82
do
83
echo -n "{$(awk '{print $1}' <(echo ${warns[i]})) backup "
84
echo -n $(awk -F "/" '{print $NF}' <(echo ${warns[i]})| awk '{print $1}')
85
echo -n " $(awk '{print $NF}' <(echo ${warns[i]})) hours old!}"
86
done
87
}
88
89
print_crits () {
90
for ((i=0;i<${#crits[@]};i++))
91
do
92
echo -n "{$(awk '{print $1}' <(echo ${crits[i]})) backup "
93
echo -n $(awk -F "/" '{print $NF}' <(echo ${crits[i]})| awk '{print $1}')
94
echo -n " $(awk '{print $NF}' <(echo ${crits[i]})) hours old!}"
95
done
96
}
97
98
99
#### print and exit depending on $stat set in data gathering loop
100
case $stat in
101
102
1)
103
echo -n "WARNING check backup "
104
print_warns
105
exit 1
106
;;
107
2)
108
echo -n "CRITICAL "
109
print_crits
110
exit 2
111
;;
112
3)
113
echo -n "CRITICAL "
114
print_warns
115
echo -n "WARNING "
116
print_crits
117
exit 2
118
;;
119
120
0) echo "we gucci"
121
exit 0
122
;;
123
esac
124