diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2021-03-10 09:19:24 -0500 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2021-03-10 09:19:24 -0500 |
commit | 076d4020e55631eb16bc09c3f541634b6cf17812 (patch) | |
tree | 37812639c02102b039f919e8c772c7d54bbb5d42 | |
parent | 185f9fc56771954f45bfb0b8eaf41e33d67212c2 (diff) |
backup probing
-rw-r--r-- | config/borg-backup.nix | 24 | ||||
-rw-r--r-- | modules/monitoring.nix | 11 |
2 files changed, 32 insertions, 3 deletions
diff --git a/config/borg-backup.nix b/config/borg-backup.nix index 0c8ebb4..5b45358 100644 --- a/config/borg-backup.nix +++ b/config/borg-backup.nix @@ -4,9 +4,10 @@ { config, lib, pkgs, ... }: let repo = "/staging/backup"; - probe = { + probe = rec { path = "/storage/archive/backup-probe.txt"; repo = "storage"; + repo_path = lib.removePrefix "/" path; }; in { @@ -27,8 +28,8 @@ in rsync -Hax orbekk@raigh.orbekk.com:linoquotes-backup.sqlite /storage/archive/linoquotes/ echo "Writing probe file at ${probe.path}" - date +%s > "${probe.path}.tmp" - mv "${probe.path}.tmp" "${probe.path}" + # No need for atomic move, because the script terminates if this fails. + date +%s > "${probe.path}" echo "Creating backup" borg create -v --stats \ @@ -52,4 +53,21 @@ in echo "Success." ''; }; + + systemd.services.backup-prober = { + description = "Find latest backup probe timestamp."; + path = with pkgs; [ borgbackup rsync openssh moreutils ]; + startAt = "06:30"; + environment = { + BORG_KEYS_DIR = "/opt/secret/borg-backup-keys/"; + REPOSITORY = repo; + }; + script = '' + last_repo="$(borg list $REPOSITORY -P ${probe.repo} --last 1 --short)" + target="${config.orbekk.monitoring-server.textFileDir}/backup_probe.prom" + timestamp=$(borg extract --stdout $REPOSITORY::"$last_repo" "${probe.repo_path}") + echo "backup_probe_timestamp_seconds $timestamp" > "$target.next" + mv "$target.next" "$target" + ''; + }; } diff --git a/modules/monitoring.nix b/modules/monitoring.nix index 4e645c7..8d154ba 100644 --- a/modules/monitoring.nix +++ b/modules/monitoring.nix @@ -11,6 +11,10 @@ in type = lib.types.int; default = aliases.services.grafana.port; }; + textFileDir = lib.mkOption { + type = lib.types.str; + default = "/var/lib/prometheus-node-exporter-text-files"; + }; grafana-domain = lib.mkOption { type = lib.types.str; default = "grafana.orbekk.com"; @@ -88,6 +92,7 @@ in enable = true; enabledCollectors = [ "systemd" ]; port = cfg.prometheus-exporter-port; + extraFlags = ["--collector.textfile.directory=${cfg.textFileDir}"]; }; snmp = { enable = true; @@ -97,6 +102,12 @@ in }; }; + system.activationScripts.node-exporter-directory.text = + '' + # Needed for Prometheus node exporter. + mkdir -pm 0775 ${cfg.textFileDir} + ''; + services.nginx.virtualHosts.${cfg.grafana-domain} = { enableACME = true; forceSSL = true; |