forked from coop-cloud/backup-bot-two
		
	feat: Adds monitoring setup for prometheus push gateway
This commit is contained in:
		| @ -9,10 +9,16 @@ RESTIC_REPOSITORY=/backups/restic | ||||
| CRON_SCHEDULE='30 3 * * *' | ||||
|  | ||||
| # Push Notifiactions | ||||
| #PUSH_PROMETHEUS_URL=https://pushgateway.example.com/metrics/job/backup | ||||
| # or | ||||
| #PUSH_URL_START=https://status.example.com/api/push/xxxxxxxxxx?status=up&msg=start | ||||
| #PUSH_URL_SUCCESS=https://status.example.com/api/push/xxxxxxxxxx?status=up&msg=OK | ||||
| #PUSH_URL_FAIL=https://status.example.com/api/push/xxxxxxxxxx?status=down&msg=fail | ||||
|  | ||||
| # Push Basic Auth | ||||
| #COMPOSE_FILE="$COMPOSE_FILE:compose.pushbasicauth.yml" | ||||
| #SECRET_PUSH_BASICAUTH=v1 | ||||
|  | ||||
| # swarm-cronjob, instead of built-in cron | ||||
| #COMPOSE_FILE="$COMPOSE_FILE:compose.swarm-cronjob.yml" | ||||
|  | ||||
|  | ||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
								
							| @ -104,15 +104,38 @@ See [restic REST docs](https://restic.readthedocs.io/en/latest/030_preparing_a_n | ||||
|  | ||||
| ## Push notifications | ||||
|  | ||||
| It is possible to configure three push events, that may trigger on the backup cronjob. Those can be used to detect failures from mointoring systems. | ||||
| The events are: | ||||
| - start | ||||
| - success | ||||
| - fail | ||||
|  | ||||
| ### Using a Prometheus Push Gateway | ||||
|  | ||||
| [A prometheus push gateway](https://git.coopcloud.tech/coop-cloud/monitoring-ng#setup-push-gateway) can be used by setting the following env variables: | ||||
| - `PUSH_PROMETHEUS_URL=pushgateway.example.com/metrics/job/backup` | ||||
|  | ||||
| ### Using custom URLs | ||||
|  | ||||
| The following env variables can be used to setup push notifications for backups. `PUSH_URL_START` is requested just before the backups starts, `PUSH_URL_SUCCESS` is only requested if the backup was successful and if the backup fails `PUSH_URL_FAIL` will be requested. | ||||
| Each variable is optional and independent of the other. | ||||
| ``` | ||||
|  | ||||
| ``` | ||||
| PUSH_URL_START=https://status.example.com/api/push/xxxxxxxxxx?status=up&msg=start | ||||
| PUSH_URL_SUCCESS=https://status.example.com/api/push/xxxxxxxxxx?status=up&msg=OK | ||||
| PUSH_URL_FAIL=https://status.example.com/api/push/xxxxxxxxxx?status=down&msg=fail | ||||
| ``` | ||||
|  | ||||
| ### Push endpoint behind basic auth | ||||
|  | ||||
| Insert the basic auth secret | ||||
| `abra app secret insert <backupbot_name> push_basicauth v1 "user:password"` | ||||
|  | ||||
| Enable basic auth in the env file, by uncommenting the following line: | ||||
| ``` | ||||
| #COMPOSE_FILE="$COMPOSE_FILE:compose.pushbasicauth.yml" | ||||
| #SECRET_PUSH_BASICAUTH=v1 | ||||
| ``` | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
|  | ||||
							
								
								
									
										2
									
								
								abra.sh
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								abra.sh
									
									
									
									
									
								
							| @ -1,5 +1,7 @@ | ||||
| export BACKUPBOT_VERSION=v1 | ||||
| export SSH_CONFIG_VERSION=v1 | ||||
| export ENTRYPOINT_VERSION=v17 | ||||
| export CRONJOB_VERSION=v2 | ||||
|  | ||||
| run_cron () { | ||||
|     schedule="$(crontab -l | tr -s " " | cut -d ' ' -f-5)" | ||||
|  | ||||
							
								
								
									
										11
									
								
								compose.pushbasicauth.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								compose.pushbasicauth.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| --- | ||||
| version: "3.8" | ||||
| services: | ||||
|   app: | ||||
|     secrets: | ||||
|       - push_basicauth | ||||
|  | ||||
| secrets: | ||||
|   push_basicauth: | ||||
|     external: true | ||||
|     name: ${STACK_NAME}_push_basicauth_${SECRET_PUSH_BASICAUTH} | ||||
							
								
								
									
										15
									
								
								compose.yml
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								compose.yml
									
									
									
									
									
								
							| @ -14,6 +14,13 @@ services: | ||||
|       - RESTIC_PASSWORD_FILE=/run/secrets/restic_password | ||||
|     secrets: | ||||
|       - restic_password | ||||
|     configs: | ||||
|       - source: entrypoint | ||||
|         target: /entrypoint.sh | ||||
|         mode: 666 | ||||
|       - source: cronjob | ||||
|         target: /cronjob.sh | ||||
|         mode: 666 | ||||
|     deploy: | ||||
|       labels: | ||||
|         - coop-cloud.${STACK_NAME}.version=0.1.0+latest | ||||
| @ -32,5 +39,13 @@ secrets: | ||||
|     external: true | ||||
|     name: ${STACK_NAME}_restic_password_${SECRET_RESTIC_PASSWORD_VERSION} | ||||
|  | ||||
| configs: | ||||
|   entrypoint: | ||||
|     name: ${STACK_NAME}_entrypoint_${ENTRYPOINT_VERSION} | ||||
|     file: entrypoint.sh | ||||
|   cronjob: | ||||
|     name: ${STACK_NAME}_cronjob_${CRONJOB_VERSION} | ||||
|     file: cronjob.sh | ||||
|  | ||||
| volumes: | ||||
|   backups: | ||||
|  | ||||
							
								
								
									
										40
									
								
								cronjob.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								cronjob.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,40 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| set -e | ||||
|  | ||||
| CURL_OPTS="-s" | ||||
| # Check for basic auth | ||||
| if [ -n "$(cat /run/secrets/push_basicauth)" ] | ||||
| then | ||||
|     CURL_OPTS="$CURL_OPTS -u $(cat /run/secrets/push_basicauth)" | ||||
| fi | ||||
|  | ||||
| if [ -n "$PUSH_PROMETHEUS_URL" ] | ||||
| then | ||||
|     push_start_notification="(echo 'backup 1' | curl $CURL_OPTS --data-binary @- $PUSH_PROMETHEUS_URL)" | ||||
|     push_success_notification="(echo 'backup 0' | curl $CURL_OPTS --data-binary @- $PUSH_PROMETHEUS_URL)" | ||||
|     push_fail_notification="(echo 'backup -1' | curl $CURL_OPTS --data-binary @- $PUSH_PROMETHEUS_URL)" | ||||
| else | ||||
|     if [ -n "$PUSH_URL_START" ] | ||||
|     then | ||||
|         push_start_notification="curl $CURL_OPTS '$PUSH_URL_START'" | ||||
|     fi | ||||
|  | ||||
|     if [ -n "$PUSH_URL_FAIL" ] | ||||
|     then | ||||
|         push_fail_notification="curl $CURL_OPTS '$PUSH_URL_FAIL'" | ||||
|     fi | ||||
|  | ||||
|     if [ -n "$PUSH_URL_SUCCESS" ] | ||||
|     then | ||||
|         push_success_notification="curl $CURL_OPTS '$PUSH_URL_SUCCESS'" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| eval "$push_start_notification" | ||||
| if [ "$(backup --machine-logs create  2>&1 | tee /tmp/backup.log && (grep -q 'backup finished' /tmp/backup.log))" ] | ||||
| then | ||||
|     eval "$push_success_notification" | ||||
| else | ||||
|     eval "$push_fail_notification" | ||||
| fi | ||||
| @ -9,22 +9,7 @@ fi | ||||
|  | ||||
| cron_schedule="${CRON_SCHEDULE:?CRON_SCHEDULE not set}" | ||||
|  | ||||
| if [ -n "$PUSH_URL_START" ] | ||||
| then | ||||
|     push_start_notification="curl -s '$PUSH_URL_START' &&" | ||||
| fi | ||||
|  | ||||
| if [ -n "$PUSH_URL_FAIL" ] | ||||
| then | ||||
|     push_fail_notification="|| curl -s '$PUSH_URL_FAIL'" | ||||
| fi | ||||
|  | ||||
| if [ -n "$PUSH_URL_SUCCESS" ] | ||||
| then | ||||
|     push_notification=" && (grep -q 'backup finished' /tmp/backup.log && curl -s '$PUSH_URL_SUCCESS' $push_fail_notification)" | ||||
| fi | ||||
|  | ||||
| echo "$cron_schedule $push_start_notification backup --machine-logs create  2>&1 | tee /tmp/backup.log $push_notification" | crontab - | ||||
| echo "$cron_schedule /cronjob.sh" | crontab - | ||||
| crontab -l | ||||
|  | ||||
| crond -f -d8 -L /dev/stdout | ||||
|  | ||||
		Reference in New Issue
	
	Block a user