#!/usr/bin/env python # -!- encoding: utf-8 -!- # Correspondance hôte <-> plugin munin custom # # Copyright © 2009 Nicolas Dandrimont # # Licence: MIT import sys as _sys _sys.path.append("/usr/scripts/gestion") del _sys import annuaires_pg as annuaires import config __all__ = ["hosts_plugins", "munin_fw", "cron_plugins", "hosts_crons"] # Lignes cron correspondant aux plugins customs cron_plugins = { # plugin: (utilisateur, commande), # %s est remplacé par le lien dans /etc/munin/plugins "audimat": ("root", "nice -n 14 %s generate 2> /dev/null"), "batiments": ("root", "nice -n 14 %s fichier 2> /dev/null"), "stats-ip_": ("root", "nice -n 14 %s fichier 2> /dev/null"), "stats-ip": ("root", "nice -n 14 %s fichier 2> /dev/null"), "wiki_pages": ("www-data", "%s fichier 2> /dev/null"), } # Hôtes pour lesquels le firewall est muninisé munin_fw = sorted(["zamok", "komaz", "sable"]) # Les clés correspondent au nom du serveur, ou à un des groupes (bcfg2) # possédé par le serveur (cf gestion/config/services.py ) hosts_plugins = { "vo": { "coretemp": "/usr/scripts/munin/coretemp", }, "zamok": { "coretemp": "/usr/scripts/munin/coretemp", "canon_compteur": "canon_", "canon_papier": "canon_", "canon_ton-p": "canon_", "webalizer_intranet": "webalizer_", "webalizer_perso": "webalizer_", "who": "who", "whokfet": "whokfet", }, "vert": { "slapd_bdb_cache_pages": "slapd_bdb_cache_", "slapd_bdb_cache_percent": "slapd_bdb_cache_", }, "komaz": { "coretemp": "/usr/scripts/munin/coretemp", "machines": "machines", "if_sixxs2": "/usr/share/munin/plugins/if_", "if_err_sixxs2": "/usr/share/munin/plugins/if_err_", "if_crans.2": "/usr/share/munin/plugins/if_", "if_err_crans.2": "/usr/share/munin/plugins/if_err_", "if_crans.3": "/usr/share/munin/plugins/if_", "if_err_crans.3": "/usr/share/munin/plugins/if_err_", "if_crans.21": "/usr/share/munin/plugins/if_", "if_err_crans.21": "/usr/share/munin/plugins/if_err_", }, "odlyd": { "if_sixxs": "/usr/share/munin/plugins/if_", "if_err_sixxs": "/usr/share/munin/plugins/if_err_", "if_crans.2": "/usr/share/munin/plugins/if_", "if_err_crans.2": "/usr/share/munin/plugins/if_err_", "if_crans.3": "/usr/share/munin/plugins/if_", "if_err_crans.3": "/usr/share/munin/plugins/if_err_", "if_crans.21": "/usr/share/munin/plugins/if_", "if_err_crans.21": "/usr/share/munin/plugins/if_err_", }, "sable": { "coretemp": "/usr/scripts/munin/coretemp", "bind9_rndc": "/usr/share/munin/plugins/bind9_rndc", }, "dhcp": { "dhcpd3": "/usr/share/munin/plugins/dhcpd3", }, "isc": { "dhcpd3": "/usr/share/munin/plugins/dhcpd3", }, "charybde": { "coretemp": "/usr/scripts/munin/coretemp", "bind9_rndc": "/usr/share/munin/plugins/bind9_rndc", }, "routeur": { "bind9_rndc": "/usr/share/munin/plugins/bind9_rndc", }, "thot": { "coretemp": "/usr/scripts/munin/coretemp", "wifi_auth": "wifi_auth", }, "xmpp": { "jabber": "jabber", "ejabberd_connections": "ejabberd_", "ejabberd_users": "ejabberd_", "ejabberd_registrations": "ejabberd_", "ejabberd_statuses": "ejabberd_", "ejabberd_memory": "ejabberd_", "ejabberd_threads": "ejabberd_", "ejabberd_usersindays": "ejabberd_", "ejabberd_uptime": "ejabberd_", }, "niomniom": { "wiki_pages": "wiki_pages", "wiki_themes": "wiki_themes", "wiki_users": "wiki_users", }, "munin-server": { "audimat": "audimat", "batiments": "batiments", "munin": "munin", "stats-ip": "stats-ip", "ap_states": "/usr/scripts/wifi_new/munin.py", "wifi_clients": "/usr/scripts/wifi_new/munin.py", "wifi_uptime": "/usr/scripts/wifi_new/munin.py", "wifi_idle": "/usr/scripts/wifi_new/munin.py", "wifi_channels": "/usr/scripts/wifi_new/munin.py", "laserjet_car": "laserjet_", "laserjet_car-p": "laserjet_", "laserjet__etat": "laserjet__etat", "laserjet_kit": "laserjet_", "laserjet__pages": "laserjet__pages", "laserjet_stock-papier": "laserjet_", "laserjet_stock-papier-p": "laserjet_", "laserjet_tam": "laserjet_", "laserjet_tam-p": "laserjet_", "laserjet_consommables": "consommables_hp", # La suite plus bas... }, "news": { "innd_total": "innd_total", "innd_last": "innd_last", "innd_connects": "innd_connects", }, "zbee": { 'nfsd' : '/usr/share/munin/plugins/nfsd', } } # Plugins Cr@ns systématiquement rajoutés general_plugins = { "check_ntp": "check_ntp", 'apt': 'apt', } #### # Trucs spécifiques à munin.crans.org # Onduleur for mge_truc in ["batt", "hygro", "intensite", "temp", "temps", "tension"]: hosts_plugins["munin-server"]["mge_%s" % mge_truc] = "mge_%s" % mge_truc # Stats d'utilisation des réseaux for net in config.NETs: hosts_plugins["munin-server"]["stats-ip_%s" % net] = "stats-ip_" # Stats de peuplement des bâtiments for bat in annuaires.bat_switchs: if bat not in ('v',): hosts_plugins["munin-server"]["stats-batiment_%s" % bat] = "stats-batiment_" # Ping de tous les switches de bâtiments for switch in annuaires.all_switchs(hide=[]): # Suppression du .crans.org pour plus de clarté dans les confs # (tous les switchs n'étant pas sur adm, on garde quand-même ce suffixe) switch = switch[:switch.rindex('.crans.org')] switch = switch.replace('-', '_') hosts_plugins["munin-server"]["ping_%s" % switch] = "ping_bat_" # On rajoute les stats de connexion for host in hosts_plugins.keys(): hosts_plugins[host].update({"sockets": "sockets"}) ######### # Muninisation des firewalls # for host in munin_fw: hosts_plugins[host].update({ "iptables_filter": "iptables_", "iptables_mangle": "iptables_", "iptables_nat": "iptables_", "ipset_macip":"/usr/scripts/munin/ipset", "ipset":"/usr/scripts/munin/ipset", }) # format de la ligne cron CRON_FORMAT = "%s-%s/%s * * * * %s %s" # fréquence FREQ = 15 # lignes cron par hôte hosts_crons = {} for host, plugins in hosts_plugins.items(): minute = 1 hosts_crons[host] = [] for path, plugin in plugins.items(): if plugin in cron_plugins: path = "/etc/munin/plugins/" + path user, line = cron_plugins[plugin] hosts_crons[host].append(CRON_FORMAT % (minute, 60 - FREQ + minute, FREQ, user, line % path)) minute = (minute + 4) % FREQ if not hosts_crons[host]: del hosts_crons[host]