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:50] – [Log rotate] fpoulainadmin:infrastructure:backup [2026/03/03 16:48] (Version actuelle) – Correction typographique fhenry2
Ligne 1: Ligne 1:
 ====== Paquet Debian ====== ====== Paquet Debian ======
  
-Le backup de Chapril est déployé via un paquet Debian sur un repo privé. On décrit ici les points essentiels du paquet à défaut de publier le repo, ainsi que la configuration du contrôle d'intégrité des archives.+La sauvegarde de Chapril est déployé via un paquet Debian sur un dépôt Git privé. 
 +On décrit ici les points essentiels du paquet à défaut de publier le dépôt, ainsi que la configuration du contrôle d'intégrité des archives.
  
 ===== Aspects backup ===== ===== Aspects backup =====
Ligne 7: Ligne 8:
 ==== Script de backup ==== ==== Script de backup ====
  
-C'est fournis par [[https://torsion.org/borgmatic/borgmatic]].+C'est fournis par [[https://torsion.org/borgmatic/Borgmatic]].
  
-On y adjoint une configuration dans ''/etc'' :+On y adjoint une configuration dans ''/etc/'' :
  
 <code yaml /etc/borgmatic.d/root.yaml> <code yaml /etc/borgmatic.d/root.yaml>
Ligne 25: Ligne 26:
     - '/var/cache/*'     - '/var/cache/*'
     - '/var/lib/backuppc/*'     - '/var/lib/backuppc/*'
-    - '/var/lib/libvirt/coon' 
     - '/var/lib/libvirt/images/'     - '/var/lib/libvirt/images/'
-    - '/var/lib/libvirt/maine' 
   repositories:   repositories:
-    - 'backup@backup.chapril.org:/srv/backups/{fqdn}'+    - 'ssh://backup@backup.chapril.org/srv/backups/{fqdn}'
  
 storage: storage:
Ligne 52: Ligne 51:
     - for file in /etc/borg/scripts/post-hooks/* ; do test -e "$file" || continue; echo "Executing $file..."; $file; done     - for file in /etc/borg/scripts/post-hooks/* ; do test -e "$file" || continue; echo "Executing $file..."; $file; done
     - echo "Succeeded root backup at $(date -Iseconds)"     - echo "Succeeded root backup at $(date -Iseconds)"
 +    - borgmatic info --archive latest --json
   on_error:   on_error:
     - echo "Failed root backup at $(date -Iseconds)"     - echo "Failed root backup at $(date -Iseconds)"
Ligne 63: Ligne 63:
 ==== Entrée Systemd ==== ==== Entrée Systemd ====
  
-On déclenche avec un timer systemd qui retarde le démarrage avec un timing aléatoire pour éviter le ddos de [[admin:machines_virtuelles:felicette|Félicette]].+On déclenche avec un compteur de Systemd qui retarde le démarrage avec un //timing// aléatoire pour éviter le DDoS de [[admin:machines_virtuelles:felicette|Félicette]].
  
-<code conf /etc/systemd/system/borgmatic.timer>+<code ini /etc/systemd/system/borgmatic.timer>
 [Unit] [Unit]
 Description=Run borgmatic backup Description=Run borgmatic backup
Ligne 81: Ligne 81:
 </code> </code>
  
-<code conf /etc/systemd/system/borgmatic.service>+<code ini /etc/systemd/system/borgmatic.service>
 [Unit] [Unit]
 Description=borgmatic backup Description=borgmatic backup
Ligne 266: Ligne 266:
 ==== Rsyslog ==== ==== Rsyslog ====
  
-<code conf /etc/rsyslog.d/borgmatic.conf>+<code /etc/rsyslog.d/borgmatic.conf>
 if $programname == 'borgmatic' then /var/log/borgmatic.log if $programname == 'borgmatic' then /var/log/borgmatic.log
 & stop & stop
Ligne 273: Ligne 273:
 ==== Log rotate ==== ==== Log rotate ====
  
-<code conf debian/borgmatic>+<code debian/borgmatic>
 /var/log/borgmatic.log /var/log/borgmatic.log
 { {
Ligne 284: Ligne 284:
 </code> </code>
  
-===== Configuration de l'hote =====+===== Configuration de l'hôte =====
  
-C'est surtout du ssh+C'est surtout du SSH
-<code ssh __felicette__/etc/ssh/authorized_keys/backup>+<code __felicette__/etc/ssh/authorized_keys/backup>
 command="borg serve --restrict-to-path /srv/backups/dns.cluster.chapril.org",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 ... root@dns.cluster.chapril.org command="borg serve --restrict-to-path /srv/backups/dns.cluster.chapril.org",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 ... root@dns.cluster.chapril.org
 command="borg serve --restrict-to-path /srv/backups/admin.cluster.chapril.org",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 ... root@admin.cluster.chapril.org command="borg serve --restrict-to-path /srv/backups/admin.cluster.chapril.org",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 ... root@admin.cluster.chapril.org
Ligne 296: Ligne 296:
 ===== Configuration du monitoring ===== ===== Configuration du monitoring =====
  
-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 sauvegarde 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 (1) 
 +else:
     exit (0)     exit (0)
-else: 
-    exit (1) 
 </code> </code>
  
-Et la conf icinga2 +Et la configuration pour Icinga 2 
-<code conf __admin__/etc/icinga2/zones.d/global-templates/services/backups.conf>+<code nagios __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 345: Ligne 350:
 ===== Aspects contrôle d'intégrité ===== ===== Aspects contrôle d'intégrité =====
  
-On contrôle directement chaque nuit sur la machine où les backups sont stockés ([[admin:machines_virtuelles:felicette|Félicette]]).+On contrôle directement chaque nuit sur la machine où les sauvegardes sont stockées ([[admin:machines_virtuelles:felicette|Félicette]]).
  
 ==== Script de contrôle ==== ==== Script de contrôle ====
Ligne 387: Ligne 392:
 ==== Entrée Cron ==== ==== Entrée Cron ====
  
-<code cron __felicette__/etc/cron.d/check_backup>+<code __felicette__/etc/cron.d/check_backup>
 00 4 * * * root bash /srv/bin/check_backup.sh 00 4 * * * root bash /srv/bin/check_backup.sh
 </code> </code>
Ligne 393: Ligne 398:
 ==== Log rotate ==== ==== Log rotate ====
  
-<code conf __felicette__/etc/logrotate.d/check-backup>+<code __felicette__/etc/logrotate.d/check-backup>
 /var/log/check_backup.log { /var/log/check_backup.log {
         weekly         weekly
Ligne 407: Ligne 412:
 ==== Configuration du monitoring ==== ==== Configuration du monitoring ====
  
-On a un script qui parse sur la machine le log de check_backup :+On a un script qui parse sur la machine le log de ''check_backup'' :
 <code python __felicette__/usr/local/lib/nagios/plugins/check_check_backup> <code python __felicette__/usr/local/lib/nagios/plugins/check_check_backup>
 #!/usr/bin/env python #!/usr/bin/env python
Ligne 438: Ligne 443:
 </code> </code>
  
-Et la conf icinga2 +Et la configuration pour Icinga 2 
-<code conf __admin__/etc/icinga2/zones.d/global-templates/services/backups.conf>+<code nagios __admin__/etc/icinga2/zones.d/global-templates/services/backups.conf>
 object CheckCommand "check_backup" { object CheckCommand "check_backup" {
     command = [ "/usr/local/lib/nagios/plugins/check_check_backup" ]     command = [ "/usr/local/lib/nagios/plugins/check_check_backup" ]
 } }
 </code> </code>
-<code conf __admin__/etc/icinga2/zones.d/master/galanga/icinga2.conf>+<code nagios __admin__/etc/icinga2/zones.d/master/galanga/icinga2.conf>
 /* Backup checks */ /* Backup checks */
 apply Service "Check Backup " { apply Service "Check Backup " {
admin/infrastructure/backup.1609609833.txt.gz · Dernière modification : 2021/01/02 17:50 de fpoulain