From f672fa493bedf78d9d0859ec6e7c4a25e193cd55 Mon Sep 17 00:00:00 2001 From: salles Date: Thu, 20 Apr 2006 15:01:21 +0200 Subject: [PATCH] On regroupe les plugins munin dans un rpertoire commun toutes les machines darcs-hash:20060420130121-72cb0-50f87f8f01382a2ddc9afec1b1b6e02890d8d32c.gz --- munin/amavis | 54 +++++++++++ munin/audimat.py | 117 ++++++++++++++++++++++ munin/batiments | 64 ++++++++++++ munin/blacklist | 46 +++++++++ munin/hddtemp | 59 ++++++++++++ munin/iptables_ | 44 +++++++++ munin/machines | 22 +++++ munin/mge_batt | 16 +++ munin/mge_hygro | 14 +++ munin/mge_intensite | 24 +++++ munin/mge_temp | 17 ++++ munin/mge_temps | 21 ++++ munin/mge_tension | 23 +++++ munin/ntp_server | 18 ++++ munin/ping_ | 55 +++++++++++ munin/snmp__if__ | 162 +++++++++++++++++++++++++++++++ munin/snmp__if_err_ | 219 ++++++++++++++++++++++++++++++++++++++++++ munin/snmp__load | 121 +++++++++++++++++++++++ munin/snmp__processes | 118 +++++++++++++++++++++++ munin/stats-batiment_ | 132 +++++++++++++++++++++++++ munin/stats-ip | 41 ++++++++ munin/stats-ip_ | 43 +++++++++ munin/uptime | 21 ++++ 23 files changed, 1451 insertions(+) create mode 100755 munin/amavis create mode 100755 munin/audimat.py create mode 100755 munin/batiments create mode 100755 munin/blacklist create mode 100755 munin/hddtemp create mode 100755 munin/iptables_ create mode 100755 munin/machines create mode 100755 munin/mge_batt create mode 100755 munin/mge_hygro create mode 100755 munin/mge_intensite create mode 100755 munin/mge_temp create mode 100755 munin/mge_temps create mode 100755 munin/mge_tension create mode 100755 munin/ntp_server create mode 100755 munin/ping_ create mode 100755 munin/snmp__if__ create mode 100755 munin/snmp__if_err_ create mode 100755 munin/snmp__load create mode 100755 munin/snmp__processes create mode 100755 munin/stats-batiment_ create mode 100755 munin/stats-ip create mode 100755 munin/stats-ip_ create mode 100755 munin/uptime diff --git a/munin/amavis b/munin/amavis new file mode 100755 index 00000000..989af742 --- /dev/null +++ b/munin/amavis @@ -0,0 +1,54 @@ +#!/bin/sh +# +# Plugin to monitor the amavis mail filter. +# +# Usage: Place in /etc/lrrd/client.d/ (or link it there using ln -s) +# +# Parameters understood: +# +# config (required) +# autoconf (optional) +# +# Config variables: +# +# amavislog - file where amavis logs are written +# + +TEMP_FILE=/tmp/lrrd-amavis +AMAVIS_LOG=/var/log/mail/mail.info +OFFSET=/var/lib/munin/plugin-state/amavis.offset +LOGTAIL=`which logtail` + +if [ "$amavislog" ]; then AMAVIS_LOG=$amavislog ; fi + +if [ "$1" = "autoconf" ]; then + if [ -f ${AMAVIS_LOG} -a -x ${LOGTAIL} ] ; then + echo yes + exit 0 + else + echo no + exit 1 + fi +fi + +if [ "$1" = "config" ]; then + echo 'graph_title Amavis filter statistics' + echo 'graph_order virus spam_maybe spam_sure total' + echo 'graph_vlabel nb' + echo 'virus.label virus' + echo 'spam_maybe.label probably spam' + echo 'spam_sure.label surely spam' + echo 'total.label total' + exit 0 +fi + +logtail -o ${OFFSET} -f ${AMAVIS_LOG} ${OFFSET} | grep 'amavis\[.*\]:' > ${TEMP_FILE} +total=`cat ${TEMP_FILE} | wc -l` +virus=`grep infected ${TEMP_FILE} | wc -l` +spamm=`grep 'Passed.*Hits: 1[0-9][.]' ${TEMP_FILE} | wc -l` +spams=`grep 'Passed.*Hits: [2-9][0-9][0-9]*[.]' ${TEMP_FILE} | wc -l` + +echo "virus.value ${virus}" +echo "spam_maybe.value ${spamm}" +echo "spam_sure.value ${spams}" +echo "total.value ${total}" diff --git a/munin/audimat.py b/munin/audimat.py new file mode 100755 index 00000000..7356c2f3 --- /dev/null +++ b/munin/audimat.py @@ -0,0 +1,117 @@ +#! /usr/bin/env python +# -*- coding: iso-8859-15 -*- + +""" +Système de monitoring des abonnés au différents flux multicast + +Frédéric Pauget, Nicolas Salles, Etienne Chové +""" + +import sys, os +sys.path.append('/usr/scripts/gestion') +from hptools import hpswitch +from annuaires import all_switchs, uplink_prises + +#################################################################### +## Définition des chaines à audimater +#################################################################### + +# On construit un dictionnaire au format "ip" : "nom_de_la_chaine" + + +# On log les chaines qui font des annonces sap +# on essaie de télécharger le fichier sap.txt +# si on y arrive pas on continue avec l'ancien + +chaines = {} + +try : + os.system("/usr/bin/wget http://television.crans.org/sap.txt -O /tmp/sap.txt -q 2> /dev/null") +except : + pass + +# lecture du fichier +diffusion = open ('/tmp/sap.txt','r') +for l in diffusion.readlines() : + chaines[l.rstrip().split(":")[1]] = l.split(":")[0].replace('.','_').replace('-','_')[0:18] + +#################################################################### +## Configuration pour munin +#################################################################### + +if 'autoconf' in sys.argv : + print "yes" # Surement y rajouter le up du backbone, ... + sys.exit(0) + +if 'config' in sys.argv : + print "host_name backbone" + print "graph_title AudimatTV"; + print "graph_args --base 1000"; + print "graph_vlabel nb clients/chaines"; + inc = 0 + chaines = chaines.values() + chaines.sort() + for nom in chaines : + if not nom : continue + nom1 = nom.replace(' ','_') + print "%s.label %s" % (nom1, nom) + if inc == 0 : + print "%s.draw AREA" % nom1 + else: + print "%s.draw STACK" % nom1 + inc = 1 + print "total.label Total" + sys.exit(0) + +#################################################################### +## Mesure de l'audimat, lancé par cron à cause du timeout de munin +#################################################################### + +if 'generate' in sys.argv : + stats = {} # { IP : [ prises ] } + + for switch in all_switchs() : + # on vérifie que le switch est pingable + if os.system('ping -c 3 %s > /dev/null 2> /dev/null' % switch ) : + continue + + sw = hpswitch(switch) + switch=switch.split('.')[0] + if switch[-1].isalpha() : + bat = switch[-1].lower() + sw_num = 0 + else : + bat = switch[-3].lower() + sw_num = int(switch[-1]) + + for ip, liste in sw.multicast().items() : + stats.setdefault(ip,[]) + for port in liste : + num_port = 100 * sw_num + int(port) + if num_port not in uplink_prises[bat].keys() : + stats[ip].append('%s%03i' % (bat, num_port) ) + + total = 0 + + f = open('/tmp/audimat','w') + + for ip, nom in chaines.items() : + if not nom : continue + nb_clients = len(stats.get(ip,[])) + total += nb_clients + if 'prises' in sys.argv : + f.write( "%s (%i) : %s\n" % (nom, nb_clients, ', '.join(stats.get(ip,[])).upper() ) ) + else : + f.write( "%s.value %i\n" % ( nom.replace(' ','_'), nb_clients ) ) + + f.write("total.value %i" % total ) + sys.exit(0) + +#################################################################### +## Retour des audimats pour munin +#################################################################### + +try : + print file("/tmp/audimat").read() +except : + pass diff --git a/munin/batiments b/munin/batiments new file mode 100755 index 00000000..6808494e --- /dev/null +++ b/munin/batiments @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +fichier = '/var/lib/munin/tmp/batiments' + +import sys,os + +try : + arg = sys.argv[1] +except : + arg = '' + +if arg == "config" : + print 'host_name adherents' + print 'graph_title Adhérents par batiments' + print "graph_args --base 1000 --lower-limit 0" + print "graph_vlabel nb d'adhérents" + print 'bata.label Bâtiment A' + print 'bata.draw AREA' + print 'batb.label Bâtiment B' + print 'batb.draw STACK' + print 'batc.label Bâtiment C' + print 'batc.draw STACK' + print 'batg.label Bâtiment G' + print 'batg.draw STACK' + print 'bath.label Bâtiment H' + print 'bath.draw STACK' + print 'bati.label Bâtiment I' + print 'bati.draw STACK' + print 'batj.label Bâtiment J' + print 'batj.draw STACK' + print 'batm.label Bâtiment M' + print 'batm.draw STACK' + print 'batp.label PdJ' + print 'batp.draw STACK' + print 'wifi.label Wifi' + print 'wifi.draw STACK' + print 'total.label Total' +elif arg == "fichier" : + + file = open(fichier,'w') + + sys.path.append('/usr/scripts/gestion') + from ldap_crans import crans_ldap + db = crans_ldap() + def count(filtre) : + data = db.search(filtre) + return len(data['adherent']) + len(data['club']) + + total = 0 + for bat in 'abcghijmp' : + nb = count('paiement=ok&chbre=%s*' % bat) + total += nb + file.write("bat%s.value %d\n" % (bat, nb)) + + nb = count('paiement=ok&chbre=EXT') + total += nb + file.write("wifi.value %d\n" % nb) + + file.write("total.value %d\n" % total) + + file.close() +else : + os.system('cat %s' % fichier) diff --git a/munin/blacklist b/munin/blacklist new file mode 100755 index 00000000..cf543ae3 --- /dev/null +++ b/munin/blacklist @@ -0,0 +1,46 @@ +#!/bin/sh + +if [ "$1" = "config" ]; then + + echo 'host_name adherents' + echo 'graph_title Blacklist' + echo "graph_args --base 1000 --lower-limit 0" + echo "graph_vlabel nb de machines" + echo 'carte_et.label Certif. études' + echo 'carte_et.draw AREA' + echo 'chbre.label Chambre invalide' + echo 'chbre.draw STACK' + echo 'upload.label Upload' + echo 'upload.draw STACK' + echo 'p2p.label P2P' + echo 'p2p.draw STACK' + echo 'auto_upload.label Autodisc. Upload' + echo 'auto_upload.draw STACK' + echo 'auto_p2p.label Autodisc. P2P' + echo 'auto_p2p.draw STACK' + echo 'virus.label Virus' + echo 'virus.draw STACK' + echo 'warez.label Warez' + echo 'warez.draw STACK' + echo 'total.label Total' + exit 0 +fi + +echo -n "carte_et.value " +cat /etc/squid/blacklist_carte_et | wc -l +echo -n "chbre.value " +cat /etc/squid/blacklist_chbre | wc -l +echo -n "virus.value " +cat /etc/squid/blacklist_virus | wc -l +echo -n "upload.value " +cat /etc/squid/blacklist_upload | wc -l +echo -n "p2p.value " +cat /etc/squid/blacklist_p2p | wc -l +echo -n "auto_upload.value " +cat /etc/squid/blacklist_autodisc_upload | wc -l +echo -n "auto_p2p.value " +cat /etc/squid/blacklist_autodisc_p2p | wc -l +echo -n "warez.value " +cat /etc/squid/blacklist_warez | wc -l +echo -n "total.value " +cat /etc/squid/blacklist_* | wc -l diff --git a/munin/hddtemp b/munin/hddtemp new file mode 100755 index 00000000..2476f71b --- /dev/null +++ b/munin/hddtemp @@ -0,0 +1,59 @@ +#!/bin/sh +# +# Plugin to monitor harddrive temperatures through SMART. +# +# client-conf.d/-options: +# +# drives -- List drives to monitor. E.g. "hda hdc". +# +# $Log: hddtemp,v $ +# Revision 1.1 2006-04-20 13:01:20 salles +# On regroupe les plugins munin dans un répertoire commun à toutes les machines +# +# Revision 1.1 2004/10/08 14:59:48 salles +# Ajout des scripts persos pour les graphes munins. +# Apparition d'un graphe pour compter les blacklistés. +# +# Revision 1.2 2004/01/29 19:39:00 jimmyo +# Generic plugins now use printf instead of echo -n, as this is more portable (SF#885564) +# +# Revision 1.1 2004/01/02 18:50:00 jimmyo +# Renamed occurrances of lrrd -> munin +# +# Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo +# Import of LRRD CVS tree after renaming to Munin +# +# Revision 1.2 2003/12/18 19:16:00 jimmyo +# Changes from Alexandre +# +# Revision 1.1 2003/12/18 19:04:37 jimmyo +# New plugin: Alexandre Dupouy contributed "hddtemp". +# +# +#%# family=contrib + +HDDTEMP=/usr/sbin/hddtemp + +drives="sda sdb sdc sdd" + +if [ "$1" = "autoconf" ]; then + if [ -x "$HDDTEMP" ]; then + echo yes + exit 0 + else + echo no + exit 1 + fi +fi + +if [ "$1" = "config" ]; then + + echo 'graph_title HDD temperature' + echo 'graph_args --base 1000 -l 0' + echo 'graph_vlabel temp in °C' + for a in $drives ; do echo $a.label $a "`$HDDTEMP -q /dev/$a | cut -f 2 -d ':' | cut -d ' ' -f3`" ; done + exit 0 +fi + +for a in $drives ; do printf "$a.value " ; echo "`$HDDTEMP -q /dev/$a | cut -f 3 -d ':' | cut -d ' ' -f2`" | awk -F \° '{print $1}' ; done + diff --git a/munin/iptables_ b/munin/iptables_ new file mode 100755 index 00000000..42aafb5e --- /dev/null +++ b/munin/iptables_ @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +# Compteur des règles iptables + +import sys,commands,string + +# On prend l'argument pour définir la table à analyser +TABLE = sys.argv[0].split('_')[1] + +if TABLE : + IPTABLES = "iptables -t %s -L " % TABLE +else : + IPTABLES = "iptables -L " + +try : + arg = sys.argv[1] +except : + arg = '' + +CHAINS = commands.getoutput('%s | grep Chain | awk \'{print $2}\'' % IPTABLES).split('\n') + +if arg == "config" : + print 'graph_title Firewall %s' % string.lower(TABLE) + print 'graph_args --base 1000 --lower-limit 0' + print 'graph_category network' + print "graph_vlabel nb de regles" + for chain in CHAINS : + nom = string.lower(chain.replace('_', '').replace('-', '')) + label = chain.replace('_', '-') + print "%s.label %s" % (nom, label) + if CHAINS.index(chain) == 0 : + print "%s.draw AREA" % nom + else : + print "%s.draw STACK" % nom + if label == "TEST-MAC-IP" : + print "%s.warning 100:" % nom + print "%s.critical 1:" % nom + +else : + for chain in CHAINS : + nom = string.lower(chain.replace('_', '').replace('-', '')) + value = int(commands.getoutput('%s %s | wc -l' % (IPTABLES, chain))) - 2 + print "%s.value %d" % (nom, value) diff --git a/munin/machines b/munin/machines new file mode 100755 index 00000000..5cde379f --- /dev/null +++ b/munin/machines @@ -0,0 +1,22 @@ +#!/bin/sh + +if [ "$1" = "config" ]; then + +# echo 'host_name adherents' + echo 'graph_title Machines connectées' + echo "graph_args --base 1000 --lower-limit 0" + echo "graph_vlabel nombre de machines" + echo 'fixe.label Fixe' + echo 'fixe.draw AREA' + echo 'adm.label ADM' + echo 'adm.draw STACK' + echo 'ens.label ENS' + echo 'ens.draw STACK' + echo 'total.label Total' + exit 0 +fi + +echo "fixe.value" `arp -a -i crans | wc -l` +echo "adm.value" `arp -a -i crans.2 | wc -l` +echo "ens.value" `arp -a -i ens | wc -l` +echo "total.value" `arp -a | wc -l` diff --git a/munin/mge_batt b/munin/mge_batt new file mode 100755 index 00000000..f48b5a3a --- /dev/null +++ b/munin/mge_batt @@ -0,0 +1,16 @@ +#!/bin/sh +# +# Plugin to monitor MGE battery state. + +if [ "$1" = "config" ]; then + echo 'host_name pulsar.crans.org' + echo 'graph_category Batteries' + echo 'graph_title Etat batteries' + echo 'graph_vlabel charge (%)' + echo 'pcent.label Charge' + exit 0 +fi + +cmd="snmpget -O vq -v1 -c public pulsar.adm.crans.org SNMPv2-SMI::enterprises.705.1." + +echo "pcent.value $(${cmd}5.4.0)" diff --git a/munin/mge_hygro b/munin/mge_hygro new file mode 100755 index 00000000..d7d86fb8 --- /dev/null +++ b/munin/mge_hygro @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ "$1" = "config" ]; then + echo 'host_name pulsar.crans.org' + echo 'graph_category Environnement' + echo 'graph_title Hygrométrie 0B' + echo 'graph_vlabel Humitidé (%)' + echo 'hygro.label Humidité 0B' + exit 0 +fi + +cmd="snmpget -O vq -v1 -c public pulsar.adm.crans.org SNMPv2-SMI::enterprises.705.1." + +echo "hygro.value $(${cmd}8.2.0)" diff --git a/munin/mge_intensite b/munin/mge_intensite new file mode 100755 index 00000000..949af656 --- /dev/null +++ b/munin/mge_intensite @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Plugin to monitor MGE battery state. + +if [ "$1" = "config" ]; then + echo 'host_name pulsar.crans.org' + echo 'graph_category B4' + echo 'graph_args --lower-limit 0' + echo 'graph_title Intensité' + echo 'graph_vlabel I (A)' + echo 'input.label Entrée' + echo 'input.min 0' + echo 'output.label Sortie' + echo 'output.min 0' + exit 0 +fi + +cmd="snmpget -O vq -v1 -c public pulsar.adm.crans.org SNMPv2-SMI::enterprises.705.1." + +input=$(${cmd}6.2.1.6.0) +output=$(${cmd}7.2.1.5.0) + +echo "input.value $(($input/10)).$(($input%10))" +echo "output.value $(($output/10)).$(($output%10))" diff --git a/munin/mge_temp b/munin/mge_temp new file mode 100755 index 00000000..afcacb28 --- /dev/null +++ b/munin/mge_temp @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ "$1" = "config" ]; then + echo 'host_name pulsar.crans.org' + echo 'graph_category Environnement' + echo 'graph_title Température 0B' + echo 'graph_vlabel Température en (°C)' + echo 'temp.label Température 0B' + echo 'temp.warning 22' + echo 'temp.critical 24' + exit 0 +fi + +cmd="snmpget -O vq -v1 -c public pulsar.adm.crans.org SNMPv2-SMI::enterprises.705.1." + +t=$(${cmd}8.1.0) +echo "temp.value $(($t/10)).$(($t%10))" diff --git a/munin/mge_temps b/munin/mge_temps new file mode 100755 index 00000000..5e61cc9a --- /dev/null +++ b/munin/mge_temps @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Plugin to monitor MGE battery state. + +if [ "$1" = "config" ]; then + echo 'host_name pulsar.crans.org' + echo 'graph_category Batteries' + echo 'graph_title Autonomie' + echo 'graph_vlabel t (minutes)' + echo 'remain.label Autonomie restante' + echo 'charg.label Temps de recharge' + exit 0 +fi + +cmd="snmpget -O vq -v1 -c public pulsar.adm.crans.org SNMPv2-SMI::enterprises.705.1." + +remain=$(${cmd}5.1.0) # autonomie restante +charg=$(${cmd}5.8.0) # temps avant charge complère des batteries +echo "remain.value $(($remain/60)).$(($remain%60*10/6))" +echo "charg.value $(($charg/60)).$(($charg%60*10/6))" + diff --git a/munin/mge_tension b/munin/mge_tension new file mode 100755 index 00000000..783146af --- /dev/null +++ b/munin/mge_tension @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Plugin to monitor MGE battery state. + +if [ "$1" = "config" ]; then + echo 'host_name pulsar.crans.org' + echo 'graph_category B4' + echo 'graph_title Tensions' + echo 'graph_vlabel U (V)' + echo 'input.label Entrée' + echo 'input.min 0' + echo 'output.label Sortie' + echo 'output.min 0' + exit 0 +fi + +cmd="snmpget -O vq -v1 -c public pulsar.adm.crans.org SNMPv2-SMI::enterprises.705.1." + +input=$(${cmd}6.2.1.2.0) +output=$(${cmd}7.2.1.2.0) + +echo "input.value $(($input/10)).$(($input%10))" +echo "output.value $(($output/10)).$(($output%10))" diff --git a/munin/ntp_server b/munin/ntp_server new file mode 100755 index 00000000..4b8138b1 --- /dev/null +++ b/munin/ntp_server @@ -0,0 +1,18 @@ +#!/bin/sh + +if [ "$1" = "autoconf" ]; then + echo yes + exit 0 +fi + +if [ "$1" = "config" ]; then + echo "graph_title NTP servers offset" + echo 'graph_args --base 1000 -l 0 ' + echo 'graph_vlabel offset in µsec' + ntpq -p | grep -i '^[*+-]' | awk '{gsub("^.","",$1) ; gsub("[.-]", "_", $1); print $1 ".label " $1}' + exit 0 +fi; + +ntpq -p | grep -i '^[*+-]' | awk '{gsub("^.","",$1) ; gsub("[.-]", "_", $1); print $1 ".value " $9}' + + diff --git a/munin/ping_ b/munin/ping_ new file mode 100755 index 00000000..46b77287 --- /dev/null +++ b/munin/ping_ @@ -0,0 +1,55 @@ +#!/bin/sh +# +# Copyright (C) 2004 Jimmy Olsen +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 2 dated June, +# 1991. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# Plugin to monitor ping times +# +# Parameters: +# +# ping_args - Arguments to ping (default "-c 2") +# ping_args2 - Arguments after the host name (required for Solaris) +# ping - Ping program to use +# host - Host to ping +# +# Arguments for Solaris: +# ping_args -s +# ping_args2 56 2 +# +#%# family=manual + +file_host=`basename $0 | sed 's/^ping_//g'` +host=${host:-${file_host:-www.google.com}} + +if [ "$1" = "config" ]; then + echo host_name $host + echo graph_title Ping times from sila + echo 'graph_args --base 1000 -l 0' + echo 'graph_vlabel seconds' + echo 'graph_category network' + echo 'graph_info This graph shows ping RTT statistics.' + echo "ping.label $host" + echo "ping.info Ping RTT statistics for $host." + echo 'ping.draw LINE2' + echo 'packetloss.label packet loss' + echo 'packetloss.graph no' + exit 0 +fi + + +${ping:-ping} ${ping_args:-'-c 2'} ${host} ${ping_args2} | perl -n -e 'print "ping.value ", $1 / 1000, "\n" if m@min/avg/max.*\s\d+(?:\.\d+)?/(\d+(?:\.\d+)?)/\d+(?:\.\d+)?@; print "packetloss.value $1\n" if /(\d+)% packet loss/;' + diff --git a/munin/snmp__if__ b/munin/snmp__if__ new file mode 100755 index 00000000..4dbfb42a --- /dev/null +++ b/munin/snmp__if__ @@ -0,0 +1,162 @@ +#!/usr/bin/perl -w +# +# $Log: snmp__if__,v $ +# Revision 1.1 2006-04-20 13:01:21 salles +# On regroupe les plugins munin dans un répertoire commun à toutes les machines +# +# Revision 1.1 2004/11/14 10:36:39 salles +# Ajout des plugins personnalisés +# +# Revision 1.2 2004/07/27 14:32:46 salles +# nom en premier pour qu'on les ait dans l'ordre alphabétique. mo² +# +# Revision 1.1 2004/07/27 12:17:28 bernat +# Et tournez manège ! +# +# Revision 1.1 2004/07/27 11:37:16 bernat +# Deplacement (encore !) +# +# Revision 1.1 2004/07/27 11:27:43 bernat +# Deplacement (pour pas qu'il soit executé) +# +# Revision 1.1 2004/07/27 11:19:26 bernat +# SNMP un peu modifié pour avoir le nom des bats en "clair" +# +# Revision 1.4 2004/04/30 16:58:14 jimmyo +# Added max. +# +# Revision 1.3 2004/02/22 20:17:58 jimmyo +# Typo fix +# +# Revision 1.2 2004/02/18 21:54:56 jimmyo +# Did a bit of work on the snmp-thingie. +# +# Revision 1.1 2004/01/02 18:50:00 jimmyo +# Renamed occurrances of lrrd -> munin +# +# Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo +# Import of LRRD CVS tree after renaming to Munin +# +# Revision 1.1 2003/12/19 20:53:45 jimmyo +# Created by jo +# +# + +use strict; +use Net::SNMP; + +my $DEBUG = 1; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; +my $iface = $ENV{interface} || undef; +my $name = undef; + +my $response; + +if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") +{ + print "number 1.3.6.1.2.1.2.1.0\n"; + print "index 1.3.6.1.2.1.2.2.1.1.\n"; + print "require 1.3.6.1.2.1.2.2.1.3. ^6\$\n"; # Type + print "require 1.3.6.1.2.1.2.2.1.5. [1-9]\n"; # Speed + exit 0; +} + +if ($0 =~ /^(?:|.*\/)snmp_([^_]+)_if_([^_]+)_(.+)$/) +{ + $host = $1; + $name = $2; + $iface = $3; + if ($host =~ /^([^:]+):(\d+)$/) + { + $host = $1; + $port = $2; + } +} +else +{ + print "# Debug: $0 -- $1 -- $3\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my $ifEntryDescr = "1.3.6.1.2.1.2.2.1.2.$iface"; +my $ifEntrySpeed = "1.3.6.1.2.1.2.2.1.5.$iface"; +my $ifEntryStatus = "1.3.6.1.2.1.2.2.1.8.$iface"; +my $ifEntryInOctets = "1.3.6.1.2.1.2.2.1.10.$iface"; +my $ifEntryOutOctets = "1.3.6.1.2.1.2.2.1.16.$iface"; + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port + ); + +if (!defined ($session)) +{ + die "Croaking: $error"; +} + +if ($ARGV[0] and $ARGV[0] eq "config") +{ + print "host_name $host\n"; +# if (!defined ($response = $session->get_request($ifEntryDescr))) +# { +# die "Croaking: " . $session->error(); +# } +# my $name = $response->{$ifEntryDescr}; + my $warn = undef; + if (defined ($response = $session->get_request($ifEntrySpeed))) + { + $warn = $response->{$ifEntrySpeed}/8; + } + print "graph_title $name traffic\n"; + print "graph_order recv send\n"; + print "graph_args --base 1000\n"; + print "graph_vlabel bps in (-) / out (+)\n"; + print "recv.label recv\n"; + print "recv.type COUNTER\n"; + print "recv.graph no\n"; + print "recv.cdef recv,8,*\n"; + print "recv.max 2000000000\n"; + print "recv.warn ", (-$warn), "\n" if defined $warn; + print "send.label bps\n"; + print "send.type COUNTER\n"; + print "send.negative recv\n"; + print "send.cdef send,8,*\n"; + print "send.max 2000000000\n"; + print "send.warn $warn\n" if defined $warn; + exit 0; +} + +my $status = 1; +if (defined ($response = $session->get_request($ifEntryStatus))) +{ + $status = $response->{$ifEntryStatus}; +} + +if ($status == 2) +{ + print "recv.value U\n"; + print "send.value U\n"; + exit 0; +} + +if (defined ($response = $session->get_request($ifEntryInOctets))) +{ + print "recv.value ", $response->{$ifEntryInOctets}, "\n"; +} +else +{ + print "recv.value U\n"; +} + +if (defined ($response = $session->get_request($ifEntryOutOctets))) +{ + print "send.value ", $response->{$ifEntryOutOctets}, "\n"; +} +else +{ + print "send.value U\n"; +} diff --git a/munin/snmp__if_err_ b/munin/snmp__if_err_ new file mode 100755 index 00000000..0731c381 --- /dev/null +++ b/munin/snmp__if_err_ @@ -0,0 +1,219 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2004 Jimmy Olsen, Dagfinn Ilmari Mannsaaker +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 2 dated June, +# 1991. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# $Log: snmp__if_err_,v $ +# Revision 1.1 2006-04-20 13:01:21 salles +# On regroupe les plugins munin dans un répertoire commun à toutes les machines +# +# Revision 1.16 2004/12/10 18:51:43 jimmyo +# linux/apt* has been forced to LANG=C, to get predictable output. +# +# Revision 1.15 2004/12/10 10:47:47 jimmyo +# Change name from ${scale} to ${graph_period}, to be more consistent. +# +# Revision 1.14 2004/12/09 22:12:55 jimmyo +# Added "graph_period" option, to make "graph_sums" usable. +# +# Revision 1.13 2004/11/21 00:16:56 jimmyo +# Changed a lot of plugins so they use DERIVE instead of COUNTER. +# +# Revision 1.12 2004/11/20 22:37:21 jimmyo +# Strip strange characters. +# +# Revision 1.11 2004/11/20 22:10:49 jimmyo +# Clean up output of plugin a bit. +# +# Revision 1.10 2004/11/20 22:06:22 jimmyo +# Clean up output of plugin a bit. +# +# Revision 1.9 2004/11/16 20:08:26 jimmyo +# License cleanups. +# +# Revision 1.8 2004/11/12 20:28:03 ilmari +# No debugging info by default +# +# Revision 1.7 2004/09/08 15:25:33 ilmari +# Use /usr/bin/perl in all perl shebang lines. +# +# Revision 1.6 2004/09/07 13:19:22 ilmari +# SNMP plugins now honour the "host" environment variable if they can't deduce the hostname from zsh. +# +# Revision 1.5 2004/09/05 12:00:18 jimmyo +# Set family and capabilities. +# +# Revision 1.4 2004/09/04 21:58:28 jimmyo +# Set category and info fields. +# +# Revision 1.3 2004/09/04 19:12:14 jimmyo +# Accept ppp interfaces as well as ethernet interfaces. +# +# Revision 1.2 2004/04/30 22:20:22 jimmyo +# It should now even work. :-) +# +# Revision 1.1 2004/04/30 16:59:45 jimmyo +# New SNMP plugin: if_err +# +# Revision 1.3 2004/02/22 20:17:58 jimmyo +# Typo fix +# +# Revision 1.2 2004/02/18 21:54:56 jimmyo +# Did a bit of work on the snmp-thingie. +# +# Revision 1.1 2004/01/02 18:50:00 jimmyo +# Renamed occurrances of lrrd -> munin +# +# Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo +# Import of LRRD CVS tree after renaming to Munin +# +# Revision 1.1 2003/12/19 20:53:45 jimmyo +# Created by jo +# +# +#%# family=snmpauto +#%# capabilities=snmpconf + +use strict; +use Net::SNMP; + +my $DEBUG = 0; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; +my $iface = $ENV{interface} || undef; + +my $response; + +if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") +{ + print "number 1.3.6.1.2.1.2.1.0\n"; + print "index 1.3.6.1.2.1.2.2.1.1.\n"; + print "require 1.3.6.1.2.1.2.2.1.3. ^(6|23)\$\n"; # Type + print "require 1.3.6.1.2.1.2.2.1.5. [1-9]\n"; # Speed + exit 0; +} + +if ($0 =~ /^(?:|.*\/)snmp_([^_]+)_if_err_(.+)$/) +{ + $host = $1; + $iface = $2; + if ($host =~ /^([^:]+):(\d+)$/) + { + $host = $1; + $port = $2; + } +} +elsif (!defined($host)) +{ + print "# Debug: $0 -- $1 -- $2\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my $ifEntryDescr = "1.3.6.1.2.1.31.1.1.1.18.$iface"; +my $ifEntrySpeed = "1.3.6.1.2.1.2.2.1.5.$iface"; +my $ifEntryStatus = "1.3.6.1.2.1.2.2.1.8.$iface"; +my $ifEntryInErrors = "1.3.6.1.2.1.2.2.1.14.$iface"; +my $ifEntryOutErrors = "1.3.6.1.2.1.2.2.1.20.$iface"; + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port + ); + +if (!defined ($session)) +{ + die "Croaking: $error"; +} + +if ($ARGV[0] and $ARGV[0] eq "config") +{ + print "host_name $host\n"; + if (!defined ($response = $session->get_request($ifEntryDescr))) + { + die "Croaking: " . $session->error(); + } + my $name = $response->{$ifEntryDescr}; +# $name =~ s/[^\w\s]//g; + my $warn = undef; + if (defined ($response = $session->get_request($ifEntrySpeed))) + { + $warn = $response->{$ifEntrySpeed}/8; + } + if (length ($name) > 15) + { + print "graph_title Interface $iface errors\n"; + } + else + { + print "graph_title Interface $name errors\n"; + } + print "graph_order recv send\n"; + print "graph_args --base 1000\n"; + print "graph_vlabel bits in (-) / out (+) per \${graph_period}\n"; + print "graph_category network\n"; + print "graph_info This graph shows errors for the \"$name\" network interface.\n"; + print "send.info Bits unsuccessfully sent/received by this interface.\n"; + print "recv.label recv\n"; + print "recv.type DERIVE\n"; + print "recv.graph no\n"; + print "recv.cdef recv,8,*\n"; + print "recv.max 2000000000\n"; + print "recv.min 0\n"; + print "recv.warn ", (-$warn), "\n" if defined $warn; + print "send.label bps\n"; + print "send.type DERIVE\n"; + print "send.negative recv\n"; + print "send.cdef send,8,*\n"; + print "send.max 2000000000\n"; + print "send.min 0\n"; + print "send.warn 10\n"; + exit 0; +} + +my $status = 1; +if (defined ($response = $session->get_request($ifEntryStatus))) +{ + $status = $response->{$ifEntryStatus}; +} + +if ($status == 2) +{ + print "recv.value U\n"; + print "send.value U\n"; + exit 0; +} + +if (defined ($response = $session->get_request($ifEntryInErrors))) +{ + print "recv.value ", $response->{$ifEntryInErrors}, "\n"; +} +else +{ + print "recv.value U\n"; +} + +if (defined ($response = $session->get_request($ifEntryOutErrors))) +{ + print "send.value ", $response->{$ifEntryOutErrors}, "\n"; +} +else +{ + print "send.value U\n"; +} diff --git a/munin/snmp__load b/munin/snmp__load new file mode 100755 index 00000000..6c8e551a --- /dev/null +++ b/munin/snmp__load @@ -0,0 +1,121 @@ +#!/usr/bin/perl -w +# +# $Log: snmp__load,v $ +# Revision 1.1 2006-04-20 13:01:21 salles +# On regroupe les plugins munin dans un répertoire commun à toutes les machines +# +# Revision 1.1 2004/11/14 10:36:39 salles +# Ajout des plugins personnalisés +# +# Revision 1.2 2004/08/03 14:46:38 bernat +# Rattache les graphes a l'hote qu'on interroge +# +# Revision 1.1 2004/08/03 14:45:26 bernat +# Import initial +# Commit oublié de momo +# +# Revision 1.1 2004/05/01 10:50:53 jimmyo +# New SNMP plugins users and load. +# +# Revision 1.1 2004/04/30 20:13:53 jimmyo +# New SNMP plugin for number of procs. +# +# Revision 1.1 2004/04/29 22:29:57 jimmyo +# New SNMP plugin for disk usage. +# +# Revision 1.3 2004/02/22 20:17:58 jimmyo +# Typo fix +# +# Revision 1.2 2004/02/18 21:54:56 jimmyo +# Did a bit of work on the snmp-thingie. +# +# Revision 1.1 2004/01/02 18:50:00 jimmyo +# Renamed occurrances of lrrd -> munin +# +# Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo +# Import of LRRD CVS tree after renaming to Munin +# +# Revision 1.1 2003/12/19 20:53:45 jimmyo +# Created by jo +# +# + +use strict; +use Net::SNMP; + +my $DEBUG = 0; +my $MAXLABEL = 20; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; +my $iface = $ENV{interface} || undef; + +my $response; + +if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") +{ + print "require 1.3.6.1.4.1.2021.10.1.3.2 [0-9]\n"; # Number + exit 0; +} + +if ($0 =~ /^(?:|.*\/)snmp_([^_]+)_load$/) +{ + $host = $1; + if ($host =~ /^([^:]+):(\d+)$/) + { + $host = $1; + $port = $2; + } +} +else +{ + print "# Debug: $0 -- $1\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port + ); + +if (!defined ($session)) +{ + die "Croaking: $error"; +} + +if (defined $ARGV[0] and $ARGV[0] eq "config") +{ + print "host_name $host\n"; + print "graph_title Load average +graph_args --base 1000 -l 0 +graph_vlabel load +load.label load +load.draw LINE2 +"; + + exit 0; +} + +print "load.value ", &get_single ($session, "1.3.6.1.4.1.2021.10.1.3.2"), "\n"; + +sub get_single +{ + my $handle = shift; + my $oid = shift; + + print "# Getting single $oid...\n" if $DEBUG; + + $response = $handle->get_request ($oid); + + if (!defined $response->{$oid}) + { + return undef; + } + else + { + return $response->{$oid}; + } +} + diff --git a/munin/snmp__processes b/munin/snmp__processes new file mode 100755 index 00000000..ec966fdf --- /dev/null +++ b/munin/snmp__processes @@ -0,0 +1,118 @@ +#!/usr/bin/perl -w +# +# $Log: snmp__processes,v $ +# Revision 1.1 2006-04-20 13:01:21 salles +# On regroupe les plugins munin dans un répertoire commun à toutes les machines +# +# Revision 1.1 2004/11/14 10:36:39 salles +# Ajout des plugins personnalisés +# +# Revision 1.2 2004/08/03 14:46:38 bernat +# Rattache les graphes a l'hote qu'on interroge +# +# Revision 1.1 2004/08/03 14:45:26 bernat +# Import initial +# Commit oublié de momo +# +# Revision 1.1 2004/04/30 20:13:53 jimmyo +# New SNMP plugin for number of procs. +# +# Revision 1.1 2004/04/29 22:29:57 jimmyo +# New SNMP plugin for disk usage. +# +# Revision 1.3 2004/02/22 20:17:58 jimmyo +# Typo fix +# +# Revision 1.2 2004/02/18 21:54:56 jimmyo +# Did a bit of work on the snmp-thingie. +# +# Revision 1.1 2004/01/02 18:50:00 jimmyo +# Renamed occurrances of lrrd -> munin +# +# Revision 1.1.1.1 2004/01/02 15:18:07 jimmyo +# Import of LRRD CVS tree after renaming to Munin +# +# Revision 1.1 2003/12/19 20:53:45 jimmyo +# Created by jo +# +# + +use strict; +use Net::SNMP; + +my $DEBUG = 0; +my $MAXLABEL = 20; + +my $host = $ENV{host} || undef; +my $port = $ENV{port} || 161; +my $community = $ENV{community} || "public"; +my $iface = $ENV{interface} || undef; + +my $response; + +if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") +{ + print "require 1.3.6.1.2.1.25.1.6.0 [0-9]\n"; # Number + exit 0; +} + +if ($0 =~ /^(?:|.*\/)snmp_([^_]+)_processes$/) +{ + $host = $1; + if ($host =~ /^([^:]+):(\d+)$/) + { + $host = $1; + $port = $2; + } +} +else +{ + print "# Debug: $0 -- $1\n" if $DEBUG; + die "# Error: couldn't understand what I'm supposed to monitor."; +} + +my ($session, $error) = Net::SNMP->session( + -hostname => $host, + -community => $community, + -port => $port + ); + +if (!defined ($session)) +{ + die "Croaking: $error"; +} + +if (defined $ARGV[0] and $ARGV[0] eq "config") +{ + print "host_name $host\n"; + print "graph_title Number of Processes +graph_args --base 1000 -l 0 +graph_vlabel number of processes +processes.label processes +processes.draw LINE2 +"; + + exit 0; +} + +print "processes.value ", &get_single ($session, "1.3.6.1.2.1.25.1.6.0"), "\n"; + +sub get_single +{ + my $handle = shift; + my $oid = shift; + + print "# Getting single $oid...\n" if $DEBUG; + + $response = $handle->get_request ($oid); + + if (!defined $response->{$oid}) + { + return undef; + } + else + { + return $response->{$oid}; + } +} + diff --git a/munin/stats-batiment_ b/munin/stats-batiment_ new file mode 100755 index 00000000..96a992a0 --- /dev/null +++ b/munin/stats-batiment_ @@ -0,0 +1,132 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +# Gestion des prises dans les batiments +# Pour le moment on ne compte pas les prises CRANS + +import sys,os,string + +sys.path.append('/usr/scripts/gestion') +from annuaires import reverse, chbre_prises, bat_switchs, all_switchs, uplink_prises +from hptools import hpswitch +from ldap_crans import crans_ldap + +# Le fichier de nombre d'adhérent par batiments +stats_batiments = "/var/lib/munin/tmp/batiments" + +BAT = sys.argv[0].split('_')[1] + +# Pour les batiments non manageables on indique le nb de prises +BAT_CHBRES = {'g' : 312} + +def switch_prise(bat, prise) : + ''' Renvoie le switch et la prise associé au numéro de la prise ''' + switch = "bat%s-%i" % (bat, prise/100) + prise = prise % 100 + return (switch, prise) + +multiprise = map(lambda x : len(x[1])>1 and x[0], reverse(BAT).items()) +while False in multiprise : + multiprise.remove(False) + +try : + arg = sys.argv[1] +except : + arg = '' + +if arg == "config" : + print 'host_name adherents' + print 'graph_title Batiment %s' % string.upper(BAT) + print 'graph_args --base 1000 --lower-limit 0' +# print 'graph_order activ enabled fixes reste prises chbres' + print "graph_vlabel nb de chambres" + print 'enabled.label Prises activées' + print 'enabled.draw AREA' + print 'fixes.label Prises fixes' + print 'fixes.draw STACK' + print 'reste.label Prises inutilisées' + print 'reste.draw STACK' + print 'crans.label Prises crans' + print 'crans.draw STACK' + print 'activ.label Prises actives' + print 'adherent.label Nb adhérents' + print 'prises.label Nb de prises' + print 'chbres.label Nb de chambres' + if BAT in BAT_CHBRES : + print 'connues.label Nb de chbres enreg.' +# print 'reste.warning 5:' +# print 'reste.critical 0:' + +else : + PRISES_ENABLE = 0 + for switch in all_switchs(BAT) : + try: + PRISES_ENABLE += hpswitch(switch).is_enable('all') + except: + PRISES_ENABLE += 0 + # On élimine les prises "CRANS" stockés dans uplink_prises + for prise in uplink_prises[BAT].keys() : + switch, prise = switch_prise(BAT, prise) + try: + if hpswitch(switch).is_enable(prise) : + PRISES_ENABLE -= 1 + except: + PRISES_ENABLE -= 0 + print "enabled.value %d" % PRISES_ENABLE + + PRISES_ACTIVES = 0 + for switch in all_switchs(BAT) : + try: + PRISES_ACTIVES += hpswitch(switch).is_up('all') + except: + PRISES_ACTIVES += 0 + # On élimine les prises "CRANS" stockés dans uplink_prises + for prise in uplink_prises[BAT].keys() : + switch, prise = switch_prise(BAT, prise) + try: + if hpswitch(switch).is_up(prise) : + PRISES_ACTIVES -= 1 + except: + PRISES_ACTIVES -= 0 + if multiprise != [] : + PRISES_ACTIVES -= len(multiprise) + for prise in multiprise : + PRISES_ACTIVES += len(reverse(BAT)[prise]) + print "activ.value %d" % PRISES_ACTIVES + + + PRISES_FIXES = 0 + if multiprise != [] : + PRISES_FIXES = - len(multiprise) + for prise in multiprise : + PRISES_FIXES += len(reverse(BAT)[prise]) + print "fixes.value %d" % PRISES_FIXES + + PRISES_CRANS = len(uplink_prises[BAT].keys()) + + print "crans.value %d" % PRISES_CRANS + + NB_PRISES = 0 + for switch in all_switchs(BAT) : + try: + NB_PRISES += hpswitch(switch).nb_prises() + except: + NB_PRISES += 0 + NB_PRISES += PRISES_FIXES + print "prises.value %d" % NB_PRISES + + + print "reste.value %d" % int(NB_PRISES - PRISES_ENABLE - PRISES_FIXES - PRISES_CRANS) + + fichier = open(stats_batiments, 'r') + #NB_ADHERENT = 0 # Plus génant qu'autre chose + for line in fichier.readlines(): + if line[3:4] == BAT and line[:3] == "bat" : + NB_ADHERENT = line[11:].strip() + print "adherent.value %s" % NB_ADHERENT + + if BAT in BAT_CHBRES.keys() : + print "chbres.value %d" % BAT_CHBRES[BAT] + print "connues.value %d" % len(chbre_prises[BAT].keys()) + else : + print "chbres.value %d" % len(chbre_prises[BAT].keys()) diff --git a/munin/stats-ip b/munin/stats-ip new file mode 100755 index 00000000..1346c42a --- /dev/null +++ b/munin/stats-ip @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +# Plugin pour visualiser l'utilisation des plages ip + +import sys +sys.path.append('/usr/scripts/gestion') + +from ldap_crans import crans_ldap +from config import NETs +from iptools import AddrInNet + +ips = [ x.ip() for x in crans_ldap().search('ip=*')['machine'] ] + +try : + arg = sys.argv[1] +except : + arg = '' + +if arg == "config" : + print 'host_name adresses-ip' + print 'graph_title Statistiques adresses IP' + print 'graph_args --base 1000 --lower-limit 0' + print 'graph_category network' + print "graph_vlabel % d'utilisation" + for subnet in NETs.keys(): + nom = subnet.replace('-', '') + print "%s.label %s" % (nom, subnet) + print "%s.warning 92" % nom + print "%s.critical 98" % nom + +else : + for subnet in NETs : + total = 0 + for net in NETs[subnet]: + total += 2 ** ( 32 - int( net.split('/')[1] ) ) + utilisees = len( [ ip for ip in ips if AddrInNet( ip, NETs[subnet] ) ] ) + pourcentage = int((utilisees*100)/total) + + nom = subnet.replace('-', '') + print "%s.value %d" % (nom, pourcentage) diff --git a/munin/stats-ip_ b/munin/stats-ip_ new file mode 100755 index 00000000..6171e0c2 --- /dev/null +++ b/munin/stats-ip_ @@ -0,0 +1,43 @@ +#!/usr/bin/env python +# -*- coding: iso-8859-15 -*- + +# Plugin pour visualiser l'utilisation des plages ip + +import sys, string +sys.path.append('/usr/scripts/gestion') + +from ldap_crans import crans_ldap +from config import NETs +from iptools import AddrInNet + +ips = [ x.ip() for x in crans_ldap().search('ip=*')['machine'] ] + +# On prend l'argument pour définir la plage d'ip à analyser +SUBNET = sys.argv[0].split('_')[1] + +try : + arg = sys.argv[1] +except : + arg = '' + +if arg == "config" : + if len(SUBNET) == 1 : NOM = "Bâtiment %s" % string.upper(SUBNET) + else: NOM = SUBNET + + print 'host_name adresses-ip' + print 'graph_title Statistiques adresses IP - %s' % NOM + print 'graph_args --base 1000 --lower-limit 0' + print 'graph_category network' + print "graph_vlabel nb d'ips" + print "utilisees.label IP utilisées" + print "utilisees.draw AREA" + print "total.label Total disponibles" + +else : + total = 0 + for net in NETs[SUBNET]: + total += 2 ** ( 32 - int( net.split('/')[1] ) ) + utilisees = len( [ ip for ip in ips if AddrInNet( ip, NETs[SUBNET] ) ] ) + + print "utilisees.value %d" % utilisees + print "total.value %s" % total diff --git a/munin/uptime b/munin/uptime new file mode 100755 index 00000000..f626e279 --- /dev/null +++ b/munin/uptime @@ -0,0 +1,21 @@ +#!/bin/sh +# +# Edité par mo² le 26 juillet 2004 +# + +if [ "$1" = "autoconf" ]; then + echo yes + exit 0 +fi + +if [ "$1" = "config" ]; then + + echo 'graph_title Uptime' + echo 'graph_args --base 1000 -l 0 ' + echo 'graph_vlabel uptime in days' + echo 'uptime.label uptime' + echo 'uptime.draw AREA' + exit 0 +fi + +cat /proc/uptime | env LC_ALL=C awk '{printf "uptime.value %.2f\n",$1/86400}'