Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / network / pinger @ 942bda31

Historique | Voir | Annoter | Télécharger (3,45 ko)

1 2fb4896d Alex Yanchenko
#!/bin/bash
2
# This script is intended for use with Munin to monitor
3
# ping response time from hosts and through interfaces specified.
4
# v. 1.1, 12/16/2007
5
# (c) Alex Yanchenko (yanchenko{at}gmail.com), 2007
6
# Distributed under GPL v.3 (http://www.gnu.org/licenses/gpl-3.0.txt)
7
#
8
# The plugin can utilize automatic configuration,
9
# here are the basic steps (require root privileges):
10
# 1. Copy it as /usr/share/munin/plugins/pinger
11
# 2. Make executable: "chmod 755 /usr/share/munin/plugins/pinger"
12
# 3. Customize hosts, interfaces and ping count below
13
# 4. As pinging takes much time, add a
14
# --
15
# [pinger]
16
# timeout 60
17
# --
18
# record to /etc/munin/munin-node.conf to avoid timeouts.
19
# 5. Run "munin-node-configure --shell", you should see smth like
20
# "ln -s /usr/share/munin/plugins/pinger /etc/munin/plugins/pinger"
21
# 6. Run the proposed command to create a link.
22
# 7. To verify, run "munin-node-configure", you should notice the "pinger" record
23
#
24
# Plugin                     | Used | Suggestions
25
# ------                     | ---- | -----------
26
# pinger                     | yes  |
27
#
28
# 8. Restart munin: "/etc/init.d/munin-node restart"
29
# 9. Hold on for 5 minutes at most and watch the graphs appear.
30
#
31
#%# family=contrib
32
#%# capabilities=autoconf
33
34
#----- PROPERTIES START -----#
35
# An array of interfaces to ping through, space-separated.
36
# In case vnstat is installed, interface names will be fetced
37
# from it, 'nicknames'included.
38
INTERFACE=(eth2 eth3)
39
40
# An array of hosts to ping, space-separated.
41
HOST=(dc.volia.com hosting.rbc.ru slicehost.com)
42
43
# Ping count, higher values lead to more precise
44
# results yet take more time
45
PING=3
46
#----- PROPERTIES END -----#
47
48
# Try to get interface name from vnstat, make sure the name is assigned
49
function IF_NAME() {
50
        ARG=$1
51
        if [[ $(which vnstat &>/dev/null; echo $?) == 0 ]]
52
                then
53
                        IF_NAME="$(vnstat | grep "$ARG" | cut -d" " -f2,3 | cut -d":" -f1)"
54
                else
55
                        IF_NAME="$ARG"
56
        fi
57
        echo $IF_NAME
58
}
59
60
# Ping given host through a given interface
61
function PINGER() {
62
        ping $2 -c${PING} -I$1 | grep "rtt min/avg/max/mdev" | cut -d" " -f4 | cut -d"/" -f2 | cut -d"." -f1
63
}
64
65
case $1 in
66
	autoconf)
67
		which ping
68
	       	if [[ "$?" = "0" ]]; then
69
	               	echo yes
70
	                exit 0
71
	       	else
72
	               	echo "no (ping not present)"
73
	                exit 1
74
	       	fi
75
		;;
76
        config)
77
cat << EOM
78
graph_title Pinger
79
graph_category network
80
graph_info A nice thingy to ping remote hosts.
81
graph_vlabel msec
82
graph_args --base 1000 --lower-limit 0
83
EOM
84
                        for (( i=0; i<"${#HOST[*]}"; i++ ))
85
                                do
86
                                        for (( j=0; j<"${#INTERFACE[*]}"; j++ ))
87
                                                do
88
                                                        echo "${j}_${i}.label $(IF_NAME ${INTERFACE[$j]}) - ${HOST[$i]}"
89
                                        done
90
                        done
91
                ;;
92
        *)
93
                        for (( i=0; i<"${#HOST[*]}"; i++ ))
94
                                do
95
                                        for (( j=0; j<"${#INTERFACE[*]}"; j++ ))
96
                                                do
97
                                                        echo "${j}_${i}.value $(PINGER ${INTERFACE[$j]} ${HOST[$i]})"
98
                                                done
99
                                done
100
                ;;
101
esac