Added repo_name to all metrics

This commit is contained in:
deajan 2025-06-10 18:54:07 +02:00
parent 4b6e5502a6
commit eb2b248284
2 changed files with 24 additions and 18 deletions

View file

@ -7,7 +7,7 @@ __intname__ = "npbackup.gui.core.runner"
__author__ = "Orsiris de Jong"
__copyright__ = "Copyright (C) 2022-2025 NetInvent"
__license__ = "GPL-3.0-only"
__build__ = "2025052301"
__build__ = "2025061001"
from typing import Optional, Callable, Union, List, Tuple
@ -105,10 +105,12 @@ def metric_analyser(
metrics = []
try:
labels = {
"npversion": f"{NAME}{version_dict['version']}-{version_dict['build_type']}"
}
repo_name = repo_config.g("name")
labels = {
"npversion": f"{NAME}{version_dict['version']}-{version_dict['build_type']}",
"repo_name": repo_name,
"action": operation,
}
if repo_config.g("prometheus.metrics"):
labels["instance"] = repo_config.g("prometheus.instance")
labels["backup_job"] = repo_config.g("prometheus.backup_job")
@ -172,25 +174,31 @@ def metric_analyser(
for key, value in labels.items():
if value:
_labels.append(f'{key.strip()}="{value.strip()}"')
labels = ",".join(_labels)
labels = ",".join(list(set(_labels)))
metrics.append(
f'npbackup_exec_state{{{labels},action="{operation}",repo_name="{repo_name}",timestamp="{int(datetime.now(timezone.utc).timestamp())}"}} {exec_state}'
f'npbackup_exec_state{{{labels},timestamp="{int(datetime.now(timezone.utc).timestamp())}"}} {exec_state}'
)
# Add upgrade state if upgrades activated
upgrade_state = os.environ.get("NPBACKUP_UPGRADE_STATE", None)
try:
upgrade_state = int(upgrade_state)
_labels = []
labels["action"] = "upgrade"
for key, value in labels.items():
if value:
_labels.append(f'{key.strip()}="{value.strip()}"')
labels = ",".join(list(set(_labels)))
metrics.append(
f'npbackup_exec_state{{{labels},action="upgrade",repo_name="{repo_name}",timestamp="{int(datetime.now(timezone.utc).timestamp())}"}} {upgrade_state}'
f'npbackup_exec_state{{{labels},timestamp="{int(datetime.now(timezone.utc).timestamp())}"}} {upgrade_state}'
)
except (ValueError, TypeError):
pass
if isinstance(exec_time, (int, float)):
try:
metrics.append(
f'npbackup_exec_time{{{labels},action="{operation}",repo_name="{repo_name}",timestamp="{int(datetime.now(timezone.utc).timestamp())}"}} {exec_time}'
f'npbackup_exec_time{{{labels},timestamp="{int(datetime.now(timezone.utc).timestamp())}"}} {exec_time}'
)
except (ValueError, TypeError):
logger.warning("Cannot get exec time from environment")

View file

@ -6,8 +6,8 @@ __intname__ = "restic_metrics"
__author__ = "Orsiris de Jong"
__copyright__ = "Copyright (C) 2022-2025 NetInvent"
__license__ = "BSD-3-Clause"
__version__ = "2.0.3"
__build__ = "2025052301"
__version__ = "2.1.0"
__build__ = "2025061001"
__description__ = (
"Converts restic command line output to a text file node_exporter can scrape"
)
@ -183,7 +183,7 @@ def restic_json_to_prometheus(
for key, value in labels.items():
if value:
_labels.append(f'{key.strip()}="{value.strip()}"')
labels = ",".join(_labels)
labels = ",".join(list(set(_labels)))
# If restic_json is a bool, just fail
if isinstance(restic_json, bool):
@ -222,27 +222,25 @@ def restic_json_to_prometheus(
if key.endswith(enders):
if value is not None:
prom_metrics.append(
f'restic_{starters}{{{labels},state="{enders}",action="backup"}} {value}'
f'restic_{starters}{{{labels},state="{enders}"}} {value}'
)
skip = True
if skip:
continue
if key == "total_files_processed":
if value is not None:
prom_metrics.append(
f'restic_files{{{labels},state="total",action="backup"}} {value}'
)
prom_metrics.append(f'restic_files{{{labels},state="total"}} {value}')
continue
if key == "total_bytes_processed":
if value is not None:
prom_metrics.append(
f'restic_snasphot_size_bytes{{{labels},action="backup",type="processed"}} {value}'
f'restic_snasphot_size_bytes{{{labels},type="processed"}} {value}'
)
continue
if "duration" in key:
key += "_seconds"
if value is not None:
prom_metrics.append(f'restic_{key}{{{labels},action="backup"}} {value}')
prom_metrics.append(f"restic_{key}{{{labels}}} {value}")
backup_too_small = False
try:
@ -438,7 +436,7 @@ def restic_output_2_metrics(restic_result, output, labels=None):
seconds_elapsed = convert_time_to_seconds(matches.group(4))
try:
metrics.append(
'restic_backup_duration_seconds{{{},action="backup"}} {}'.format(
"restic_backup_duration_seconds{{{}}} {}".format(
labels, int(seconds_elapsed)
)
)