Status file
If you need to send your backup results to a monitoring system, use the run-after
and run-after-fail
scripts.
For simpler needs, resticprofile can generate a JSON file with details of the latest backup, forget, or check command. For example, I use a Zabbix agent to check this file daily. Any monitoring system that reads JSON files can be integrated.
To enable this, add the status file location as a parameter in your profile.
version = "1"
[profile]
status-file = "backup-status.json"
version: "1"
profile:
status-file: backup-status.json
"profile" {
"status-file" = "backup-status.json"
}
{
"version": "1",
"profile": {
"status-file": "backup-status.json"
}
}
Here is an example of a generated file showing the last check
failed, while the last backup
succeeded:
{
"profiles": {
"self": {
"backup": {
"success": true,
"time": "2021-03-24T16:36:56.831077Z",
"error": "",
"stderr": "",
"duration": 16,
"files_new": 215,
"files_changed": 0,
"files_unmodified": 0,
"dirs_new": 58,
"dirs_changed": 0,
"dirs_unmodified": 0,
"files_total": 215,
"bytes_added": 296536447,
"bytes_total": 362952485
},
"check": {
"success": false,
"time": "2021-03-24T15:23:40.270689Z",
"error": "exit status 1",
"stderr": "unable to create lock in backend: repository is already locked exclusively by PID 18534 on dingo by cloud_user (UID 501, GID 20)\nlock was created at 2021-03-24 15:23:29 (10.42277s ago)\nstorage ID 1bf636d2\nthe `unlock` command can be used to remove stale locks\n",
"duration": 1
}
}
}
}
⚠️ Extended status
In the backup section above, you can see fields like files_new
and files_total
. This information is available only when resticprofile’s output is redirected or when the extended-status
flag is added to your backup configuration.
This limitation ensures restic displays terminal output correctly.
The following fields do not require extended-status
or stdout redirection:
- success
- time
- error
- stderr
- duration
The extended-status
flag is disabled by default because it suppresses restic’s output.
version = "1"
[profile]
status-file = "/home/backup/status.json"
[profile.backup]
extended-status = true
source = "/go"
exclude = [ "/**/.git/" ]
version: "1"
profile:
status-file: /home/backup/status.json
backup:
extended-status: true
source: /go
exclude:
- "/**/.git/"
"profile" = {
"status-file" = "/home/backup/status.json"
"backup" = {
"extended-status" = true
"source" = "/go"
"exclude" = ["/**/.git/"]
}
}
{
"version": "1",
"profile": {
"status-file": "/home/backup/status.json",
"backup": {
"extended-status": true,
"source": "/go",
"exclude": [
"/**/.git/"
]
}
}
}