Browse Source

collect volume disk usage metrics

pull/991/head
Chris Lu 6 years ago
parent
commit
0fdb1e705d
  1. 16
      weed/stats/metrics.go
  2. 5
      weed/storage/store.go
  3. 8
      weed/storage/store_ec.go

16
weed/stats/metrics.go

@ -63,6 +63,20 @@ var (
Name: "ecShards",
Help: "Number of EC shards.",
})
VolumeServerVolumeSizeGauge = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: "SeaweedFS",
Subsystem: "volumeServer",
Name: "totalVolumeSize",
Help: "Actual disk size used by volumes.",
})
VolumeServerEcShardSizeGauge = prometheus.NewGauge(
prometheus.GaugeOpts{
Namespace: "SeaweedFS",
Subsystem: "volumeServer",
Name: "totalEcShardSize",
Help: "Actual disk size used by ec shards.",
})
)
func init() {
@ -74,6 +88,8 @@ func init() {
VolumeServerGather.MustRegister(VolumeServerRequestHistogram)
VolumeServerGather.MustRegister(VolumeServerVolumeCounter)
VolumeServerGather.MustRegister(VolumeServerEcShardCounter)
VolumeServerGather.MustRegister(VolumeServerVolumeSizeGauge)
VolumeServerGather.MustRegister(VolumeServerEcShardSizeGauge)
}

5
weed/storage/store.go

@ -6,6 +6,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
"github.com/chrislusf/seaweedfs/weed/stats"
"github.com/chrislusf/seaweedfs/weed/storage/needle"
. "github.com/chrislusf/seaweedfs/weed/storage/types"
"google.golang.org/grpc"
@ -161,6 +162,7 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
var volumeMessages []*master_pb.VolumeInformationMessage
maxVolumeCount := 0
var maxFileKey NeedleId
var totalVolumeSize uint64
for _, location := range s.Locations {
maxVolumeCount = maxVolumeCount + location.MaxVolumeCount
location.Lock()
@ -178,9 +180,12 @@ func (s *Store) CollectHeartbeat() *master_pb.Heartbeat {
glog.V(0).Infoln("volume", v.Id, "is expired.")
}
}
fileSize, _, _ := v.FileStat()
totalVolumeSize += fileSize
}
location.Unlock()
}
stats.VolumeServerVolumeSizeGauge.Set(float64(totalVolumeSize))
return &master_pb.Heartbeat{
Ip: s.Ip,

8
weed/storage/store_ec.go

@ -12,6 +12,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/operation"
"github.com/chrislusf/seaweedfs/weed/pb/master_pb"
"github.com/chrislusf/seaweedfs/weed/pb/volume_server_pb"
"github.com/chrislusf/seaweedfs/weed/stats"
"github.com/chrislusf/seaweedfs/weed/storage/erasure_coding"
"github.com/chrislusf/seaweedfs/weed/storage/needle"
"github.com/klauspost/reedsolomon"
@ -19,14 +20,21 @@ import (
func (s *Store) CollectErasureCodingHeartbeat() *master_pb.Heartbeat {
var ecShardMessages []*master_pb.VolumeEcShardInformationMessage
var totalEcShardSize int64
for _, location := range s.Locations {
location.ecVolumesLock.RLock()
for _, ecShards := range location.ecVolumes {
ecShardMessages = append(ecShardMessages, ecShards.ToVolumeEcShardInformationMessage()...)
for _, ecShard := range ecShards.Shards {
totalEcShardSize += ecShard.Size()
}
}
location.ecVolumesLock.RUnlock()
}
stats.VolumeServerEcShardSizeGauge.Set(float64(totalEcShardSize))
return &master_pb.Heartbeat{
EcShards: ecShardMessages,
HasNoEcShards: len(ecShardMessages) == 0,

Loading…
Cancel
Save