Skip to content
Snippets Groups Projects
borgbackup-prometheus.sh 3.15 KiB
#!/bin/bash

export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"

# Force locale for correct formatting
LANG=en_US.UTF-8

# Metrics output file in the prometheus node-exporter directory 
PROM_FILE="/var/lib/prometheus/node-exporter/borgbackup.prom"

#  Borgbackup statistiken für Prometheus erstellen 

function calc_bytes {
	NUM=$1
	UNIT=$2
	
	case "$UNIT" in
		kB)
			echo $NUM | awk '{ print $1 * 1024 }'
			;;
		MB)
			echo $NUM | awk '{ print $1 * 1024 * 1024 }'
			;;
		GB)
			echo $NUM | awk '{ print $1 * 1024 * 1024 * 1024 }'
			;;
		TB)
			echo $NUM | awk '{ print $1 * 1024 * 1024 * 1024 * 1024 }'
			;;
	esac
}

# create temp file 
TMP_FILE=$(mktemp)

echo "borgbackup_repos_count {{ borgbackup_repos|length }}" > $TMP_FILE

{% for repo in borgbackup_repos %}

BACKUPS=$(borg list {{ borgbackup_repos[repo].options }} {{ borgbackup_repos[repo].repo }})
BACKUPS_LIST=$(echo "$BACKUPS" | awk '{print $1}')
COUNTER=0

for BACKUP in $BACKUPS_LIST; do

  COUNTER=$((COUNTER+1))

done

BORG_INFO=$(borg info {{ borgbackup_repos[repo].options }} {{ borgbackup_repos[repo].repo }}::$BACKUP)

echo "borgbackup_count{repo=\"{{ repo }}\"} $COUNTER" >> $TMP_FILE
echo "borgbackup_files{repo=\"{{ repo }}\"} $(echo "$BORG_INFO" | grep "Number of files" | awk '{print $4}')" >> $TMP_FILE
echo "borgbackup_chunks_unique{repo=\"{{ repo }}\"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $3}')" >> $TMP_FILE
echo "borgbackup_chunks_total{repo=\"{{ repo }}\"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $4}')" >> $TMP_FILE

# byte size calculation 
LAST_SIZE=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $3}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $4}'))
LAST_SIZE_COMPRESSED=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $5}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $6}'))
LAST_SIZE_DEDUP=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $7}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $8}'))
TOTAL_SIZE=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $3}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $4}'))
TOTAL_SIZE_COMPRESSED=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $5}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $6}'))
TOTAL_SIZE_DEDUP=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $7}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $8}'))

echo "borgbackup_last_size{repo=\"{{ repo }}\"} $LAST_SIZE" >> $TMP_FILE
echo "borgbackup_last_size_compressed{repo=\"{{ repo }}\"} $LAST_SIZE_COMPRESSED" >> $TMP_FILE
echo "borgbackup_last_size_dedup{repo=\"{{ repo }}\"} $LAST_SIZE_DEDUP" >> $TMP_FILE
echo "borgbackup_total_size{repo=\"{{ repo }}\"} $TOTAL_SIZE" >> $TMP_FILE
echo "borgbackup_total_size_compressed{repo=\"{{ repo }}\"} $TOTAL_SIZE_COMPRESSED" >> $TMP_FILE
echo "borgbackup_total_size_dedup{repo=\"{{ repo }}\"} $TOTAL_SIZE_DEDUP" >> $TMP_FILE

{% endfor %}

# move temp file to output file 
mv $TMP_FILE $PROM_FILE
chown prometheus:prometheus $PROM_FILE
 
echo "created BorgBackup statistic for {{ borgbackup_repos|length }} repos: $PROM_FILE"