Files
seaweedfs/weed/stats/metrics_names.go
T
df1a25fd3e feat: add Prometheus metrics for replication operations (#10006)
* feat: add Prometheus metrics for replication operations

Adds 5 metrics to instrument volume server replication (write/delete):
- Operations counter with success/failure labels
- Duration histogram for latency tracking
- Targets gauge for replica fanout
- Failures counter with error reason labels
- Under-replicated volumes gauge on master

* fix: record replication duration histogram only when replicaCount > 0

* fix: update replication targets gauge for all operations including zero

* fix: ensure symmetric replication success/failure counting and proper metrics updates

* fix: change VolumeServerReplicationTargets from Gauge to Histogram

- Replace .Set() with .Observe() in store_replicate.go (2 occurrences)
- Update test to use CollectAndCount for histogram assertion
- Rename TestReplicationTargetsGauge -> TestReplicationTargetsHistogram
- Update documentation to reflect Histogram type and PromQL examples

* Add comments to replication metrics and improve test coverage

* metrics: add replication panels to grafana dashboard

Master row gets an under-replicated volumes timeseries; Volume Servers
row gets replication operations, failures-by-reason, p99 duration, and
average fan-out panels for the new replication metrics.

* metrics: name the replication duration histogram replication_seconds

Match the volumeServer convention (request_seconds, vacuuming_seconds)
rather than the admin/lifecycle _duration_seconds spelling.

* metrics: guard replication fan-out panel against divide-by-zero

clamp_min the _count rate so the avg-targets ratio reads 0 instead of
NaN when there are no replication events in the window.

---------

Co-authored-by: Ubuntu User <ubuntu@example.com>
Co-authored-by: Chris Lu <chris.lu@gmail.com>
2026-06-19 11:05:43 -07:00

85 lines
3.4 KiB
Go

package stats
// This file contains metric names for all errors
// The naming convention is ErrorSomeThing = "error.some.thing"
const (
// volume server
WriteToLocalDisk = "writeToLocalDisk"
WriteToReplicas = "writeToReplicas"
DownloadLimitCond = "downloadLimitCondition"
UploadLimitCond = "uploadLimitCondition"
ReadProxyReq = "readProxyRequest"
ReadRedirectReq = "readRedirectRequest"
EmptyReadProxyLoc = "emptyReadProxyLocaction"
FailedReadProxyReq = "failedReadProxyRequest"
ErrorSizeMismatchOffsetSize = "errorSizeMismatchOffsetSize"
ErrorSizeMismatch = "errorSizeMismatch"
ErrorCRC = "errorCRC"
ErrorIndexOutOfRange = "errorIndexOutOfRange"
ErrorGetNotFound = "errorGetNotFound"
ErrorGetInternal = "errorGetInternal"
// master topology
ErrorWriteToLocalDisk = "errorWriteToLocalDisk"
ErrorUnmarshalPairs = "errorUnmarshalPairs"
ErrorWriteToReplicas = "errorWriteToReplicas"
// master client
FailedToKeepConnected = "failedToKeepConnected"
FailedToSend = "failedToSend"
FailedToReceive = "failedToReceive"
RedirectedToLeader = "redirectedToLeader"
OnPeerUpdate = "onPeerUpdate"
Failed = "failed"
// filer handler
DirList = "dirList"
ContentSaveToFiler = "contentSaveToFiler"
AutoChunk = "autoChunk"
ChunkProxy = "chunkProxy"
ChunkAssign = "chunkAssign"
ChunkUpload = "chunkUpload"
ChunkMerge = "chunkMerge"
ChunkDoUploadRetry = "chunkDoUploadRetry"
ChunkUploadRetry = "chunkUploadRetry"
ChunkAssignRetry = "chunkAssignRetry"
ErrorReadNotFound = "read.notfound"
ErrorReadInternal = "read.internal.error"
ErrorWriteEntry = "write.entry.failed"
RepeatErrorUploadContent = "upload.content.repeat.failed"
ErrorChunkAssign = "chunkAssign.failed"
ErrorReadChunk = "read.chunk.failed"
ErrorReadCache = "read.cache.failed"
ErrorReadStream = "read.stream.failed"
// s3 handler
ErrorCompletedNoSuchUpload = "errorCompletedNoSuchUpload"
ErrorCompleteEntityTooSmall = "errorCompleteEntityTooSmall"
ErrorCompletedPartEmpty = "errorCompletedPartEmpty"
ErrorCompletedPartNumber = "errorCompletedPartNumber"
ErrorCompletedPartNotFound = "errorCompletedPartNotFound"
ErrorCompletedEtagInvalid = "errorCompletedEtagInvalid"
ErrorCompletedEtagMismatch = "errorCompletedEtagMismatch"
ErrorCompletedPartEntryMismatch = "errorCompletedPartEntryMismatch"
// ReplicationOpWrite is the label value for write replication operations.
ReplicationOpWrite = "write"
// ReplicationOpDelete is the label value for delete replication operations.
ReplicationOpDelete = "delete"
// ReplicationSuccess is the label value for successful replication operations.
ReplicationSuccess = "success"
// ReplicationFailure is the label value for failed replication operations.
ReplicationFailure = "failure"
// FailureTimeout is the failure reason label for deadline-exceeded errors.
FailureTimeout = "timeout"
// FailureConnectionRefused is the failure reason label for connection-refused errors.
FailureConnectionRefused = "connection_refused"
// FailureContextCancelled is the failure reason label for context-cancelled errors.
FailureContextCancelled = "context_cancelled"
// FailureServerError is the failure reason label for generic server-side errors.
FailureServerError = "server_error"
)