scripts/munin/scripts/hosts_plugins.py
2015-03-07 11:49:17 +01:00

210 lines
7.8 KiB
Python
Executable file

#!/usr/bin/env python
# -!- encoding: utf-8 -!-
# Correspondance hôte <-> plugin munin custom
#
# Copyright © 2009 Nicolas Dandrimont <Nicolas.Dandrimont@crans.org>
#
# 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_authorized": "/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]