
On s'autorise à lister les plugins à activer sur la base des groupes bcfg2 d'un serveur, au lieu de spécifier en dur le nom du serveur.
194 lines
6.8 KiB
Python
Executable file
194 lines
6.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_",
|
|
},
|
|
"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",
|
|
# 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"})
|
|
|
|
# La météo au 4J
|
|
hosts_plugins.setdefault("mdr", {})
|
|
for meteo_truc in ["hygro", "temp"]:
|
|
hosts_plugins["mdr"]["meteo4J_%s" % meteo_truc] = "meteo4J_"
|
|
|
|
#########
|
|
# 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]
|