mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-10-01 04:05:38 +00:00
Add a metrics package to add and expose metrics
* add a metrics package to handle metric registration and publishing * add a metricsAddress field to the server struct * make metrics a part of the server * start a metrics endpoint as part of starting the controllers * instrument backup_controller to report metrics * update cli-reference docs * update example deployments with prometheus annotations * update 'pkg/install' tooling with prometheus annotations Signed-off-by: Ashish Amarnath <ashish.amarnath@gmail.com>
This commit is contained in:
@@ -45,6 +45,7 @@ import (
|
||||
arkv1client "github.com/heptio/ark/pkg/generated/clientset/versioned/typed/ark/v1"
|
||||
informers "github.com/heptio/ark/pkg/generated/informers/externalversions/ark/v1"
|
||||
listers "github.com/heptio/ark/pkg/generated/listers/ark/v1"
|
||||
"github.com/heptio/ark/pkg/metrics"
|
||||
"github.com/heptio/ark/pkg/plugin"
|
||||
"github.com/heptio/ark/pkg/util/collections"
|
||||
"github.com/heptio/ark/pkg/util/encode"
|
||||
@@ -67,6 +68,7 @@ type backupController struct {
|
||||
logger logrus.FieldLogger
|
||||
pluginManager plugin.Manager
|
||||
backupTracker BackupTracker
|
||||
metrics *metrics.ServerMetrics
|
||||
}
|
||||
|
||||
func NewBackupController(
|
||||
@@ -79,6 +81,7 @@ func NewBackupController(
|
||||
logger logrus.FieldLogger,
|
||||
pluginManager plugin.Manager,
|
||||
backupTracker BackupTracker,
|
||||
metrics *metrics.ServerMetrics,
|
||||
) Interface {
|
||||
c := &backupController{
|
||||
backupper: backupper,
|
||||
@@ -93,6 +96,7 @@ func NewBackupController(
|
||||
logger: logger,
|
||||
pluginManager: pluginManager,
|
||||
backupTracker: backupTracker,
|
||||
metrics: metrics,
|
||||
}
|
||||
|
||||
c.syncHandler = c.processBackup
|
||||
@@ -269,9 +273,15 @@ func (controller *backupController) processBackup(key string) error {
|
||||
|
||||
logContext.Debug("Running backup")
|
||||
// execution & upload of backup
|
||||
backupScheduleName := backup.GetLabels()["ark-schedule"]
|
||||
controller.metrics.RegisterBackupAttempt(backupScheduleName)
|
||||
|
||||
if err := controller.runBackup(backup, controller.bucket); err != nil {
|
||||
logContext.WithError(err).Error("backup failed")
|
||||
backup.Status.Phase = api.BackupPhaseFailed
|
||||
controller.metrics.RegisterBackupFailed(backupScheduleName)
|
||||
} else {
|
||||
controller.metrics.RegisterBackupSuccess(backupScheduleName)
|
||||
}
|
||||
|
||||
logContext.Debug("Updating backup's final status")
|
||||
@@ -348,7 +358,7 @@ func (controller *backupController) runBackup(backup *api.Backup, bucket string)
|
||||
|
||||
var errs []error
|
||||
|
||||
var backupJsonToUpload, backupFileToUpload io.Reader
|
||||
var backupJSONToUpload, backupFileToUpload io.Reader
|
||||
|
||||
// Do the actual backup
|
||||
if err := controller.backupper.Backup(backup, backupFile, logFile, actions); err != nil {
|
||||
@@ -359,19 +369,29 @@ func (controller *backupController) runBackup(backup *api.Backup, bucket string)
|
||||
backup.Status.Phase = api.BackupPhaseCompleted
|
||||
}
|
||||
|
||||
backupJson := new(bytes.Buffer)
|
||||
if err := encode.EncodeTo(backup, "json", backupJson); err != nil {
|
||||
backupJSON := new(bytes.Buffer)
|
||||
if err := encode.EncodeTo(backup, "json", backupJSON); err != nil {
|
||||
errs = append(errs, errors.Wrap(err, "error encoding backup"))
|
||||
} else {
|
||||
// Only upload the json and backup tarball if encoding to json succeeded.
|
||||
backupJsonToUpload = backupJson
|
||||
backupJSONToUpload = backupJSON
|
||||
backupFileToUpload = backupFile
|
||||
}
|
||||
|
||||
if err := controller.backupService.UploadBackup(bucket, backup.Name, backupJsonToUpload, backupFileToUpload, logFile); err != nil {
|
||||
var backupSizeBytes int64
|
||||
if backupFileStat, err := backupFile.Stat(); err != nil {
|
||||
errs = append(errs, errors.Wrap(err, "error getting file info"))
|
||||
} else {
|
||||
backupSizeBytes = backupFileStat.Size()
|
||||
}
|
||||
|
||||
if err := controller.backupService.UploadBackup(bucket, backup.Name, backupJSONToUpload, backupFileToUpload, logFile); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
|
||||
backupScheduleName := backup.GetLabels()["ark-schedule"]
|
||||
controller.metrics.SetBackupTarballSizeBytesGauge(backupScheduleName, backupSizeBytes)
|
||||
|
||||
log.Info("Backup completed")
|
||||
|
||||
return kerrors.NewAggregate(errs)
|
||||
|
||||
@@ -35,6 +35,7 @@ import (
|
||||
"github.com/heptio/ark/pkg/cloudprovider"
|
||||
"github.com/heptio/ark/pkg/generated/clientset/versioned/fake"
|
||||
informers "github.com/heptio/ark/pkg/generated/informers/externalversions"
|
||||
"github.com/heptio/ark/pkg/metrics"
|
||||
"github.com/heptio/ark/pkg/restore"
|
||||
"github.com/heptio/ark/pkg/util/collections"
|
||||
arktest "github.com/heptio/ark/pkg/util/test"
|
||||
@@ -169,6 +170,7 @@ func TestProcessBackup(t *testing.T) {
|
||||
logger,
|
||||
pluginManager,
|
||||
NewBackupTracker(),
|
||||
metrics.NewServerMetrics(),
|
||||
).(*backupController)
|
||||
|
||||
c.clock = clock.NewFakeClock(clockTime)
|
||||
|
||||
Reference in New Issue
Block a user