diff options
| author | Lorenz <12514511+RincewindsHat@users.noreply.github.com> | 2023-03-27 12:34:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-27 12:34:19 +0200 |
| commit | bbc97d57f7f9e0a49fea78c02861c444fe95d46a (patch) | |
| tree | c8956bbbe9b73e37d261735699a82cccaacea0db /plugins-scripts | |
| parent | 917dba07fded8ef04967183a4c0443b5cce2db82 (diff) | |
| parent | 482aa6c7fe86d7a899e4888d14149f1ccd5401fd (diff) | |
| download | monitoring-plugins-bbc97d57f7f9e0a49fea78c02861c444fe95d46a.tar.gz | |
Merge branch 'master' into dev/check_ssh-patches
Diffstat (limited to 'plugins-scripts')
| -rwxr-xr-x | plugins-scripts/check_log.sh | 99 | ||||
| -rwxr-xr-x | plugins-scripts/check_mailq.pl | 40 | ||||
| -rw-r--r-- | plugins-scripts/t/check_log.t | 82 |
3 files changed, 149 insertions, 72 deletions
diff --git a/plugins-scripts/check_log.sh b/plugins-scripts/check_log.sh index fdb57416..c623a8d6 100755 --- a/plugins-scripts/check_log.sh +++ b/plugins-scripts/check_log.sh | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | # On the first run of the plugin, it will return an OK state with a message | 18 | # On the first run of the plugin, it will return an OK state with a message |
| 19 | # of "Log check data initialized". On successive runs, it will return an OK | 19 | # of "Log check data initialized". On successive runs, it will return an OK |
| 20 | # state if *no* pattern matches have been found in the *difference* between the | 20 | # state if *no* pattern matches have been found in the *difference* between the |
| 21 | # log file and the older copy of the log file. If the plugin detects any | 21 | # log file and the older copy of the log file. If the plugin detects any |
| 22 | # pattern matches in the log diff, it will return a CRITICAL state and print | 22 | # pattern matches in the log diff, it will return a CRITICAL state and print |
| 23 | # out a message is the following format: "(x) last_match", where "x" is the | 23 | # out a message is the following format: "(x) last_match", where "x" is the |
| 24 | # total number of pattern matches found in the file and "last_match" is the | 24 | # total number of pattern matches found in the file and "last_match" is the |
| @@ -76,6 +76,7 @@ print_usage() { | |||
| 76 | echo "" | 76 | echo "" |
| 77 | echo "Other parameters:" | 77 | echo "Other parameters:" |
| 78 | echo " -a|--all : Print all matching lines" | 78 | echo " -a|--all : Print all matching lines" |
| 79 | echo " --exclude: Exclude a pattern (-p or -e also applies here when used)" | ||
| 79 | echo " -p|--perl-regex : Use perl style regular expressions in the query" | 80 | echo " -p|--perl-regex : Use perl style regular expressions in the query" |
| 80 | echo " -e|--extended-regex : Use extended style regular expressions in the query (not necessary for GNU grep)" | 81 | echo " -e|--extended-regex : Use extended style regular expressions in the query (not necessary for GNU grep)" |
| 81 | } | 82 | } |
| @@ -99,82 +100,46 @@ if [ $# -lt 1 ]; then | |||
| 99 | fi | 100 | fi |
| 100 | 101 | ||
| 101 | # Grab the command line arguments | 102 | # Grab the command line arguments |
| 102 | |||
| 103 | #logfile=$1 | ||
| 104 | #oldlog=$2 | ||
| 105 | #query=$3 | ||
| 106 | exitstatus=$STATE_WARNING #default | 103 | exitstatus=$STATE_WARNING #default |
| 107 | while test -n "$1"; do | 104 | while test -n "$1"; do |
| 108 | case "$1" in | 105 | case "$1" in |
| 109 | --help) | 106 | -h | --help) |
| 110 | print_help | ||
| 111 | exit "$STATE_OK" | ||
| 112 | ;; | ||
| 113 | -h) | ||
| 114 | print_help | 107 | print_help |
| 115 | exit "$STATE_OK" | 108 | exit "$STATE_OK" |
| 116 | ;; | 109 | ;; |
| 117 | --version) | 110 | -V | --version) |
| 118 | print_revision "$PROGNAME" "$REVISION" | 111 | print_revision "$PROGNAME" "$REVISION" |
| 119 | exit "$STATE_OK" | 112 | exit "$STATE_OK" |
| 120 | ;; | 113 | ;; |
| 121 | -V) | 114 | -F | --filename) |
| 122 | print_revision "$PROGNAME" "$REVISION" | ||
| 123 | exit "$STATE_OK" | ||
| 124 | ;; | ||
| 125 | --filename) | ||
| 126 | logfile=$2 | 115 | logfile=$2 |
| 127 | shift 2 | 116 | shift 2 |
| 128 | ;; | 117 | ;; |
| 129 | -F) | 118 | -O | --oldlog) |
| 130 | logfile=$2 | ||
| 131 | shift 2 | ||
| 132 | ;; | ||
| 133 | --oldlog) | ||
| 134 | oldlog=$2 | 119 | oldlog=$2 |
| 135 | shift 2 | 120 | shift 2 |
| 136 | ;; | 121 | ;; |
| 137 | -O) | 122 | -q | --query) |
| 138 | oldlog=$2 | ||
| 139 | shift 2 | ||
| 140 | ;; | ||
| 141 | --query) | ||
| 142 | query=$2 | 123 | query=$2 |
| 143 | shift 2 | 124 | shift 2 |
| 144 | ;; | 125 | ;; |
| 145 | -q) | 126 | --exclude) |
| 146 | query=$2 | 127 | exclude=$2 |
| 147 | shift 2 | 128 | shift 2 |
| 148 | ;; | 129 | ;; |
| 149 | -x) | 130 | -x | --exitstatus) |
| 150 | exitstatus=$2 | 131 | exitstatus=$2 |
| 151 | shift 2 | 132 | shift 2 |
| 152 | ;; | 133 | ;; |
| 153 | --exitstatus) | 134 | -e | --extended-regex) |
| 154 | exitstatus=$2 | ||
| 155 | shift 2 | ||
| 156 | ;; | ||
| 157 | --extended-regex) | ||
| 158 | ERE=1 | 135 | ERE=1 |
| 159 | shift | 136 | shift |
| 160 | ;; | 137 | ;; |
| 161 | -e) | 138 | -p | --perl-regex) |
| 162 | ERE=1 | ||
| 163 | shift | ||
| 164 | ;; | ||
| 165 | --perl-regex) | ||
| 166 | PRE=1 | ||
| 167 | shift | ||
| 168 | ;; | ||
| 169 | -p) | ||
| 170 | PRE=1 | 139 | PRE=1 |
| 171 | shift | 140 | shift |
| 172 | ;; | 141 | ;; |
| 173 | --all) | 142 | -a | --all) |
| 174 | ALL=1 | ||
| 175 | shift | ||
| 176 | ;; | ||
| 177 | -a) | ||
| 178 | ALL=1 | 143 | ALL=1 |
| 179 | shift | 144 | shift |
| 180 | ;; | 145 | ;; |
| @@ -188,18 +153,18 @@ done | |||
| 188 | 153 | ||
| 189 | # Parameter sanity check | 154 | # Parameter sanity check |
| 190 | if [ $ERE ] && [ $PRE ] ; then | 155 | if [ $ERE ] && [ $PRE ] ; then |
| 191 | echo "Can not use extended and perl regex at the same time" | 156 | echo "Can not use extended and perl regex at the same time" |
| 192 | exit "$STATE_UNKNOWN" | 157 | exit "$STATE_UNKNOWN" |
| 193 | fi | 158 | fi |
| 194 | 159 | ||
| 195 | GREP="grep" | 160 | GREP="grep" |
| 196 | 161 | ||
| 197 | if [ $ERE ]; then | 162 | if [ $ERE ]; then |
| 198 | GREP="grep -E" | 163 | GREP="grep -E" |
| 199 | fi | 164 | fi |
| 200 | 165 | ||
| 201 | if [ $PRE ]; then | 166 | if [ $PRE ]; then |
| 202 | GREP="grep -P" | 167 | GREP="grep -P" |
| 203 | fi | 168 | fi |
| 204 | 169 | ||
| 205 | # If the source log file doesn't exist, exit | 170 | # If the source log file doesn't exist, exit |
| @@ -213,8 +178,8 @@ elif [ ! -r "$logfile" ] ; then | |||
| 213 | fi | 178 | fi |
| 214 | # If no oldlog was given this can not work properly, abort then | 179 | # If no oldlog was given this can not work properly, abort then |
| 215 | if [ -z "$oldlog" ]; then | 180 | if [ -z "$oldlog" ]; then |
| 216 | echo "Oldlog parameter is needed" | 181 | echo "Oldlog parameter is needed" |
| 217 | exit $STATE_UNKNOWN | 182 | exit $STATE_UNKNOWN |
| 218 | fi | 183 | fi |
| 219 | 184 | ||
| 220 | # If the old log file doesn't exist, this must be the first time | 185 | # If the old log file doesn't exist, this must be the first time |
| @@ -245,18 +210,24 @@ diff "$logfile" "$oldlog" | grep -v "^>" > "$tempdiff" | |||
| 245 | 210 | ||
| 246 | 211 | ||
| 247 | if [ $ALL ]; then | 212 | if [ $ALL ]; then |
| 248 | # Get the last matching entry in the diff file | 213 | # Get all matching entries in the diff file |
| 249 | entry=$($GREP "$query" "$tempdiff") | 214 | if [ -n "$exclude" ]; then |
| 250 | 215 | entry=$($GREP "$query" "$tempdiff" | $GREP -v "$exclude") | |
| 251 | # Count the number of matching log entries we have | 216 | count=$($GREP "$query" "$tempdiff" | $GREP -vc "$exclude") |
| 252 | count=$(echo "$entry" | wc -l) | 217 | else |
| 218 | entry=$($GREP "$query" "$tempdiff") | ||
| 219 | count=$($GREP -c "$query" "$tempdiff") | ||
| 220 | fi | ||
| 253 | 221 | ||
| 254 | else | 222 | else |
| 255 | # Count the number of matching log entries we have | 223 | # Get the last matching entry in the diff file |
| 256 | count=$($GREP -c "$query" "$tempdiff") | 224 | if [ -n "$exclude" ]; then |
| 257 | 225 | entry=$($GREP "$query" "$tempdiff" | $GREP -v "$exclude" | tail -1) | |
| 258 | # Get the last matching entry in the diff file | 226 | count=$($GREP "$query" "$tempdiff" | $GREP -vc "$exclude") |
| 259 | entry=$($GREP "$query" "$tempdiff" | tail -1) | 227 | else |
| 228 | entry=$($GREP "$query" "$tempdiff" | tail -1) | ||
| 229 | count=$($GREP -c "$query" "$tempdiff") | ||
| 230 | fi | ||
| 260 | fi | 231 | fi |
| 261 | 232 | ||
| 262 | rm -f "$tempdiff" | 233 | rm -f "$tempdiff" |
diff --git a/plugins-scripts/check_mailq.pl b/plugins-scripts/check_mailq.pl index 4c72332a..f02c90fb 100755 --- a/plugins-scripts/check_mailq.pl +++ b/plugins-scripts/check_mailq.pl | |||
| @@ -149,7 +149,26 @@ if ($mailq eq "sendmail") { | |||
| 149 | ##/var/spool/mqueue/qF/df is empty | 149 | ##/var/spool/mqueue/qF/df is empty |
| 150 | ## Total Requests: 1 | 150 | ## Total Requests: 1 |
| 151 | 151 | ||
| 152 | 152 | # separate submission/transport queues, empty | |
| 153 | ## MSP Queue status... | ||
| 154 | ## /var/spool/mqueue-client is empty | ||
| 155 | ## Total requests: 0 | ||
| 156 | ## MTA Queue status... | ||
| 157 | ## /var/spool/mqueue is empty | ||
| 158 | ## Total requests: 0 | ||
| 159 | # separate submission/transport queues: 1 | ||
| 160 | ## MSP Queue status... | ||
| 161 | ## /var/spool/mqueue-client (1 request) | ||
| 162 | ## -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------- | ||
| 163 | ## oAJEfhdW014123 5 Fri Nov 19 14:41 jwm | ||
| 164 | ## (Deferred: Connection refused by [127.0.0.1]) | ||
| 165 | ## root | ||
| 166 | ## Total requests: 1 | ||
| 167 | ## MTA Queue status... | ||
| 168 | ## /var/spool/mqueue is empty | ||
| 169 | ## Total requests: 0 | ||
| 170 | |||
| 171 | my $this_msg_q = 0; | ||
| 153 | while (<MAILQ>) { | 172 | while (<MAILQ>) { |
| 154 | 173 | ||
| 155 | # match email addr on queue listing | 174 | # match email addr on queue listing |
| @@ -189,13 +208,18 @@ if ($mailq eq "sendmail") { | |||
| 189 | # | 208 | # |
| 190 | # single queue: first line | 209 | # single queue: first line |
| 191 | # multi queue: one for each queue. overwrite on multi queue below | 210 | # multi queue: one for each queue. overwrite on multi queue below |
| 192 | $msg_q = $1 ; | 211 | $this_msg_q = $1 ; |
| 212 | $msg_q += $1 ; | ||
| 193 | } | 213 | } |
| 194 | } elsif (/^\s+Total\sRequests:\s(\d+)$/i) { | 214 | } elsif (/^\s+Total\sRequests:\s(\d+)$/i) { |
| 195 | print "$utils::PATH_TO_MAILQ = $_ \n" if $verbose ; | 215 | if ($this_msg_q) { |
| 196 | # | 216 | $this_msg_q = 0 ; |
| 197 | # multi queue: last line | 217 | } else { |
| 198 | $msg_q = $1 ; | 218 | print "$utils::PATH_TO_MAILQ = $_ \n" if $verbose ; |
| 219 | # | ||
| 220 | # multi queue: last line | ||
| 221 | $msg_q += $1 ; | ||
| 222 | } | ||
| 199 | } | 223 | } |
| 200 | 224 | ||
| 201 | } | 225 | } |
| @@ -537,9 +561,9 @@ elsif ( $mailq eq "nullmailer" ) { | |||
| 537 | } | 561 | } |
| 538 | 562 | ||
| 539 | while (<MAILQ>) { | 563 | while (<MAILQ>) { |
| 540 | #2006-06-22 16:00:00 282 bytes | 564 | #2022-08-25 01:30:40 502 bytes from <user@example.com> |
| 541 | 565 | ||
| 542 | if (/^[1-9][0-9]*-[01][0-9]-[0-3][0-9]\s[0-2][0-9]\:[0-5][0-9]\:[0-5][0-9]\s+[0-9]+\sbytes/) { | 566 | if (/^\d{4}-\d{2}-\d{2}\s+\d{2}\:\d{2}\:\d{2}\s+\d+\sbytes/) { |
| 543 | $msg_q++ ; | 567 | $msg_q++ ; |
| 544 | } | 568 | } |
| 545 | } | 569 | } |
diff --git a/plugins-scripts/t/check_log.t b/plugins-scripts/t/check_log.t new file mode 100644 index 00000000..b66e0fd8 --- /dev/null +++ b/plugins-scripts/t/check_log.t | |||
| @@ -0,0 +1,82 @@ | |||
| 1 | #!/usr/bin/perl -w -I .. | ||
| 2 | # | ||
| 3 | # check_log tests | ||
| 4 | # | ||
| 5 | # | ||
| 6 | |||
| 7 | use strict; | ||
| 8 | use Test::More; | ||
| 9 | use NPTest; | ||
| 10 | |||
| 11 | my $tests = 18; | ||
| 12 | plan tests => $tests; | ||
| 13 | |||
| 14 | my $firstTimeOutput ='/^Log check data initialized/'; | ||
| 15 | my $okOutput = '/^Log check ok - 0 pattern matches found/'; | ||
| 16 | my $criticalOutput = '/^\(\d+\) < /'; | ||
| 17 | my $multilineOutput = '/\(3\) <.*\n.*\n.*$/'; | ||
| 18 | my $unknownOutput = '/^Usage: /'; | ||
| 19 | my $unknownArgOutput = '/^Unknown argument: /'; | ||
| 20 | my $bothRegexOutput = '/^Can not use extended and perl regex/'; | ||
| 21 | |||
| 22 | my $result; | ||
| 23 | my $temp_file = "/tmp/check_log.tmp"; | ||
| 24 | my $oldlog = "/tmp/oldlog.tmp"; | ||
| 25 | |||
| 26 | open(FH, '>', $temp_file) or die $!; | ||
| 27 | close(FH); | ||
| 28 | |||
| 29 | $result = NPTest->testCmd("./check_log"); | ||
| 30 | cmp_ok( $result->return_code, '==', 3, "Missing parameters" ); | ||
| 31 | like ( $result->output, $unknownOutput, "Output for unknown correct" ); | ||
| 32 | |||
| 33 | $result = NPTest->testCmd("./check_log -f"); | ||
| 34 | cmp_ok( $result->return_code, '==', 3, "Wrong parameters" ); | ||
| 35 | like ( $result->output, $unknownArgOutput, "Output for unknown correct" ); | ||
| 36 | |||
| 37 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'Simple match' -e -p"); | ||
| 38 | cmp_ok( $result->return_code, '==', 3, "Both regex parameters" ); | ||
| 39 | like ( $result->output, $bothRegexOutput, "Output for unknown correct" ); | ||
| 40 | |||
| 41 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'Simple match'"); | ||
| 42 | cmp_ok( $result->return_code, '==', 0, "First time executing" ); | ||
| 43 | like ( $result->output, $firstTimeOutput, "Output for first time executing correct" ); | ||
| 44 | |||
| 45 | open(FH, '>>', $temp_file) or die $!; | ||
| 46 | print FH "This is some text, that should not match\n"; | ||
| 47 | close(FH); | ||
| 48 | |||
| 49 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'No match'"); | ||
| 50 | cmp_ok( $result->return_code, '==', 0, "No match" ); | ||
| 51 | like ( $result->output, $okOutput, "Output for no match correct" ); | ||
| 52 | |||
| 53 | open(FH, '>>', $temp_file) or die $!; | ||
| 54 | print FH "This text should match\n"; | ||
| 55 | close(FH); | ||
| 56 | |||
| 57 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'should match'"); | ||
| 58 | cmp_ok( $result->return_code, '==', 2, "Pattern match" ); | ||
| 59 | like ( $result->output, $criticalOutput, "Output for match correct" ); | ||
| 60 | |||
| 61 | open(FH, '>>', $temp_file) or die $!; | ||
| 62 | print FH "This text should not match, because it is excluded\n"; | ||
| 63 | close(FH); | ||
| 64 | |||
| 65 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'match' --exclude 'because'"); | ||
| 66 | cmp_ok( $result->return_code, '==', 0, "Exclude a pattern" ); | ||
| 67 | like ( $result->output, $okOutput, "Output for no match correct" ); | ||
| 68 | |||
| 69 | open(FH, '>>', $temp_file) or die $!; | ||
| 70 | print FH "Trying\nwith\nmultiline\nignore me\n"; | ||
| 71 | close(FH); | ||
| 72 | |||
| 73 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'Trying\\|with\\|multiline\\|ignore' --exclude 'me' --all"); | ||
| 74 | cmp_ok( $result->return_code, '==', 2, "Multiline pattern match with --all" ); | ||
| 75 | like ( $result->output, $multilineOutput, "Output for multiline match correct" ); | ||
| 76 | |||
| 77 | $result = NPTest->testCmd("./check_log -F ".$temp_file." -O ".$oldlog." -q 'match' -a"); | ||
| 78 | cmp_ok( $result->return_code, '==', 0, "Non matching --all" ); | ||
| 79 | like ( $result->output, $okOutput, "Output for no match correct" ); | ||
| 80 | |||
| 81 | unlink($oldlog); | ||
| 82 | unlink($temp_file); | ||
