feat: add restic-exporter as metrics endpoint #84

Open
stevensting wants to merge 3 commits from restic-exporter into main
4 changed files with 94 additions and 10 deletions

View File

@ -38,3 +38,10 @@ CRON_SCHEDULE='30 3 * * *'
# it overwrites the RESTIC_REPOSITORY variable
#SECRET_RESTIC_REPO_VERSION=v1
#COMPOSE_FILE="$COMPOSE_FILE:compose.secret.yml"
# Restic exporter - prometheus metrics
#COMPOSE_FILE="$COMPOSE_FILE:compose.exporter.yml"
#LETS_ENCRYPT_ENV=production
#REFRESH_INTERVAL=86400 # once per day, be cautious with small numbers, as this can create traffic
#METRICS_DOMAIN=backup.example.com
#TIMEZONE=Europe/Berlin

48
compose.exporter.yml Normal file
View File

@ -0,0 +1,48 @@
---
version: "3.8"
services:
restic-exporter:
image: ngosang/restic-exporter:2.0.2
environment:
- TZ=${TIMEZONE}
- RESTIC_REPOSITORY
- RESTIC_PASSWORD_FILE=/run/secrets/restic_password
- REFRESH_INTERVAL
- METRICS_DOMAIN
volumes:
- data:/data
- cache:/root/.cache/restic
secrets:
- restic_password
configs:
- source: entrypoint
target: /entrypoint.sh
mode: 666
entrypoint: /entrypoint.sh
command: /usr/local/bin/python -u /app/exporter.py
networks:
- proxy
deploy:
labels:
- "traefik.enable=true"
- "traefik.http.services.${STACK_NAME}-metrics.loadbalancer.server.port=8001"
- "traefik.http.routers.${STACK_NAME}-metrics.rule=Host(`${METRICS_DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}-metrics.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}-metrics.tls=true"
- "traefik.http.routers.${STACK_NAME}-metrics.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}-metrics.middlewares=basicauth@file"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8001/metrics"]
interval: 1m
timeout: 10s
retries: 60
start_period: 1m
volumes:
cache:
data:
networks:
proxy:
external: true

View File

@ -1,16 +1,34 @@
---
version: "3.8"
x-ssh_env: &ssh_env
- SSH_KEY_FILE=/run/secrets/ssh_key
- SSH_HOST_KEY
x-ssh_secrets: &ssh_secrets
- source: ssh_key
mode: 0400
x-ssh_configs: &ssh_configs
- source: ssh_config
target: /root/.ssh/config
services:
app:
environment:
- SSH_KEY_FILE=/run/secrets/ssh_key
- SSH_HOST_KEY
*ssh_env
secrets:
- source: ssh_key
mode: 0400
*ssh_secrets
configs:
- source: ssh_config
target: /root/.ssh/config
*ssh_configs
restic-exporter:
environment:
*ssh_env
secrets:
*ssh_secrets
configs:
*ssh_configs
secrets:
ssh_key:

View File

@ -2,14 +2,25 @@
set -e
echo "executing entrypoint.sh..."
if [ -n "$SSH_HOST_KEY" ]
then
echo "setting ssh known hosts"
echo "$SSH_HOST_KEY" > /root/.ssh/known_hosts
fi
cron_schedule="${CRON_SCHEDULE:?CRON_SCHEDULE not set}"
if [ -n "$CRON_SCHEDULE" ]
then
echo "setting up cronjob..."
cron_schedule="${CRON_SCHEDULE:?CRON_SCHEDULE not set}"
echo "$cron_schedule /cronjob.sh" | crontab -
crontab -l
echo "$cron_schedule /cronjob.sh" | crontab -
crontab -l
crond -f -d8 -L /dev/stdout
crond -f -d8 -L /dev/stdout
else
# startup for exporter
apk --no-cache add curl
exec /sbin/tini -- "$@"
fi