mirror of
https://github.com/minio/minio.git
synced 2024-12-24 06:05:55 -05:00
Add prometheus endpoint to support total Used storageInfo (#5988)
Since we deprecated Total/Free we don't need to update prometheus with those metrics. This PR also adds support for caching implementation.
This commit is contained in:
parent
dd0db526d9
commit
5282639f3c
@ -77,6 +77,13 @@ type cacheObjects struct {
|
||||
DeleteBucketFn func(ctx context.Context, bucket string) error
|
||||
}
|
||||
|
||||
// CacheStorageInfo - represents total, free capacity of
|
||||
// underlying cache storage.
|
||||
type CacheStorageInfo struct {
|
||||
Total uint64 // Total cache disk space.
|
||||
Free uint64 // Free cache available space.
|
||||
}
|
||||
|
||||
// CacheObjectLayer implements primitives for cache object API layer.
|
||||
type CacheObjectLayer interface {
|
||||
// Bucket operations.
|
||||
@ -98,7 +105,7 @@ type CacheObjectLayer interface {
|
||||
CompleteMultipartUpload(ctx context.Context, bucket, object, uploadID string, uploadedParts []CompletePart) (objInfo ObjectInfo, err error)
|
||||
|
||||
// Storage operations.
|
||||
StorageInfo(ctx context.Context) StorageInfo
|
||||
StorageInfo(ctx context.Context) CacheStorageInfo
|
||||
}
|
||||
|
||||
// backendDownError returns true if err is due to backend failure or faulty disk if in server mode
|
||||
@ -771,7 +778,7 @@ func (c cacheObjects) CompleteMultipartUpload(ctx context.Context, bucket, objec
|
||||
}
|
||||
|
||||
// StorageInfo - returns underlying storage statistics.
|
||||
func (c cacheObjects) StorageInfo(ctx context.Context) (storageInfo StorageInfo) {
|
||||
func (c cacheObjects) StorageInfo(ctx context.Context) (cInfo CacheStorageInfo) {
|
||||
var total, free uint64
|
||||
for _, cfs := range c.cache.cfs {
|
||||
if cfs == nil {
|
||||
@ -783,12 +790,10 @@ func (c cacheObjects) StorageInfo(ctx context.Context) (storageInfo StorageInfo)
|
||||
total += info.Total
|
||||
free += info.Free
|
||||
}
|
||||
storageInfo = StorageInfo{
|
||||
return CacheStorageInfo{
|
||||
Total: total,
|
||||
Free: free,
|
||||
}
|
||||
storageInfo.Backend.Type = FS
|
||||
return storageInfo
|
||||
}
|
||||
|
||||
// DeleteBucket - marks bucket to be deleted from cache if bucket is deleted from backend.
|
||||
|
@ -84,6 +84,28 @@ func (c *minioCollector) Collect(ch chan<- prometheus.Metric) {
|
||||
float64(globalConnStats.getTotalInputBytes()),
|
||||
)
|
||||
|
||||
// Expose cache stats only if available
|
||||
cacheObjLayer := newCacheObjectsFn()
|
||||
if cacheObjLayer != nil {
|
||||
cs := cacheObjLayer.StorageInfo(context.Background())
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
prometheus.NewDesc(
|
||||
prometheus.BuildFQName("minio", "disk", "cache_storage_bytes"),
|
||||
"Total cache capacity on current Minio server instance",
|
||||
nil, nil),
|
||||
prometheus.GaugeValue,
|
||||
float64(cs.Total),
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
prometheus.NewDesc(
|
||||
prometheus.BuildFQName("minio", "disk", "cache_storage_free_bytes"),
|
||||
"Total cache available on current Minio server instance",
|
||||
nil, nil),
|
||||
prometheus.GaugeValue,
|
||||
float64(cs.Free),
|
||||
)
|
||||
}
|
||||
|
||||
// Expose disk stats only if applicable
|
||||
|
||||
// Fetch disk space info
|
||||
@ -92,7 +114,9 @@ func (c *minioCollector) Collect(ch chan<- prometheus.Metric) {
|
||||
if objLayer == nil {
|
||||
return
|
||||
}
|
||||
|
||||
s := objLayer.StorageInfo(context.Background())
|
||||
|
||||
// Gateways don't provide disk info
|
||||
if s.Backend.Type == Unknown {
|
||||
return
|
||||
@ -108,22 +132,14 @@ func (c *minioCollector) Collect(ch chan<- prometheus.Metric) {
|
||||
totalDisks = s.Backend.OfflineDisks + s.Backend.OnlineDisks
|
||||
}
|
||||
|
||||
// Total/Free Storage Bytes
|
||||
// Total disk usage by current Minio server instance
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
prometheus.NewDesc(
|
||||
prometheus.BuildFQName("minio", "disk", "storage_bytes"),
|
||||
"Total disk storage available to current Minio server instance",
|
||||
prometheus.BuildFQName("minio", "disk", "storage_used_bytes"),
|
||||
"Total disk storage used by current Minio server instance",
|
||||
nil, nil),
|
||||
prometheus.GaugeValue,
|
||||
float64(s.Total),
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
prometheus.NewDesc(
|
||||
prometheus.BuildFQName("minio", "disk", "storage_free_bytes"),
|
||||
"Total free disk storage available to current Minio server instance",
|
||||
nil, nil),
|
||||
prometheus.GaugeValue,
|
||||
float64(s.Free),
|
||||
float64(s.Used),
|
||||
)
|
||||
|
||||
// Minio Total Disk/Offline Disk
|
||||
|
@ -39,9 +39,7 @@ const (
|
||||
|
||||
// StorageInfo - represents total capacity of underlying storage.
|
||||
type StorageInfo struct {
|
||||
Total uint64 // Total disk space.
|
||||
Free uint64 // Free available space.
|
||||
Used uint64 // Used total used per tenant.
|
||||
Used uint64 // Used total used per tenant.
|
||||
|
||||
// Backend type.
|
||||
Backend struct {
|
||||
|
@ -188,7 +188,7 @@ func printStorageInfo(storageInfo StorageInfo) {
|
||||
}
|
||||
}
|
||||
|
||||
func printCacheStorageInfo(storageInfo StorageInfo) {
|
||||
func printCacheStorageInfo(storageInfo CacheStorageInfo) {
|
||||
msg := fmt.Sprintf("%s %s Free, %s Total", colorBlue("Cache Capacity:"),
|
||||
humanize.IBytes(uint64(storageInfo.Free)),
|
||||
humanize.IBytes(uint64(storageInfo.Total)))
|
||||
|
@ -1786,10 +1786,6 @@ func TestWebObjectLayerFaultyDisks(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("Failed %v", err)
|
||||
}
|
||||
// if Total size is 0 it indicates faulty disk.
|
||||
if storageInfoReply.StorageInfo.Total != 0 {
|
||||
t.Fatalf("Should get zero Total size since disks are faulty ")
|
||||
}
|
||||
|
||||
// Test authorization of Web.Download
|
||||
req, err = http.NewRequest("GET", "/minio/download/bucket/object?token="+authorization, nil)
|
||||
|
Loading…
Reference in New Issue
Block a user