genesis commit
This commit is contained in:
commit
9c67bc06d9
41
.drone.yml
Normal file
41
.drone.yml
Normal file
@ -0,0 +1,41 @@
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
|
||||
- name: validate
|
||||
image: bunix42/pre-commit
|
||||
|
||||
- name: docker-latest
|
||||
image: plugins/docker
|
||||
settings:
|
||||
repo: bunix42/docker-borgbackup-exporter
|
||||
build_args:
|
||||
- BORG_VERSION=1.2.0-r0
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
tags:
|
||||
- latest
|
||||
- 1.2.0
|
||||
|
||||
- name: slack
|
||||
image: plugins/slack
|
||||
settings:
|
||||
webhook:
|
||||
from_secret: slack_webhook
|
||||
channel: drone
|
||||
username: drone
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
- failure
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
event:
|
||||
- push
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
example
|
5
.pre-commit-config.yaml
Normal file
5
.pre-commit-config.yaml
Normal file
@ -0,0 +1,5 @@
|
||||
repos:
|
||||
- repo: https://github.com/hadolint/hadolint
|
||||
rev: v2.10.0
|
||||
hooks:
|
||||
- id: hadolint
|
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@ -0,0 +1,14 @@
|
||||
FROM alpine:3.16
|
||||
|
||||
ARG BORG_VERSION=1.2.0-r0
|
||||
ARG OPENSSH_VERSION=9.0_p1-r1
|
||||
|
||||
RUN apk add --no-cache borgbackup=${BORG_VERSION} openssh=${OPENSSH_VERSION}
|
||||
|
||||
COPY assets/*.sh /usr/bin/
|
||||
|
||||
ENV CRON_SCHEDULE="0 */1 * * *"
|
||||
|
||||
VOLUME ["/root/.ssh", "/output"]
|
||||
|
||||
ENTRYPOINT [ "/usr/bin/entrypoint.sh" ]
|
35
README.md
Normal file
35
README.md
Normal file
@ -0,0 +1,35 @@
|
||||
# docker-borgbackup-exporter
|
||||
|
||||
[![Build Status](https://ci.bunix.de/api/badges/bunix42/docker-borgbackup-exporter/status.svg)](https://ci.bunix.de/bunix42/docker-borgbackup-exporter)
|
||||
[![hadolint](https://img.shields.io/badge/hadolint-passing-brightgreen)](https://github.com/hadolint/hadolint)
|
||||
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
|
||||
|
||||
This is a simple cron based exporter for borg backup metrics, that are supposed to be delivered via any means like a simple nginx or using node_exporters textfile or adding pushgateway pushes.
|
||||
|
||||
## example usage
|
||||
|
||||
```
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
|
||||
backup:
|
||||
build: .
|
||||
environment:
|
||||
- BORG_PASSPHRASE=ThisIsTheAbsolutlyAlmightySecretCredential
|
||||
- BORG_REPO=ssh://<user>@<host>/<root folder>
|
||||
- CRON_SCHEDULE=0 */1 * * *
|
||||
volumes:
|
||||
- ./conf/.ssh:/root/.ssh # this volume should contain an prive ssh key and an authorized hosts key
|
||||
- exporter-data:/output # this volume is used to share the metrics file
|
||||
|
||||
borg-exporter-front:
|
||||
image: nginx:1.21
|
||||
volumes:
|
||||
- exporter-data:/usr/share/nginx/html/
|
||||
ports:
|
||||
- 8080:80
|
||||
|
||||
volumes:
|
||||
exporter-data:
|
||||
```
|
77
assets/borg-exporter.sh
Executable file
77
assets/borg-exporter.sh
Executable file
@ -0,0 +1,77 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
PROM_FILE=/output/metrics
|
||||
TMP_FILE=$PROM_FILE.$$
|
||||
|
||||
LIST=$(borg list | awk '{print $1}')
|
||||
COUNTER=0
|
||||
|
||||
for i in $LIST; do
|
||||
COUNTER=$((COUNTER+1))
|
||||
done
|
||||
|
||||
BORG_INFO=$(borg info "::$i")
|
||||
|
||||
ARCHIVE_PREFIX=$(echo "$BORG_INFO" | grep "Archive name" | awk '{print $3}' | awk -F- '{print $1}')
|
||||
|
||||
echo "backup_count{archive=\"${ARCHIVE_PREFIX}\"} $COUNTER" > "$TMP_FILE"
|
||||
|
||||
{
|
||||
echo "backup_files{archive=\"${ARCHIVE_PREFIX}\"} $(echo "$BORG_INFO" | grep "Number of files" | awk '{print $4}')"
|
||||
echo "backup_chunks_unique{archive=\"${ARCHIVE_PREFIX}\"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $3}')"
|
||||
echo "backup_chunks_total{archive=\"${ARCHIVE_PREFIX}\"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $4}')"
|
||||
} >> "$TMP_FILE"
|
||||
|
||||
function calc_bytes {
|
||||
NUM=$1
|
||||
UNIT=$2
|
||||
|
||||
case "$UNIT" in
|
||||
B)
|
||||
echo "$NUM" | awk '{ print $1 }'
|
||||
;;
|
||||
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
|
||||
}
|
||||
|
||||
# timings
|
||||
LAST_START=$(echo "$BORG_INFO" | grep "Time (start)" | awk '{print $4" "$5}')
|
||||
LAST_END=$(echo "$BORG_INFO" | grep "Time (end)" | awk '{print $4" "$5}')
|
||||
|
||||
LAST_START_TIMESTAMP=$(date -d "$LAST_START" +"%s")
|
||||
LAST_END_TIMESTAMP=$(date -d "$LAST_END" +"%s")
|
||||
|
||||
# byte sizes
|
||||
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 "backup_last_start{archive=\"${ARCHIVE_PREFIX}\"} $LAST_START_TIMESTAMP"
|
||||
echo "backup_last_end{archive=\"${ARCHIVE_PREFIX}\"} $LAST_END_TIMESTAMP"
|
||||
echo "backup_last_size{archive=\"${ARCHIVE_PREFIX}\"} $LAST_SIZE"
|
||||
echo "backup_last_size_compressed{archive=\"${ARCHIVE_PREFIX}\"} $LAST_SIZE_COMPRESSED"
|
||||
echo "backup_last_size_dedup{archive=\"${ARCHIVE_PREFIX}\"} $LAST_SIZE_DEDUP"
|
||||
echo "backup_total_size{archive=\"${ARCHIVE_PREFIX}\"} $TOTAL_SIZE"
|
||||
echo "backup_total_size_compressed{archive=\"${ARCHIVE_PREFIX}\"} $TOTAL_SIZE_COMPRESSED"
|
||||
echo "backup_total_size_dedup{archive=\"${ARCHIVE_PREFIX}\"} $TOTAL_SIZE_DEDUP"
|
||||
} >> "$TMP_FILE"
|
||||
|
||||
mv "$TMP_FILE" "$PROM_FILE"
|
6
assets/entrypoint.sh
Executable file
6
assets/entrypoint.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
echo "$CRON_SCHEDULE /usr/bin/borg-exporter.sh" >> /var/spool/cron/crontabs/$(whoami)
|
||||
|
||||
crond -f
|
Loading…
Reference in New Issue
Block a user