Include backup paths in the exported metrics. Resolves #17
This commit is contained in:
parent
2f4bab16ef
commit
8697539748
2 changed files with 15 additions and 7 deletions
13
README.md
13
README.md
|
@ -123,7 +123,8 @@ is `Flase` (only log error, such as network error with Cloud backends).
|
||||||
reasons. Default is `False` (perform `restic check`).
|
reasons. Default is `False` (perform `restic check`).
|
||||||
- `NO_STATS`: (Optional) Do not collect per backup statistics for performance
|
- `NO_STATS`: (Optional) Do not collect per backup statistics for performance
|
||||||
reasons. Default is `False` (collect per backup statistics).
|
reasons. Default is `False` (collect per backup statistics).
|
||||||
- `NO_LOCKS`: (Optional) Do not collect the number of locks. Default is `False` (collect number of locks).
|
- `NO_LOCKS`: (Optional) Do not collect the number of locks. Default is `False` (collect the number of locks).
|
||||||
|
- `INCLUDE_PATHS`: (Optional) Include snapshot paths for each backup. The paths are separated by commas. Default is `False` (not collect the paths).
|
||||||
|
|
||||||
### Configuration for Rclone
|
### Configuration for Rclone
|
||||||
|
|
||||||
|
@ -163,17 +164,17 @@ restic_locks_total 1.0
|
||||||
restic_snapshots_total 100.0
|
restic_snapshots_total 100.0
|
||||||
# HELP restic_backup_timestamp Timestamp of the last backup
|
# HELP restic_backup_timestamp Timestamp of the last backup
|
||||||
# TYPE restic_backup_timestamp gauge
|
# TYPE restic_backup_timestamp gauge
|
||||||
restic_backup_timestamp{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql"} 1.666273638e+09
|
restic_backup_timestamp{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql",snapshot_paths="/mysql/data,/mysql/config"} 1.666273638e+09
|
||||||
# HELP restic_backup_files_total Number of files in the backup
|
# HELP restic_backup_files_total Number of files in the backup
|
||||||
# TYPE restic_backup_files_total counter
|
# TYPE restic_backup_files_total counter
|
||||||
restic_backup_files_total{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql"} 8.0
|
restic_backup_files_total{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql",snapshot_paths="/mysql/data,/mysql/config"} 8.0
|
||||||
# HELP restic_backup_size_total Total size of backup in bytes
|
# HELP restic_backup_size_total Total size of backup in bytes
|
||||||
# TYPE restic_backup_size_total counter
|
# TYPE restic_backup_size_total counter
|
||||||
restic_backup_size_total{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql"} 4.3309562e+07
|
restic_backup_size_total{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql",snapshot_paths="/mysql/data,/mysql/config"} 4.3309562e+07
|
||||||
# HELP restic_backup_snapshots_total Total number of snapshots
|
# HELP restic_backup_snapshots_total Total number of snapshots
|
||||||
# TYPE restic_backup_snapshots_total counter
|
# TYPE restic_backup_snapshots_total counter
|
||||||
restic_backup_snapshots_total{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql"} 1.0
|
restic_backup_snapshots_total{client_hostname="product.example.com",client_username="root",snapshot_hash="20795072cba0953bcdbe52e9cf9d75e5726042f5bbf2584bb2999372398ee835",snapshot_tag="mysql",snapshot_paths="/mysql/data,/mysql/config"} 1.0
|
||||||
# HELP restic_scrape_duration_seconds Ammount of time each scrape takes
|
# HELP restic_scrape_duration_seconds Amount of time each scrape takes
|
||||||
# TYPE restic_scrape_duration_seconds gauge
|
# TYPE restic_scrape_duration_seconds gauge
|
||||||
restic_scrape_duration_seconds 166.9411084651947
|
restic_scrape_duration_seconds 166.9411084651947
|
||||||
```
|
```
|
||||||
|
|
|
@ -16,7 +16,8 @@ from prometheus_client.core import GaugeMetricFamily, CounterMetricFamily, REGIS
|
||||||
|
|
||||||
class ResticCollector(object):
|
class ResticCollector(object):
|
||||||
def __init__(
|
def __init__(
|
||||||
self, repository, password_file, exit_on_error, disable_check, disable_stats, disable_locks
|
self, repository, password_file, exit_on_error, disable_check,
|
||||||
|
disable_stats, disable_locks, include_paths
|
||||||
):
|
):
|
||||||
self.repository = repository
|
self.repository = repository
|
||||||
self.password_file = password_file
|
self.password_file = password_file
|
||||||
|
@ -24,6 +25,7 @@ class ResticCollector(object):
|
||||||
self.disable_check = disable_check
|
self.disable_check = disable_check
|
||||||
self.disable_stats = disable_stats
|
self.disable_stats = disable_stats
|
||||||
self.disable_locks = disable_locks
|
self.disable_locks = disable_locks
|
||||||
|
self.include_paths = include_paths
|
||||||
# todo: the stats cache increases over time -> remove old ids
|
# todo: the stats cache increases over time -> remove old ids
|
||||||
# todo: cold start -> the stats cache could be saved in a persistent volume
|
# todo: cold start -> the stats cache could be saved in a persistent volume
|
||||||
# todo: cold start -> the restic cache (/root/.cache/restic) could be
|
# todo: cold start -> the restic cache (/root/.cache/restic) could be
|
||||||
|
@ -40,6 +42,7 @@ class ResticCollector(object):
|
||||||
"client_username",
|
"client_username",
|
||||||
"snapshot_hash",
|
"snapshot_hash",
|
||||||
"snapshot_tag",
|
"snapshot_tag",
|
||||||
|
"snapshot_paths",
|
||||||
]
|
]
|
||||||
|
|
||||||
check_success = GaugeMetricFamily(
|
check_success = GaugeMetricFamily(
|
||||||
|
@ -93,6 +96,7 @@ class ResticCollector(object):
|
||||||
client["username"],
|
client["username"],
|
||||||
client["snapshot_hash"],
|
client["snapshot_hash"],
|
||||||
client["snapshot_tag"],
|
client["snapshot_tag"],
|
||||||
|
client["snapshot_paths"],
|
||||||
]
|
]
|
||||||
|
|
||||||
backup_timestamp.add_metric(common_label_values, client["timestamp"])
|
backup_timestamp.add_metric(common_label_values, client["timestamp"])
|
||||||
|
@ -177,6 +181,7 @@ class ResticCollector(object):
|
||||||
"username": snap["username"],
|
"username": snap["username"],
|
||||||
"snapshot_hash": snap["hash"],
|
"snapshot_hash": snap["hash"],
|
||||||
"snapshot_tag": snap["tags"][0] if "tags" in snap else "",
|
"snapshot_tag": snap["tags"][0] if "tags" in snap else "",
|
||||||
|
"snapshot_paths": ",".join(snap["paths"]) if self.include_paths else "",
|
||||||
"timestamp": snap["timestamp"],
|
"timestamp": snap["timestamp"],
|
||||||
"size_total": stats["total_size"],
|
"size_total": stats["total_size"],
|
||||||
"files_total": stats["total_file_count"],
|
"files_total": stats["total_file_count"],
|
||||||
|
@ -355,6 +360,7 @@ if __name__ == "__main__":
|
||||||
exporter_disable_check = bool(os.environ.get("NO_CHECK", False))
|
exporter_disable_check = bool(os.environ.get("NO_CHECK", False))
|
||||||
exporter_disable_stats = bool(os.environ.get("NO_STATS", False))
|
exporter_disable_stats = bool(os.environ.get("NO_STATS", False))
|
||||||
exporter_disable_locks = bool(os.environ.get("NO_LOCKS", False))
|
exporter_disable_locks = bool(os.environ.get("NO_LOCKS", False))
|
||||||
|
exporter_include_paths = bool(os.environ.get("INCLUDE_PATHS", False))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
collector = ResticCollector(
|
collector = ResticCollector(
|
||||||
|
@ -364,6 +370,7 @@ if __name__ == "__main__":
|
||||||
exporter_disable_check,
|
exporter_disable_check,
|
||||||
exporter_disable_stats,
|
exporter_disable_stats,
|
||||||
exporter_disable_locks,
|
exporter_disable_locks,
|
||||||
|
exporter_include_paths,
|
||||||
)
|
)
|
||||||
REGISTRY.register(collector)
|
REGISTRY.register(collector)
|
||||||
start_http_server(exporter_port, exporter_address)
|
start_http_server(exporter_port, exporter_address)
|
||||||
|
|
Loading…
Reference in a new issue