root / plugins / network / ldap_connections @ dd4afac8
Historique | Voir | Annoter | Télécharger (3,51 ko)
| 1 |
#!/bin/sh |
|---|---|
| 2 |
# |
| 3 |
# Plugin to monitor the number of open connexions to LDAP |
| 4 |
# |
| 5 |
# $Log: ldap_connections,v $ |
| 6 |
# Revision 1.9 2008/05/20 21:30:34 cvserver |
| 7 |
# Corrections de bugs |
| 8 |
# |
| 9 |
# Revision 1.8 2007/09/03 09:35:37 cvserver |
| 10 |
# Correction2 pour OpenBSD |
| 11 |
# |
| 12 |
# Revision 1.7 2007/09/03 09:01:07 cvserver |
| 13 |
# Modif pour OpenBSD |
| 14 |
# |
| 15 |
# Revision 1.6 2007/03/02 07:52:52 cvserver |
| 16 |
# pas LISTEN pour les IPs utilis?es (en cas de *:389) |
| 17 |
# |
| 18 |
# Revision 1.5 2007/03/01 16:06:53 cvserver |
| 19 |
# corrections: |
| 20 |
# - reinitialisation de $IPS_BOUND au debut de la fonction find_ip_bound |
| 21 |
# - precision dans le grep (LISTEN) |
| 22 |
# |
| 23 |
# Revision 1.4 2006/09/27 11:56:54 cvserver |
| 24 |
# + sockets |
| 25 |
# |
| 26 |
# Revision 1.3 2006/06/24 23:38:30 cvserver |
| 27 |
# correction |
| 28 |
# |
| 29 |
# Revision 1.2 2006/06/24 23:24:30 cvserver |
| 30 |
# correction |
| 31 |
# |
| 32 |
# Revision 1.1 2006/06/24 23:15:25 cvserver |
| 33 |
# connexions LDAP pour munin |
| 34 |
# |
| 35 |
# |
| 36 |
# plugin-conf.d/-options: |
| 37 |
# |
| 38 |
# netstat -- path to netstat executable |
| 39 |
# ports -- ldap ports used (389 and 636) |
| 40 |
# only used ones are graphed |
| 41 |
# socket -- ldapi socket (default: /var/run/openldap/ldapi) |
| 42 |
# |
| 43 |
# Parameters: |
| 44 |
# |
| 45 |
# config (required) |
| 46 |
# autoconf (optional - used by munin-config) |
| 47 |
# |
| 48 |
# Magic markers (Used by munin-config and some installation scripts. |
| 49 |
# Optional): |
| 50 |
# |
| 51 |
#%# family=contrib |
| 52 |
#%# capabilities=autoconf |
| 53 |
|
| 54 |
NETSTAT=${netstat:-`which netstat`}
|
| 55 |
NETSTAT=${NETSTAT:-/usr/bin/netstat}
|
| 56 |
PORTS=${ports:-389 636}
|
| 57 |
TEMP_FILE=$(mktemp /tmp/munin_ldap.XXXXXX) |
| 58 |
PATH=/bin:/usr/bin:/usr/local/bin |
| 59 |
SOCKET=${socket:-/var/run/openldap/ldapi}
|
| 60 |
|
| 61 |
case $(uname -s) in |
| 62 |
*BSD) |
| 63 |
NETSTAT_ARGS="-an -ptcp" |
| 64 |
FAMILYMARK="-f " |
| 65 |
;; |
| 66 |
Linux) |
| 67 |
NETSTAT_ARGS="-alnt" |
| 68 |
FAMILYMARK="--" |
| 69 |
;; |
| 70 |
*) |
| 71 |
NETSTAT_ARGS="-an" |
| 72 |
FAMILYMARK="-f " |
| 73 |
;; |
| 74 |
esac |
| 75 |
|
| 76 |
$NETSTAT $NETSTAT_ARGS > $TEMP_FILE |
| 77 |
|
| 78 |
# arg: port |
| 79 |
find_ips_bound() {
|
| 80 |
port=$1 |
| 81 |
IPS_BOUND="" |
| 82 |
for i in $(grep "^tcp[46]\{0,1\}\([[:space:]]\{1,\}[[:digit:]]\{1,\}\)\{2\}[[:space:]]\{1,\}\(\([0-9]\)\{1,3\}\.\)\{3\}[0-9]\{1,3\}[\.:]$port[[:space:]].*" $TEMP_FILE | awk '{print $4}' | sed "s/^\(.*\)[\.:]$port$/\1/"); do
|
| 83 |
echo $IPS_BOUND | grep "$i" > /dev/null || IPS_BOUND=$IPS_BOUND" $i" |
| 84 |
done |
| 85 |
echo $IPS_BOUND |
| 86 |
} |
| 87 |
|
| 88 |
# see which port(s) is/are really bound |
| 89 |
LISTENING_PORTS="" |
| 90 |
for port in $PORTS; do |
| 91 |
find_ips_bound $port > /dev/null && LISTENING_PORTS="$LISTENING_PORTS$port " |
| 92 |
done |
| 93 |
|
| 94 |
if [ "$1" = "autoconf" ]; then |
| 95 |
ONE_LISTENING="" |
| 96 |
for port in $PORTS; do |
| 97 |
ONE_LISTENING=${ONE_LISTENING}$(find_ips_bound $port)
|
| 98 |
done |
| 99 |
rm -f $TEMP_FILE |
| 100 |
if [ -n "$ONE_LISTENING" ]; then |
| 101 |
echo yes |
| 102 |
exit 0 |
| 103 |
else |
| 104 |
echo no '(no slapd listening on '$PORTS')' |
| 105 |
exit 1 |
| 106 |
fi |
| 107 |
fi |
| 108 |
|
| 109 |
if [ "$1" = "config" ]; then |
| 110 |
echo 'graph_title LDAP connections' |
| 111 |
echo 'graph_args -l 0' |
| 112 |
echo 'graph_vlabel active connections to ldap by port' |
| 113 |
echo 'graph_category network' |
| 114 |
for port in $LISTENING_PORTS; do |
| 115 |
for ip in $(find_ips_bound $port | sed 's/\./_/g'); do |
| 116 |
echo "${ip}_${port}.label ${ip}:${port}"
|
| 117 |
done |
| 118 |
done |
| 119 |
if [ -e $SOCKET ]; then |
| 120 |
if [ $($NETSTAT -an ${FAMILYMARK}unix | grep $SOCKET | wc -l) -gt 0 ]; then
|
| 121 |
echo "socket.label ldapi" |
| 122 |
fi |
| 123 |
fi |
| 124 |
rm -f $TEMP_FILE |
| 125 |
exit 0 |
| 126 |
fi |
| 127 |
|
| 128 |
for port in $LISTENING_PORTS; do |
| 129 |
for ip in $(find_ips_bound $port); do |
| 130 |
echo "$(echo $ip | sed 's/\./_/g')_${port}.value $(grep "^tcp[46]\{0,1\}\([[:space:]]\{1,\}[[:digit:]]\{1,\}\)\{2\}[[:space:]]\{1,\}$ip[\.:]$port[[:space:]].*ESTABLISHED$" $TEMP_FILE | wc -l | sed 's/[[:space:]]*//g')"
|
| 131 |
done |
| 132 |
done |
| 133 |
if [ -e "$SOCKET" ]; then |
| 134 |
echo "socket.value $($NETSTAT -an ${FAMILYMARK}unix | grep $SOCKET | wc -l | sed 's/[[:space:]]*//g')"
|
| 135 |
fi |
| 136 |
|
| 137 |
rm -f $TEMP_FILE |
