summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/borg-backup.nix24
-rw-r--r--modules/monitoring.nix11
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;