mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-09-20 13:30:46 +02:00
* 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>
85 lines
3.4 KiB
Go
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"
|
|
)
|