monit: pas de nfs -> status via http
This commit is contained in:
parent
62d563c064
commit
2fcf63084b
3 changed files with 44 additions and 23 deletions
|
@ -4,6 +4,9 @@
|
||||||
<Python name="/etc/monit/services"/>
|
<Python name="/etc/monit/services"/>
|
||||||
<Path name="/etc/monit/conf.d/placeholder"/>
|
<Path name="/etc/monit/conf.d/placeholder"/>
|
||||||
<Python name="/etc/cron.d/monit"/>
|
<Python name="/etc/cron.d/monit"/>
|
||||||
|
<Group name="autostatus">
|
||||||
|
<Python name="/etc/crans/wgetrc_monit"/>
|
||||||
|
</Group>
|
||||||
<Package name="monit"/>
|
<Package name="monit"/>
|
||||||
<Service name="monit"/>
|
<Service name="monit"/>
|
||||||
</Bundle>
|
</Bundle>
|
||||||
|
|
15
Python/etc/crans/wgetrc_monit
Normal file
15
Python/etc/crans/wgetrc_monit
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
info["owner"] = "root"
|
||||||
|
info["group"] = "root"
|
||||||
|
info["perms"] = 0600
|
||||||
|
|
||||||
|
include("secrets")
|
||||||
|
|
||||||
|
header("Config de wget pour récupérer le status des serveurs")
|
||||||
|
|
||||||
|
print """quiet=1
|
||||||
|
timeout=10
|
||||||
|
http-user=monit"""
|
||||||
|
print "http-password=" + secrets_new.get('monit_password')
|
||||||
|
|
|
@ -4,37 +4,40 @@ info["owner"] = "root"
|
||||||
info["group"] = "root"
|
info["group"] = "root"
|
||||||
info["perms"] = 0644
|
info["perms"] = 0644
|
||||||
|
|
||||||
@# Fichier gere par BCfg2 (plugin Python)
|
header()
|
||||||
@#
|
|
||||||
@# A ne modifier que sur bcfg2
|
|
||||||
|
|
||||||
include('ip')
|
include('ip')
|
||||||
|
|
||||||
if has('wheezy'):
|
|
||||||
monit_p = '/usr/bin/monit'
|
|
||||||
else:
|
|
||||||
monit_p = '/usr/sbin/monit'
|
|
||||||
|
|
||||||
def has_shared_scripts(client):
|
def has_shared_scripts(client):
|
||||||
|
"""Est-ce que `client` a /usr/scripts en nfs ?"""
|
||||||
return ('external' not in client.groups) and (
|
return ('external' not in client.groups) and (
|
||||||
('nfs' in client.groups) or ('crans-nfs' in client.groups))
|
('nfs' in client.groups) or ('crans-nfs' in client.groups))
|
||||||
|
|
||||||
|
cron_tpl_nfs = "* * * * * root " + \
|
||||||
|
"%(monit_path)s status > %(status_path)s/%(host)s 2> /dev/null"
|
||||||
|
|
||||||
|
# On reproduit le même comportement en non-nfs: pas de màj du fichier de
|
||||||
|
# status si injoinable
|
||||||
|
cron_tpl_nonfs = "* * * * * root " + \
|
||||||
|
"( /usr/bin/wget --config=/etc/crans/wgetrc_monit " +\
|
||||||
|
"http://%(host)s.adm.crans.org:2812/_status -O /tmp/%(host)s.status && " +\
|
||||||
|
"mv /tmp/%(host)s.status %(status_path)s/%(host)s )"
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'host': hostname,
|
||||||
|
'status_path': '/usr/scripts/var/monit/status',
|
||||||
|
'monit_path': '/usr/bin/monit',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Si ce serveur possède un nfs, on génère le cron qui écrit dedans
|
||||||
|
if has_shared_scripts(metadata):
|
||||||
|
comment("Copie de `monit status` sur le nfs")
|
||||||
|
print cron_tpl_nfs % data
|
||||||
|
|
||||||
|
# Pour les autres serveurs, c'est le serveur autostatus qui récupère
|
||||||
if has('autostatus'):
|
if has('autostatus'):
|
||||||
comment("Seveurs ne possedant pas de nfs :")
|
comment("Seveurs ne possedant pas de nfs :")
|
||||||
for client in metadata.query.all():
|
for client in metadata.query.all():
|
||||||
if not has_shared_scripts(client):
|
if not has_shared_scripts(client):
|
||||||
print "* * * * * root ( /bin/nc -w 10 %s 4242 || true ) > /usr/scripts/var/monit/status/%s 2> /dev/null" % (client.hostname, client.hostname.split('.', 1)[0])
|
data['host'] = client.hostname.split('.', 1)[0]
|
||||||
|
print cron_tpl_nonfs % data
|
||||||
if not has_shared_scripts(metadata):
|
|
||||||
comment("Pas de nfs: attente de connexion depuis le serveur d'autostatus")
|
|
||||||
print '* * * * * root ( /bin/nc -w 60 -l -p 4242 -s %s -c "%s status" || true ) 2> /dev/null' % (admip(), monit_p)
|
|
||||||
else:
|
|
||||||
@# Copie de `monit status` sur le nfs
|
|
||||||
print "* * * * * root %s status > /usr/scripts/var/monit/status/`hostname` 2> /dev/null" % monit_p
|
|
||||||
|
|
||||||
@# Montage de /usr/scripts pour que monit puisse écrire son status
|
|
||||||
@*/5 * * * * root if ! [ -d /usr/scripts/var/monit/status ] ; then if ! /bin/mount | grep /usr/scripts > /dev/null ; then /bin/mount /usr/scripts ; else echo "Erreur d'acces a /usr/scripts/var/monit/status" ; fi ; fi
|
|
||||||
|
|
||||||
@# Redémarrage de monit s'il ne tourne pas
|
|
||||||
print """*/5 * * * * root if [ -n "$( %s status 2>&1 > /dev/null)" ]; then /etc/init.d/monit restart > /dev/null 2> /dev/null; fi""" % monit_p
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue