mirror of
https://github.com/zrepl/zrepl.git
synced 2025-02-13 00:50:01 +01:00
parent
30057d4e59
commit
0764f8824e
53
zfs/prometheus.go
Normal file
53
zfs/prometheus.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package zfs
|
||||||
|
|
||||||
|
import "github.com/prometheus/client_golang/prometheus"
|
||||||
|
|
||||||
|
var prom struct {
|
||||||
|
ZFSListFilesystemVersionDuration *prometheus.HistogramVec
|
||||||
|
ZFSDestroyFilesystemVersionDuration *prometheus.HistogramVec
|
||||||
|
ZFSSnapshotDuration *prometheus.HistogramVec
|
||||||
|
ZFSBookmarkDuration *prometheus.HistogramVec
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
prom.ZFSListFilesystemVersionDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
||||||
|
Namespace: "zrepl",
|
||||||
|
Subsystem: "zfs",
|
||||||
|
Name: "list_filesystem_versions_duration",
|
||||||
|
Help: "Seconds it took for listing the versions of a given filesystem",
|
||||||
|
}, []string{"filesystem"})
|
||||||
|
prom.ZFSDestroyFilesystemVersionDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
||||||
|
Namespace: "zrepl",
|
||||||
|
Subsystem: "zfs",
|
||||||
|
Name: "destroy_filesystem_version_duration",
|
||||||
|
Help: "Seconds it took to destroy a version of a given filesystem",
|
||||||
|
}, []string{"filesystem", "version_type"})
|
||||||
|
prom.ZFSSnapshotDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
||||||
|
Namespace: "zrepl",
|
||||||
|
Subsystem: "zfs",
|
||||||
|
Name: "snapshot_duration",
|
||||||
|
Help: "Seconds it took to create a snapshot a given filesystem",
|
||||||
|
}, []string{"filesystem"})
|
||||||
|
prom.ZFSBookmarkDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
||||||
|
Namespace: "zrepl",
|
||||||
|
Subsystem: "zfs",
|
||||||
|
Name: "bookmark_duration",
|
||||||
|
Help: "Duration it took to bookmark a given snapshot",
|
||||||
|
}, []string{"filesystem"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func PrometheusRegister(registry prometheus.Registerer) error {
|
||||||
|
if err := registry.Register(prom.ZFSListFilesystemVersionDuration); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := registry.Register(prom.ZFSDestroyFilesystemVersionDuration); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := registry.Register(prom.ZFSBookmarkDuration); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := registry.Register(prom.ZFSSnapshotDuration); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@ -5,6 +5,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -28,6 +29,10 @@ func (t VersionType) DelimiterChar() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t VersionType) String() string {
|
||||||
|
return string(t)
|
||||||
|
}
|
||||||
|
|
||||||
type FilesystemVersion struct {
|
type FilesystemVersion struct {
|
||||||
Type VersionType
|
Type VersionType
|
||||||
|
|
||||||
@ -64,6 +69,9 @@ type FilesystemVersionFilter interface {
|
|||||||
func ZFSListFilesystemVersions(fs *DatasetPath, filter FilesystemVersionFilter) (res []FilesystemVersion, err error) {
|
func ZFSListFilesystemVersions(fs *DatasetPath, filter FilesystemVersionFilter) (res []FilesystemVersion, err error) {
|
||||||
listResults := make(chan ZFSListResult)
|
listResults := make(chan ZFSListResult)
|
||||||
|
|
||||||
|
promTimer := prometheus.NewTimer(prom.ZFSListFilesystemVersionDuration.WithLabelValues(fs.ToString()))
|
||||||
|
defer promTimer.ObserveDuration()
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
go ZFSListChan(ctx, listResults,
|
go ZFSListChan(ctx, listResults,
|
||||||
@ -137,6 +145,9 @@ func ZFSListFilesystemVersions(fs *DatasetPath, filter FilesystemVersionFilter)
|
|||||||
|
|
||||||
func ZFSDestroyFilesystemVersion(filesystem *DatasetPath, version FilesystemVersion) (err error) {
|
func ZFSDestroyFilesystemVersion(filesystem *DatasetPath, version FilesystemVersion) (err error) {
|
||||||
|
|
||||||
|
promTimer := prometheus.NewTimer(prom.ZFSDestroyFilesystemVersionDuration.WithLabelValues(filesystem.ToString(), version.Type.String()))
|
||||||
|
defer promTimer.ObserveDuration()
|
||||||
|
|
||||||
datasetPath := version.ToAbsPath(filesystem)
|
datasetPath := version.ToAbsPath(filesystem)
|
||||||
|
|
||||||
// Sanity check...
|
// Sanity check...
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
|
|
||||||
"context"
|
"context"
|
||||||
"github.com/problame/go-rwccmd"
|
"github.com/problame/go-rwccmd"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/zrepl/zrepl/util"
|
"github.com/zrepl/zrepl/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -386,6 +387,9 @@ func zfsBuildBookmarkName(fs *DatasetPath, name string) string { // TODO defensi
|
|||||||
|
|
||||||
func ZFSSnapshot(fs *DatasetPath, name string, recursive bool) (err error) {
|
func ZFSSnapshot(fs *DatasetPath, name string, recursive bool) (err error) {
|
||||||
|
|
||||||
|
promTimer := prometheus.NewTimer(prom.ZFSSnapshotDuration.WithLabelValues(fs.ToString()))
|
||||||
|
defer promTimer.ObserveDuration()
|
||||||
|
|
||||||
snapname := zfsBuildSnapName(fs, name)
|
snapname := zfsBuildSnapName(fs, name)
|
||||||
cmd := exec.Command(ZFS_BINARY, "snapshot", snapname)
|
cmd := exec.Command(ZFS_BINARY, "snapshot", snapname)
|
||||||
|
|
||||||
@ -409,6 +413,9 @@ func ZFSSnapshot(fs *DatasetPath, name string, recursive bool) (err error) {
|
|||||||
|
|
||||||
func ZFSBookmark(fs *DatasetPath, snapshot, bookmark string) (err error) {
|
func ZFSBookmark(fs *DatasetPath, snapshot, bookmark string) (err error) {
|
||||||
|
|
||||||
|
promTimer := prometheus.NewTimer(prom.ZFSBookmarkDuration.WithLabelValues(fs.ToString()))
|
||||||
|
defer promTimer.ObserveDuration()
|
||||||
|
|
||||||
snapname := zfsBuildSnapName(fs, snapshot)
|
snapname := zfsBuildSnapName(fs, snapshot)
|
||||||
bookmarkname := zfsBuildBookmarkName(fs, bookmark)
|
bookmarkname := zfsBuildBookmarkName(fs, bookmark)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user