Outils pour utilisateurs

Outils du site


admin:infrastructure:backup

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
admin:infrastructure:backup [2021/01/02 17:47] – [Scripts de pre hooks] fpoulainadmin:infrastructure:backup [2021/01/02 17:53] (Version actuelle) – [Configuration du monitoring] fpoulain
Ligne 262: Ligne 262:
  
 exit 0 exit 0
 +</code>
 +
 +==== Rsyslog ====
 +
 +<code conf /etc/rsyslog.d/borgmatic.conf>
 +if $programname == 'borgmatic' then /var/log/borgmatic.log
 +& stop
 </code> </code>
  
 ==== Log rotate ==== ==== Log rotate ====
  
-<code conf debian/logrotate+<code conf debian/borgmatic
-/var/log/backup.log { +/var/log/borgmatic.log 
-        weekly +
-        rotate 52 +  rotate 6 
-        compress +  weekly 
-        delaycompress +  compress 
-        missingok +  missingok 
-        notifempty +  notifempty
-        create 644 root root+
 } }
 </code> </code>
Ligne 291: Ligne 297:
  
 On a un script qui parse sur chaque machine le log de backup et qui est déployé par le paquet monitoring-plugins-chapril : On a un script qui parse sur chaque machine le log de backup et qui est déployé par le paquet monitoring-plugins-chapril :
-<code python /usr/lib/nagios/plugins/check_backup+<code python /usr/lib/nagios/plugins/check_borgmatic
-#!/usr/bin/env python +#!/usr/bin/env python3
-# -*- encoding:utf8 -*-+
  
-import datetime, os, re, locale+import datetime, itertools, os, re
  
-today= datetime.datetime.now () +now = datetime.datetime.now(datetime.timezone.utc
-max_backup_delay = datetime.timedelta (1, 7200)+max_backup_delay = datetime.timedelta(1, 7200)
  
-def last_backup (log_file): +def get_name(match): 
-    with open(log_file) as s: +    return match.group('name')
-        logs_ok = re.findall (r'^([ a-zéûA-Z:,0-9]*)( \(UTC\+0[12]00\))?\nReturned 0\n={30}', s.read (), re.MULTILINE)[-1][0] +
-        print "Last backup : " + logs_ok +
-        try: +
-            return datetime.datetime.strptime (logs_ok, '%a %b %d %X %Z %Y') +
-        except: +
-            locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8'+
-            return datetime.datetime.strptime (logs_ok, '%A %d %B %Y, %X')+
  
 +def check_backup(filename):
 +    with open(filename) as f:
 +        logs = f.read()
 +        mixed_statuses = list(re.finditer(r'(?P<status>Succeeded|Failed) (?P<name>\w+) backup at (?P<date>\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\+\d\d:\d\d)$', logs, re.MULTILINE))
 +        for name, statuses in itertools.groupby(sorted(mixed_statuses, key=get_name), key=get_name):
 +            last = sorted(statuses, key=lambda x: x.group('date'))[-1]
 +            print('{name}: {status} at {date}'.format(**last.groupdict()))
 +            last_date = datetime.datetime.fromisoformat(last.group('date'))
 +            last_status = last.group('status')
 +            if last_status != 'Succeeded' or now - last_date > max_backup_delay:
 +                failure.append(name)
 +
 +failure = []
 try: try:
-    last_backup_date= last_backup ("/var/log/backup.log"+    check_backup ("/var/log/borgmatic.log"
-except: +except Exception
-    last_backup_date= last_backup ("/var/log/backup.log.1")+    check_backup ("/var/log/borgmatic.log.1")
  
-if today - last_backup_date < max_backup_delay: +if failure:
-    exit (0) +
-else:+
     exit (1)     exit (1)
 +else:
 +    exit (0)
 </code> </code>
  
Ligne 324: Ligne 335:
 <code conf __admin__/etc/icinga2/zones.d/global-templates/services/backups.conf> <code conf __admin__/etc/icinga2/zones.d/global-templates/services/backups.conf>
 object CheckCommand "backup" { object CheckCommand "backup" {
- command = [ PluginDir + "/check_backup" ]+ command = [ "sudo", PluginDir + "/check_borgmatic" ]
 } }
  
Ligne 336: Ligne 347:
 } }
 </code> </code>
- 
 ===== Aspects contrôle d'intégrité ===== ===== Aspects contrôle d'intégrité =====
  
admin/infrastructure/backup.1609609676.txt.gz · Dernière modification : 2021/01/02 17:47 de fpoulain