Skip to content

Commit 573aaf2

Browse files
authoredApr 4, 2023
Merge pull request #54 from woblerr/add_backrest_2_45
Add changes from pgBackRest v2.45.
2 parents c9cdba7 + fc7f5cd commit 573aaf2

10 files changed

+145
-74
lines changed
 

‎.github/workflows/build.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ jobs:
1010
build:
1111
runs-on: ubuntu-latest
1212
env:
13-
backrest_version: "2.44"
14-
docker_backrest_version: "v0.17"
13+
backrest_version: "2.45"
14+
docker_backrest_version: "v0.18"
1515
build_platforms: "linux/amd64,linux/arm64"
1616
steps:
1717
- name: Set up go 1.18

‎Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
ARG BACKREST_VERSION="2.44"
2-
ARG DOCKER_BACKREST_VERSION="v0.17"
1+
ARG BACKREST_VERSION="2.45"
2+
ARG DOCKER_BACKREST_VERSION="v0.18"
33
ARG REPO_BUILD_TAG="unknown"
44

55
FROM golang:1.18-buster AS builder

‎Makefile

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ BRANCH := $(subst /,-,$(BRANCH_FULL))
55
GIT_REV := $(shell git describe --abbrev=7 --always)
66
SERVICE_CONF_DIR := /etc/systemd/system
77
HTTP_PORT := 9854
8-
BACKREST_VERSION := 2.44
9-
DOCKER_BACKREST_VERSION := v0.17
8+
BACKREST_VERSION := 2.45
9+
DOCKER_BACKREST_VERSION := v0.18
1010
ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
1111
DOCKER_CONTAINER_E2E := $(shell docker ps -a -q -f name=$(APP_NAME)_e2e)
1212
HTTP_PORT_E2E := $(shell echo $$((10000 + ($$RANDOM % 10000))))

‎README.md

+8-3
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,14 @@ The metrics provided by the client.
9999

100100
## Compatibility with pgBackRest versions
101101

102-
All metrics are collected for `pgBackRest >= v2.44`.
102+
The number of collected metrics may vary depending on pgBackRest version.
103103

104-
For earlier versions, some metrics may not be collected or have insignificant label values:
104+
For different versions, some metrics may not be collected or have insignificant label values:
105+
106+
* `pgBackRest >= v2.45`
107+
108+
The following metric will be absent for block incremental backups:
109+
* `pgbackrest_backup_repo_size_bytes`.
105110

106111
* `pgBackRest < v2.44`
107112

@@ -215,7 +220,7 @@ For a significant number of stanzas, this may require additional time to collect
215220

216221
### Building and running docker
217222

218-
By default, pgBackRest version is `2.44`. Another version can be specified via arguments.
223+
By default, pgBackRest version is `2.45`. Another version can be specified via arguments.
219224
For base image used [docker-pgbackrest](https://github.com/woblerr/docker-pgbackrest) image.
220225

221226
Environment variables supported by this image:

‎backrest/backrest_parser.go

+34-27
Original file line numberDiff line numberDiff line change
@@ -466,34 +466,41 @@ func getBackupMetrics(config, configIncludePath, stanzaName string, backupData [
466466
)
467467
}
468468
// Repo backup set size.
469-
level.Debug(logger).Log(
470-
"msg", "Metric pgbackrest_backup_repo_size_bytes",
471-
"value", float64(backup.Info.Repository.Size),
472-
"labels",
473-
strings.Join(
474-
[]string{
475-
backup.Label,
476-
backup.Type,
477-
strconv.Itoa(backup.Database.ID),
478-
strconv.Itoa(backup.Database.RepoKey),
479-
stanzaName,
480-
}, ",",
481-
),
482-
)
483-
err = setUpMetricValueFun(
484-
pgbrStanzaBackupRepoBackupSetSizeMetric,
485-
float64(backup.Info.Repository.Size),
486-
backup.Label,
487-
backup.Type,
488-
strconv.Itoa(backup.Database.ID),
489-
strconv.Itoa(backup.Database.RepoKey),
490-
stanzaName,
491-
)
492-
if err != nil {
493-
level.Error(logger).Log(
494-
"msg", "Metric pgbackrest_backup_repo_size_bytes set up failed",
495-
"err", err,
469+
// Starting from pgBackRest v2.45, there is no 'backup set size' value
470+
// for block incremental backups.
471+
// See https://github.com/pgbackrest/pgbackrest/commit/6252c0e4485caee362edec13302a5f735a69bff4
472+
// and https://github.com/pgbackrest/pgbackrest/projects/2#card-87759001
473+
// This behavior may change in future pgBackRest releases.
474+
if backup.Info.Repository.Size != nil {
475+
level.Debug(logger).Log(
476+
"msg", "Metric pgbackrest_backup_repo_size_bytes",
477+
"value", float64(*backup.Info.Repository.Size),
478+
"labels",
479+
strings.Join(
480+
[]string{
481+
backup.Label,
482+
backup.Type,
483+
strconv.Itoa(backup.Database.ID),
484+
strconv.Itoa(backup.Database.RepoKey),
485+
stanzaName,
486+
}, ",",
487+
),
488+
)
489+
err = setUpMetricValueFun(
490+
pgbrStanzaBackupRepoBackupSetSizeMetric,
491+
float64(*backup.Info.Repository.Size),
492+
backup.Label,
493+
backup.Type,
494+
strconv.Itoa(backup.Database.ID),
495+
strconv.Itoa(backup.Database.RepoKey),
496+
stanzaName,
496497
)
498+
if err != nil {
499+
level.Error(logger).Log(
500+
"msg", "Metric pgbackrest_backup_repo_size_bytes set up failed",
501+
"err", err,
502+
)
503+
}
497504
}
498505
// Repo backup size.
499506
level.Debug(logger).Log(

‎backrest/backrest_parser_test.go

+91-32
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,9 @@ func TestGetRepoMetricsErrorsAndDebugs(t *testing.T) {
259259
// All metrics exist and all labels are corrected.
260260
// pgBackrest version = latest.
261261
// With '--backrest.database-count' flag.
262+
// The case when the backup is performed with block incremental feature flags.
263+
// Absent metrics:
264+
// - pgbackrest_backup_repo_size_bytes
262265
//
263266
//nolint:dupl
264267
func TestGetBackupMetrics(t *testing.T) {
@@ -287,16 +290,13 @@ pgbackrest_backup_duration_seconds{backup_name="20210607-092423F",backup_type="f
287290
pgbackrest_backup_error_status{backup_name="20210607-092423F",backup_type="full",database_id="1",repo_key="1",stanza="demo"} 1
288291
# HELP pgbackrest_backup_info Backup info.
289292
# TYPE pgbackrest_backup_info gauge
290-
pgbackrest_backup_info{backrest_ver="2.44",backup_name="20210607-092423F",backup_type="full",block_incr="y",database_id="1",lsn_start="0/2000028",lsn_stop="0/2000100",pg_version="13",prior="",repo_key="1",stanza="demo",wal_start="000000010000000000000002",wal_stop="000000010000000000000002"} 1
293+
pgbackrest_backup_info{backrest_ver="2.45",backup_name="20210607-092423F",backup_type="full",block_incr="y",database_id="1",lsn_start="0/2000028",lsn_stop="0/2000100",pg_version="13",prior="",repo_key="1",stanza="demo",wal_start="000000010000000000000002",wal_stop="000000010000000000000002"} 1
291294
# HELP pgbackrest_backup_repo_delta_bytes Compressed files size in backup.
292295
# TYPE pgbackrest_backup_repo_delta_bytes gauge
293296
pgbackrest_backup_repo_delta_bytes{backup_name="20210607-092423F",backup_type="full",database_id="1",repo_key="1",stanza="demo"} 2.969514e+06
294297
# HELP pgbackrest_backup_repo_delta_map_bytes Size of block incremental delta map.
295298
# TYPE pgbackrest_backup_repo_delta_map_bytes gauge
296299
pgbackrest_backup_repo_delta_map_bytes{backup_name="20210607-092423F",backup_type="full",database_id="1",repo_key="1",stanza="demo"} 12
297-
# HELP pgbackrest_backup_repo_size_bytes Full compressed files size to restore the database from backup.
298-
# TYPE pgbackrest_backup_repo_size_bytes gauge
299-
pgbackrest_backup_repo_size_bytes{backup_name="20210607-092423F",backup_type="full",database_id="1",repo_key="1",stanza="demo"} 2.969514e+06
300300
# HELP pgbackrest_backup_repo_size_map_bytes Size of block incremental map.
301301
# TYPE pgbackrest_backup_repo_size_map_bytes gauge
302302
pgbackrest_backup_repo_size_map_bytes{backup_name="20210607-092423F",backup_type="full",database_id="1",repo_key="1",stanza="demo"} 100
@@ -344,9 +344,9 @@ pgbackrest_backup_size_bytes{backup_name="20210607-092423F",backup_type="full",d
344344
`[{"archive":[{"database":{"id":1,"repo-key":1},"id":"13-1",` +
345345
`"max":"000000010000000000000002","min":"000000010000000000000001"}],` +
346346
`"backup":[{"archive":{"start":"000000010000000000000002","stop":"000000010000000000000002"},` +
347-
`"backrest":{"format":5,"version":"2.44"},"database":{"id":1,"repo-key":1},` +
347+
`"backrest":{"format":5,"version":"2.45"},"database":{"id":1,"repo-key":1},` +
348348
`"database-ref":[{"name":"postgres","oid":13412}],"error":true,"error-list":["base/1/3351"],` +
349-
`"info":{"delta":24316343,"repository":{"delta":2969512, "delta-map":12,"size":2969512,"size-map":100},"size":24316343},` +
349+
`"info":{"delta":24316343,"repository":{"delta":2969512, "delta-map":12,"size-map":100},"size":24316343},` +
350350
`"label":"20210614-213200F","lsn":{"start":"0/2000028","stop":"0/2000100"},"prior":null,"reference":null,"timestamp":{"start":1623706320,` +
351351
`"stop":1623706322},"type":"full"}],"cipher":"none","db":[{"id":1,"repo-key":1,` +
352352
`"system-id":6970977677138971135,"version":"13"}],"name":"demo","repo":[{"cipher":"none",` +
@@ -454,17 +454,17 @@ pgbackrest_backup_size_bytes{backup_name="20210607-092423F",backup_type="full",d
454454
"000000010000000000000004",
455455
"000000010000000000000001",
456456
[]databaseRef{{"postgres", 13425}},
457-
true).Name,
457+
true, 2969514).Name,
458458
templateStanzaRepoMapSizesAbsent(
459459
"000000010000000000000004",
460460
"000000010000000000000001",
461461
[]databaseRef{{"postgres", 13425}},
462-
true).Backup,
462+
true, 2969514).Backup,
463463
templateStanzaRepoMapSizesAbsent(
464464
"000000010000000000000004",
465465
"000000010000000000000001",
466466
[]databaseRef{{"postgres", 13425}},
467-
true).DB,
467+
true, 2969514).DB,
468468
true,
469469
setUpMetricValue,
470470
templateMetrics,
@@ -572,17 +572,20 @@ pgbackrest_backup_size_bytes{backup_name="20210607-092423F",backup_type="full",d
572572
"000000010000000000000004",
573573
"000000010000000000000001",
574574
[]databaseRef{{"postgres", 13425}},
575-
true).Name,
575+
true,
576+
2969514).Name,
576577
templateStanzaRepoMapSizesAbsent(
577578
"000000010000000000000004",
578579
"000000010000000000000001",
579580
[]databaseRef{{"postgres", 13425}},
580-
true).Backup,
581+
true,
582+
2969514).Backup,
581583
templateStanzaRepoMapSizesAbsent(
582584
"000000010000000000000004",
583585
"000000010000000000000001",
584586
[]databaseRef{{"postgres", 13425}},
585-
true).DB,
587+
true,
588+
2969514).DB,
586589
true,
587590
setUpMetricValue,
588591
templateMetrics,
@@ -689,13 +692,16 @@ pgbackrest_backup_size_bytes{backup_name="20210607-092423F",backup_type="full",d
689692
"",
690693
templateStanzaErrorAbsent(
691694
"000000010000000000000004",
692-
"000000010000000000000001").Name,
695+
"000000010000000000000001",
696+
2969514).Name,
693697
templateStanzaErrorAbsent(
694698
"000000010000000000000004",
695-
"000000010000000000000001").Backup,
699+
"000000010000000000000001",
700+
2969514).Backup,
696701
templateStanzaErrorAbsent(
697702
"000000010000000000000004",
698-
"000000010000000000000001").DB,
703+
"000000010000000000000001",
704+
2969514).DB,
699705
true,
700706
setUpMetricValue,
701707
templateMetrics,
@@ -802,13 +808,16 @@ pgbackrest_backup_size_bytes{backup_name="20210607-092423F",backup_type="full",d
802808
"",
803809
templateStanzaRepoAbsent(
804810
"000000010000000000000004",
805-
"000000010000000000000001").Name,
811+
"000000010000000000000001",
812+
2969514).Name,
806813
templateStanzaRepoAbsent(
807814
"000000010000000000000004",
808-
"000000010000000000000001").Backup,
815+
"000000010000000000000001",
816+
2969514).Backup,
809817
templateStanzaRepoAbsent(
810818
"000000010000000000000004",
811-
"000000010000000000000001").DB,
819+
"000000010000000000000001",
820+
2969514).DB,
812821
false,
813822
setUpMetricValue,
814823
templateMetrics,
@@ -875,6 +884,8 @@ func TestGetBackupMetricsErrorsAndDebugs(t *testing.T) {
875884
args args
876885
mockTestData mockStruct
877886
}{
887+
// pgBackRest >= 2.45
888+
// Without backup set size.
878889
{
879890
"getBackupMetricsLogError",
880891
args{
@@ -903,8 +914,55 @@ func TestGetBackupMetricsErrorsAndDebugs(t *testing.T) {
903914
100).DB,
904915
true,
905916
fakeSetUpMetricValue,
906-
10,
907-
10,
917+
9,
918+
9,
919+
},
920+
mockStruct{
921+
`[{"archive":[{"database":{"id":1,"repo-key":1},"id":"13-1",` +
922+
`"max":"000000010000000000000002","min":"000000010000000000000001"}],` +
923+
`"backup":[{"archive":{"start":"000000010000000000000002","stop":"000000010000000000000002"},` +
924+
`"backrest":{"format":5,"version":"2.41"},"database":{"id":1,"repo-key":1},` +
925+
`"database-ref":[{"name":"postgres","oid":13412}],"error":true,"error-list":["base/1/3351"],` +
926+
`"info":{"delta":24316343,"repository":{"delta":2969512, "delta-map":12,"size-map":100},"size":24316343},` +
927+
`"label":"20210614-213200F","lsn":{"start":"0/2000028","stop":"0/2000100"},"prior":null,"reference":null,"timestamp":{"start":1623706320,` +
928+
`"stop":1623706322},"type":"full"}],"cipher":"none","db":[{"id":1,"repo-key":1,` +
929+
`"system-id":6970977677138971135,"version":"13"}],"name":"demo","repo":[{"cipher":"none",` +
930+
`"key":1,"status":{"code":0,"message":"ok"}}],"status":{"code":0,"lock":{"backup":` +
931+
`{"held":false}},"message":"ok"}}]`,
932+
"",
933+
0,
934+
},
935+
},
936+
// pgBackrest older than v2.45.
937+
// Here the version is not important.
938+
// Getting an error is being tested for backup set size.
939+
{
940+
"getBackupMetricsLogErrorWithRepo",
941+
args{
942+
"",
943+
"",
944+
templateStanzaRepoMapSizesAbsent(
945+
"000000010000000000000004",
946+
"000000010000000000000001",
947+
[]databaseRef{{"postgres", 13425}},
948+
true,
949+
2969514).Name,
950+
templateStanzaRepoMapSizesAbsent(
951+
"000000010000000000000004",
952+
"000000010000000000000001",
953+
[]databaseRef{{"postgres", 13425}},
954+
true,
955+
2969514).Backup,
956+
templateStanzaRepoMapSizesAbsent(
957+
"000000010000000000000004",
958+
"000000010000000000000001",
959+
[]databaseRef{{"postgres", 13425}},
960+
true,
961+
2969514).DB,
962+
true,
963+
fakeSetUpMetricValue,
964+
8,
965+
8,
908966
},
909967
mockStruct{
910968
`[{"archive":[{"database":{"id":1,"repo-key":1},"id":"13-1",` +
@@ -1831,6 +1889,7 @@ func fakeSetUpMetricValue(metric *prometheus.GaugeVec, value float64, labels ...
18311889
//nolint:unparam
18321890
func templateStanza(walMax, walMin string, dbRef []databaseRef, errorStatus bool, deltaMap, sizeMap int64) stanza {
18331891
var (
1892+
size *int64
18341893
link *[]struct {
18351894
Destination string "json:\"destination\""
18361895
Name string "json:\"name\""
@@ -1854,7 +1913,7 @@ func templateStanza(walMax, walMin string, dbRef []databaseRef, errorStatus bool
18541913
struct {
18551914
Format int "json:\"format\""
18561915
Version string "json:\"version\""
1857-
}{5, "2.44"},
1916+
}{5, "2.45"},
18581917
databaseID{1, 1},
18591918
&dbRef,
18601919
&errorStatus,
@@ -1863,9 +1922,9 @@ func templateStanza(walMax, walMin string, dbRef []databaseRef, errorStatus bool
18631922
struct {
18641923
Delta int64 "json:\"delta\""
18651924
DeltaMap *int64 "json:\"delta-map\""
1866-
Size int64 "json:\"size\""
1925+
Size *int64 "json:\"size\""
18671926
SizeMap *int64 "json:\"size-map\""
1868-
}{2969514, &deltaMap, 2969514, &sizeMap},
1927+
}{2969514, &deltaMap, size, &sizeMap},
18691928
24316343,
18701929
},
18711930
"20210607-092423F",
@@ -1915,7 +1974,7 @@ func templateStanza(walMax, walMin string, dbRef []databaseRef, errorStatus bool
19151974
}
19161975

19171976
//nolint:unparam
1918-
func templateStanzaRepoMapSizesAbsent(walMax, walMin string, dbRef []databaseRef, errorStatus bool) stanza {
1977+
func templateStanzaRepoMapSizesAbsent(walMax, walMin string, dbRef []databaseRef, errorStatus bool, size int64) stanza {
19191978
var (
19201979
deltaMap, sizeMap *int64
19211980
link *[]struct {
@@ -1950,9 +2009,9 @@ func templateStanzaRepoMapSizesAbsent(walMax, walMin string, dbRef []databaseRef
19502009
struct {
19512010
Delta int64 "json:\"delta\""
19522011
DeltaMap *int64 "json:\"delta-map\""
1953-
Size int64 "json:\"size\""
2012+
Size *int64 "json:\"size\""
19542013
SizeMap *int64 "json:\"size-map\""
1955-
}{2969514, deltaMap, 2969514, sizeMap},
2014+
}{2969514, deltaMap, &size, sizeMap},
19562015
24316343,
19572016
},
19582017
"20210607-092423F",
@@ -2002,7 +2061,7 @@ func templateStanzaRepoMapSizesAbsent(walMax, walMin string, dbRef []databaseRef
20022061
}
20032062

20042063
//nolint:unparam
2005-
func templateStanzaErrorAbsent(walMax, walMin string) stanza {
2064+
func templateStanzaErrorAbsent(walMax, walMin string, size int64) stanza {
20062065
var (
20072066
errorStatus *bool
20082067
deltaMap, sizeMap *int64
@@ -2039,9 +2098,9 @@ func templateStanzaErrorAbsent(walMax, walMin string) stanza {
20392098
struct {
20402099
Delta int64 "json:\"delta\""
20412100
DeltaMap *int64 "json:\"delta-map\""
2042-
Size int64 "json:\"size\""
2101+
Size *int64 "json:\"size\""
20432102
SizeMap *int64 "json:\"size-map\""
2044-
}{2969514, deltaMap, 2969514, sizeMap},
2103+
}{2969514, deltaMap, &size, sizeMap},
20452104
24316343,
20462105
},
20472106
"20210607-092423F",
@@ -2091,7 +2150,7 @@ func templateStanzaErrorAbsent(walMax, walMin string) stanza {
20912150
}
20922151

20932152
//nolint:unparam
2094-
func templateStanzaRepoAbsent(walMax, walMin string) stanza {
2153+
func templateStanzaRepoAbsent(walMax, walMin string, size int64) stanza {
20952154
var (
20962155
errorStatus *bool
20972156
deltaMap, sizeMap *int64
@@ -2127,9 +2186,9 @@ func templateStanzaRepoAbsent(walMax, walMin string) stanza {
21272186
struct {
21282187
Delta int64 "json:\"delta\""
21292188
DeltaMap *int64 "json:\"delta-map\""
2130-
Size int64 "json:\"size\""
2189+
Size *int64 "json:\"size\""
21312190
SizeMap *int64 "json:\"size-map\""
2132-
}{2969514, deltaMap, 2969514, sizeMap},
2191+
}{2969514, deltaMap, &size, sizeMap},
21332192
24316343,
21342193
},
21352194
"20210607-092423F",

‎backrest/backrest_struct.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ type backupInfo struct {
128128
Repository struct {
129129
Delta int64 `json:"delta"`
130130
DeltaMap *int64 `json:"delta-map"`
131-
Size int64 `json:"size"`
131+
Size *int64 `json:"size"`
132132
SizeMap *int64 `json:"size-map"`
133133
} `json:"repository"`
134134
Size int64 `json:"size"`

‎e2e_tests/Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
ARG BACKREST_VERSION="2.44"
2-
ARG DOCKER_BACKREST_VERSION="v0.17"
1+
ARG BACKREST_VERSION="2.45"
2+
ARG DOCKER_BACKREST_VERSION="v0.18"
33
ARG PG_VERSION="13"
44

55
FROM golang:1.18-buster AS builder

‎e2e_tests/prepare_e2e.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ pgbackrest stanza-create --stanza ${BACKREST_STANZA} --log-level-console warn
2626
# Create full backup for stanza in repo1.
2727
pgbackrest backup --stanza ${BACKREST_STANZA} --type full --log-level-console warn
2828
# Create full bakup for stanza in repo2 with block incremental.
29-
pgbackrest backup --stanza ${BACKREST_STANZA} --type full --repo 2 --repo2-bundle --repo2-block --log-level-console warn
29+
pgbackrest backup --stanza ${BACKREST_STANZA} --type full --repo 2 --repo2-bundle --repo2-block --log-level-console warn --beta
3030
# Currupt database file.
3131
db_file=$(find ${PG_DATA}/base/${db_oid} -type f -regextype egrep -regex '.*/([0-9]){4}$' -print | head -n 1)
3232
echo "currupt" >> ${db_file}
3333
# Create diff backup with corrupted databse file in repo2 with block incremental.
34-
pgbackrest backup --stanza ${BACKREST_STANZA} --type diff --repo 2 --repo2-bundle --repo2-block --log-level-console warn
34+
pgbackrest backup --stanza ${BACKREST_STANZA} --type diff --repo 2 --repo2-bundle --repo2-block --log-level-console warn --beta
3535
# Update exporter params.
3636
[[ ! -z ${EXPORTER_CONFIG} ]] && EXPORTER_COMMAND="${EXPORTER_COMMAND} --web.config.file=${EXPORTER_CONFIG}"
3737
# Run pgbackrest_exporter.

‎e2e_tests/run_e2e.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ declare -a REGEX_LIST=(
5151
'^pgbackrest_backup_info{.*,block_incr="n",.*} 1$|1'
5252
'^pgbackrest_backup_info{.*,block_incr="y",.*} 1$|2'
5353
'^pgbackrest_backup_repo_delta_bytes{.*}|3'
54-
'^pgbackrest_backup_repo_size_bytes{.*}|3'
54+
'^pgbackrest_backup_repo_size_bytes{.*}|1'
5555
'^pgbackrest_backup_size_bytes{.*}|3'
5656
'^pgbackrest_exporter_info{.*} 1$|1'
5757
'^pgbackrest_repo_status{.*,repo_key="1".*} 0$|1'

0 commit comments

Comments
 (0)
Please sign in to comment.