mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-21 18:41:03 +00:00
smtp_hello_: reformat metadata
This commit is contained in:
parent
f676ff11e9
commit
a620b1a507
1 changed files with 113 additions and 28 deletions
|
@ -1,18 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# smtp_hello_ - munin plugin for measuring smtp hello response
|
|
||||||
# Copyright (C) 2008 Marek Mahut <mmahut@fedoraproject.org>
|
# Copyright (C) 2008 Marek Mahut <mmahut@fedoraproject.org>
|
||||||
# Copyright (C) 2022 Andreas Perhab, WT-IO-IT GmbH <a.perhab@wtioit.at>
|
# Copyright (C) 2022 Andreas Perhab, WT-IO-IT GmbH <a.perhab@wtioit.at>
|
||||||
#
|
#
|
||||||
# Usage:
|
|
||||||
# ln -s /usr/share/munin/plugins/smtp_hello_ /etc/munin/plugins/smtp_hello_mysmtpserver.example.com
|
|
||||||
#
|
|
||||||
# Environment variables (optional):
|
|
||||||
# SMTP_PORT: port number to use for connection, default is 25
|
|
||||||
# SMTP_COMMAND: command to use to test the connection, default is "HELO localhost"
|
|
||||||
# TIMEOUT_SECONDS: seconds to take at most for the test, default is 120
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
# as published by the Free Software Foundation; either version 2
|
# as published by the Free Software Foundation; either version 2
|
||||||
|
@ -27,12 +17,108 @@
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
#$log$
|
|
||||||
#Revision 2.0 2022/05/03 09:15:32 Andreas Perhab (ap-wtioit)
|
: <<=cut
|
||||||
#Improve compatiblity.
|
|
||||||
#
|
=head1 NAME
|
||||||
#%# family=auto
|
|
||||||
#%# capabilities=autoconf
|
smtp_hello_ - Plugin for measuring smtp hello response time
|
||||||
|
|
||||||
|
=head1 CONFIGURATION
|
||||||
|
|
||||||
|
This plugin is intended to be symlinked with the host to monitor appended after the plugin name. e.g.
|
||||||
|
ln -s /usr/share/munin/plugins/smtp_hello_ /etc/munin/plugins/smtp_hello_mysmtpserver.example.com
|
||||||
|
|
||||||
|
To use it you need to have the following requirements installed:
|
||||||
|
|
||||||
|
curl (with smtp support) or nc
|
||||||
|
time or bash with keyword time
|
||||||
|
|
||||||
|
Only when running with curl this plugin is also able to check if the mailserver is responding properly. With nc just
|
||||||
|
the time to connect is measured and no status reported.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
=over 2
|
||||||
|
|
||||||
|
SMTP_PORTS - Space seperated list of ports to check. For example "25 465 587" Default is "25".
|
||||||
|
SMTP_COMMAND - SMTP command to use to test the connection. Default is "HELO localhost". For some mail servers it
|
||||||
|
may be required to change this to e.g. "QUIT" or "HELP"
|
||||||
|
TIMEOUT_SECONDS - Timeout for the SMTP connection test. default is 120 (seconds)
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
=over 2
|
||||||
|
|
||||||
|
[smtp_hello_*]
|
||||||
|
env.SMTP_PORTS 25 465 587
|
||||||
|
env.SMTP_COMMAND HELO localhost
|
||||||
|
env.TIMEOUT_SECONDS 60
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
Default warnings and criticals are as following:
|
||||||
|
Emit a warning when we take more than half the configured timeout time (60s). Set to critical when we get more than 99%
|
||||||
|
of the timeout time (118s). Those are calculated as an integer, for timeouts with lower numbers also configure individual
|
||||||
|
warnings and criticals. The plugin also emits a warning when curl is not able to communicate properly with the SMTP
|
||||||
|
server.
|
||||||
|
|
||||||
|
Different warnings and critical can be specified as following:
|
||||||
|
|
||||||
|
=over 2
|
||||||
|
|
||||||
|
[smtp_hello_*]
|
||||||
|
# warn when any port doesn't respond within 20 seconds (note make sure to overwrite this for status)
|
||||||
|
env.warning :10
|
||||||
|
# warn when port 25 doesn't respond within 20 seconds
|
||||||
|
env.host_warning :20
|
||||||
|
# critical when port 25 doesn't respond within 60 seconds
|
||||||
|
env.host_critical :60
|
||||||
|
# any status code that is not zero should be a warning
|
||||||
|
env.status_warning 0:0
|
||||||
|
# warn when port 25 doesn't respond within 40 seconds
|
||||||
|
env.host_465_warning :40
|
||||||
|
# critical when port 465 doesn't respond within 60 seconds
|
||||||
|
env.host_465_critical :60
|
||||||
|
# any status code that is not zero should be a warning
|
||||||
|
env.status_465_warning 0:0
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
|
||||||
|
[postfix_mailqueue]
|
||||||
|
env.spooldir /var/spool/postfix
|
||||||
|
|
||||||
|
=head1 AUTHOR
|
||||||
|
|
||||||
|
Marek Mahut
|
||||||
|
|
||||||
|
Copyright (C) 2008 Marek Mahut <mmahut@fedoraproject.org>
|
||||||
|
Copyright (C) 2022 Andreas Perhab, WT-IO-IT GmbH <a.perhab@wtioit.at>
|
||||||
|
|
||||||
|
=head1 LICENSE
|
||||||
|
|
||||||
|
Gnu GPLv2
|
||||||
|
|
||||||
|
SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
=head1 MAGIC MARKERS
|
||||||
|
|
||||||
|
=begin comment
|
||||||
|
|
||||||
|
These magic markers are used by munin-node-configure when installing
|
||||||
|
munin-node.
|
||||||
|
|
||||||
|
=end comment
|
||||||
|
|
||||||
|
#%# family=auto
|
||||||
|
#%# capabilities=autoconf
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
. "$MUNIN_LIBDIR/plugins/plugin.sh"
|
. "$MUNIN_LIBDIR/plugins/plugin.sh"
|
||||||
|
|
||||||
|
@ -50,11 +136,11 @@ time_executable=""
|
||||||
if which time >/dev/null; then
|
if which time >/dev/null; then
|
||||||
# use time executable found in PATH
|
# use time executable found in PATH
|
||||||
time_executable=$(which time)
|
time_executable=$(which time)
|
||||||
elif [ -x /usr/bin/time ] ; then
|
elif [ -x /usr/bin/time ]; then
|
||||||
# use time executable found in /usr/bin
|
# use time executable found in /usr/bin
|
||||||
time_executable="/usr/bin/time"
|
time_executable="/usr/bin/time"
|
||||||
fi
|
fi
|
||||||
if [ "$time_executable" != "" ] ; then
|
if [ "$time_executable" != "" ]; then
|
||||||
function take_the_time() {
|
function take_the_time() {
|
||||||
"$time_executable" -f "%e" "$@" 2>&1 | tail -n 1
|
"$time_executable" -f "%e" "$@" 2>&1 | tail -n 1
|
||||||
return "${PIPESTATUS[0]}"
|
return "${PIPESTATUS[0]}"
|
||||||
|
@ -75,10 +161,10 @@ elif { time echo; } >/dev/null 2>&1; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
nc_executable=""
|
nc_executable=""
|
||||||
if which nc >/dev/null ; then
|
if which nc >/dev/null; then
|
||||||
# use nc from PATH
|
# use nc from PATH
|
||||||
nc_executable=$(which nc)
|
nc_executable=$(which nc)
|
||||||
elif [ -x /usr/bin/nc ] ; then
|
elif [ -x /usr/bin/nc ]; then
|
||||||
# as fallback use /usr/bin/nc if found
|
# as fallback use /usr/bin/nc if found
|
||||||
nc_executable="/usr/bin/nc"
|
nc_executable="/usr/bin/nc"
|
||||||
fi
|
fi
|
||||||
|
@ -95,8 +181,8 @@ if [ "$1" == "config" ]; then
|
||||||
echo "graph_category network"
|
echo "graph_category network"
|
||||||
echo "graph_args --base 1000 --lower-limit 0"
|
echo "graph_args --base 1000 --lower-limit 0"
|
||||||
for port in $SMTP_PORTS; do
|
for port in $SMTP_PORTS; do
|
||||||
if [[ $port ]] ; then
|
if [[ $port ]]; then
|
||||||
if [[ $port = "25" ]] ; then
|
if [[ $port = "25" ]]; then
|
||||||
suffix=""
|
suffix=""
|
||||||
else
|
else
|
||||||
suffix="_$port"
|
suffix="_$port"
|
||||||
|
@ -109,7 +195,7 @@ if [ "$1" == "config" ]; then
|
||||||
eval "export host${suffix}_critical=\${host${suffix}_critical:-:$((TIMEOUT_SECONDS * 99 / 100))}"
|
eval "export host${suffix}_critical=\${host${suffix}_critical:-:$((TIMEOUT_SECONDS * 99 / 100))}"
|
||||||
print_warning "host${suffix}"
|
print_warning "host${suffix}"
|
||||||
print_critical "host${suffix}"
|
print_critical "host${suffix}"
|
||||||
if [ "$curl_with_smtp_support" == "1" ] ; then
|
if [ "$curl_with_smtp_support" == "1" ]; then
|
||||||
# if we have curl, all non-zero exit codes indicate an error
|
# if we have curl, all non-zero exit codes indicate an error
|
||||||
eval "export status${suffix}_warning=\${status${suffix}_warning:-0:0}"
|
eval "export status${suffix}_warning=\${status${suffix}_warning:-0:0}"
|
||||||
echo "status$suffix.label smtp port $port check status"
|
echo "status$suffix.label smtp port $port check status"
|
||||||
|
@ -119,7 +205,6 @@ if [ "$1" == "config" ]; then
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
elif [ "$1" == "autoconf" ]; then
|
elif [ "$1" == "autoconf" ]; then
|
||||||
|
|
||||||
if [ "$take_the_time" != "" ] && [ -x "$nc_executable" ]; then
|
if [ "$take_the_time" != "" ] && [ -x "$nc_executable" ]; then
|
||||||
|
@ -131,13 +216,13 @@ elif [ "$1" == "autoconf" ]; then
|
||||||
|
|
||||||
else
|
else
|
||||||
for port in $SMTP_PORTS; do
|
for port in $SMTP_PORTS; do
|
||||||
if [[ $port ]] ; then
|
if [[ $port ]]; then
|
||||||
if [[ $port = "25" ]] ; then
|
if [[ $port = "25" ]]; then
|
||||||
suffix=""
|
suffix=""
|
||||||
else
|
else
|
||||||
suffix="_$port"
|
suffix="_$port"
|
||||||
fi
|
fi
|
||||||
if [ "$curl_with_smtp_support" == "1" ] ; then
|
if [ "$curl_with_smtp_support" == "1" ]; then
|
||||||
value=$(take_the_time curl --silent -X "$SMTP_COMMAND" --max-time "$TIMEOUT_SECONDS" "smtp://$host:$port/")
|
value=$(take_the_time curl --silent -X "$SMTP_COMMAND" --max-time "$TIMEOUT_SECONDS" "smtp://$host:$port/")
|
||||||
status=$?
|
status=$?
|
||||||
else
|
else
|
||||||
|
@ -150,7 +235,7 @@ else
|
||||||
status=""
|
status=""
|
||||||
fi
|
fi
|
||||||
echo "host$suffix.value $value"
|
echo "host$suffix.value $value"
|
||||||
if [ -n "$status" ] ; then
|
if [ -n "$status" ]; then
|
||||||
echo "status$suffix.value $status"
|
echo "status$suffix.value $status"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue