root / plugins / network / ipfwnat_ @ 1bed50bb
Historique | Voir | Annoter | Télécharger (2,8 ko)
| 1 | 38be1552 | Alexey Illarionov | #!/bin/sh |
|---|---|---|---|
| 2 | # |
||
| 3 | # Copyright (C) 2009 Alexey Illarionov <littlesavage@rambler.ru> |
||
| 4 | # |
||
| 5 | # Wildcard plugin to monitor ipfw nat aliasing links count |
||
| 6 | # |
||
| 7 | # Usage: Link ipfwnat_<nat number> to this file. E.g, |
||
| 8 | # |
||
| 9 | # ln -s ipfwnat_ /etc/munin/node.d/ipfwnat_123 |
||
| 10 | # |
||
| 11 | # ... will moninot nat number 123 |
||
| 12 | # |
||
| 13 | # This plugin needs to be run as root. Sample plugins.conf: |
||
| 14 | # |
||
| 15 | # [ipfwnat_*] |
||
| 16 | # user root |
||
| 17 | # |
||
| 18 | # Furthermore, nat configuration must contain "log" option. E.g. |
||
| 19 | # |
||
| 20 | # ipfw nat 123 config ip 198.76.28.4 log |
||
| 21 | # |
||
| 22 | # This plugin is based on the if_ plugin. |
||
| 23 | # |
||
| 24 | # Magic markers (optional - used by munin-config and some installation |
||
| 25 | # scripts): |
||
| 26 | # |
||
| 27 | #%# family=auto |
||
| 28 | #%# capabilities=autoconf suggest |
||
| 29 | |||
| 30 | NAT_NUM=`basename $0 | sed 's/^ipfwnat_//g'` |
||
| 31 | |||
| 32 | ipfw="/sbin/ipfw" |
||
| 33 | |||
| 34 | if [ "$1" = "autoconf" ]; then |
||
| 35 | if [ ! -x $ipfw ]; then |
||
| 36 | echo "no ($ipfw not found)" |
||
| 37 | exit 1 |
||
| 38 | fi |
||
| 39 | |||
| 40 | err=$($ipfw nat show config 2>&1) |
||
| 41 | if [ $? -ne 0 ]; then |
||
| 42 | echo "no ($err)" |
||
| 43 | exit 1 |
||
| 44 | fi |
||
| 45 | |||
| 46 | echo "yes" |
||
| 47 | exit 0 |
||
| 48 | fi |
||
| 49 | |||
| 50 | if [ "$1" = "suggest" ]; then |
||
| 51 | $ipfw nat show config 2> /dev/null | /usr/bin/awk '/nat [0-9]+ .+ log/{print $3;}'
|
||
| 52 | exit 0 |
||
| 53 | fi |
||
| 54 | |||
| 55 | if [ "$1" = "config" ]; then |
||
| 56 | echo "graph_title Ipfw NAT ${NAT_NUM} aliasing links count"
|
||
| 57 | echo 'graph_args --base 1000 -l 0' |
||
| 58 | echo 'graph_vlabel links count' |
||
| 59 | echo 'graph_noscale true' |
||
| 60 | 6c3ce4e1 | dipohl | echo 'graph_category fw' |
| 61 | 38be1552 | Alexey Illarionov | |
| 62 | echo 'tcp.draw AREA' |
||
| 63 | echo 'tcp.label tcp' |
||
| 64 | echo 'tcp.info TCP aliasing links count' |
||
| 65 | |||
| 66 | echo 'udp.draw STACK' |
||
| 67 | echo 'udp.label udp' |
||
| 68 | echo 'udp.info UDP aliasing links count' |
||
| 69 | |||
| 70 | echo 'sctp.draw STACK' |
||
| 71 | echo 'sctp.label sctp' |
||
| 72 | echo 'sctp.info SCTP aliasing links count' |
||
| 73 | |||
| 74 | echo 'icmp.draw STACK' |
||
| 75 | echo 'icmp.label icmp' |
||
| 76 | echo 'icmp.info ICMP aliasing links count' |
||
| 77 | |||
| 78 | echo 'pptp.draw STACK' |
||
| 79 | echo 'pptp.label pptp' |
||
| 80 | echo 'pptp.info PPTP aliasing links count' |
||
| 81 | |||
| 82 | echo 'proto.draw STACK' |
||
| 83 | echo 'proto.label proto' |
||
| 84 | echo 'proto.info proto aliasing links count' |
||
| 85 | |||
| 86 | echo 'fragid.draw STACK' |
||
| 87 | echo 'fragid.label frag_id' |
||
| 88 | echo 'fragid.info Fragment id aliasing links count' |
||
| 89 | |||
| 90 | echo 'fragptr.draw STACK' |
||
| 91 | echo 'fragptr.label frag_ptr' |
||
| 92 | echo 'fragptr.info Fragment ptr aliasing links count' |
||
| 93 | |||
| 94 | echo "graph_info Ipfw NAT ${NAT_NUM} aliasing links count."
|
||
| 95 | exit 0 |
||
| 96 | fi |
||
| 97 | |||
| 98 | $ipfw nat ${NAT_NUM} show 2>/dev/null | /usr/bin/awk '
|
||
| 99 | BEGIN {
|
||
| 100 | res["tcp"] = "U"; |
||
| 101 | res["udp"] = "U"; |
||
| 102 | res["sctp"] = "U"; |
||
| 103 | res["icmp"] = "U"; |
||
| 104 | res["pptp"] = "U"; |
||
| 105 | res["proto"] = "U"; |
||
| 106 | res["frag_id"] = "U"; |
||
| 107 | res["frag_ptr"] = "U"; |
||
| 108 | } |
||
| 109 | /^nat [0-9]+:/{
|
||
| 110 | split($0, a, /[,\/:[:space:]]+/); |
||
| 111 | for (f in a) {
|
||
| 112 | if (a[f] ~ /^[a-z_]+=[0-9]+$/) {
|
||
| 113 | split(a[f], v, /=/); |
||
| 114 | res[v[1]] += (v[2] + 0); |
||
| 115 | } |
||
| 116 | } |
||
| 117 | } |
||
| 118 | END {
|
||
| 119 | printf "tcp.value %s\n", res["tcp"]; |
||
| 120 | printf "udp.value %s\n", res["udp"]; |
||
| 121 | printf "sctp.value %s\n", res["sctp"]; |
||
| 122 | printf "icmp.value %s\n", res["icmp"]; |
||
| 123 | printf "pptp.value %s\n", res["pptp"]; |
||
| 124 | printf "proto.value %s\n", res["proto"]; |
||
| 125 | printf "fragid.value %s\n", res["frag_id"]; |
||
| 126 | printf "fragptr.value %s\n", res["frag_ptr"]; |
||
| 127 | } |
||
| 128 | ' |
