mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-24 21:24:05 -08:00
Promtool tsdb list now prints block sizes (#7993)
* promtool tsdb list now prints blocks' size Signed-off-by: arthursens <arthursens2005@gmail.com>
This commit is contained in:
parent
90680b092c
commit
4f45e201cc
|
@ -30,6 +30,7 @@ import (
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/alecthomas/units"
|
||||||
"github.com/go-kit/kit/log"
|
"github.com/go-kit/kit/log"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/prometheus/prometheus/pkg/labels"
|
"github.com/prometheus/prometheus/pkg/labels"
|
||||||
|
@ -363,12 +364,12 @@ func printBlocks(blocks []tsdb.BlockReader, humanReadable bool) {
|
||||||
tw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
tw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
||||||
defer tw.Flush()
|
defer tw.Flush()
|
||||||
|
|
||||||
fmt.Fprintln(tw, "BLOCK ULID\tMIN TIME\tMAX TIME\tDURATION\tNUM SAMPLES\tNUM CHUNKS\tNUM SERIES")
|
fmt.Fprintln(tw, "BLOCK ULID\tMIN TIME\tMAX TIME\tDURATION\tNUM SAMPLES\tNUM CHUNKS\tNUM SERIES\tSIZE")
|
||||||
for _, b := range blocks {
|
for _, b := range blocks {
|
||||||
meta := b.Meta()
|
meta := b.Meta()
|
||||||
|
|
||||||
fmt.Fprintf(tw,
|
fmt.Fprintf(tw,
|
||||||
"%v\t%v\t%v\t%v\t%v\t%v\t%v\n",
|
"%v\t%v\t%v\t%v\t%v\t%v\t%v\t%v\n",
|
||||||
meta.ULID,
|
meta.ULID,
|
||||||
getFormatedTime(meta.MinTime, humanReadable),
|
getFormatedTime(meta.MinTime, humanReadable),
|
||||||
getFormatedTime(meta.MaxTime, humanReadable),
|
getFormatedTime(meta.MaxTime, humanReadable),
|
||||||
|
@ -376,6 +377,7 @@ func printBlocks(blocks []tsdb.BlockReader, humanReadable bool) {
|
||||||
meta.Stats.NumSamples,
|
meta.Stats.NumSamples,
|
||||||
meta.Stats.NumChunks,
|
meta.Stats.NumChunks,
|
||||||
meta.Stats.NumSeries,
|
meta.Stats.NumSeries,
|
||||||
|
getFormatedBytes(b.Size(), humanReadable),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -387,6 +389,13 @@ func getFormatedTime(timestamp int64, humanReadable bool) string {
|
||||||
return strconv.FormatInt(timestamp, 10)
|
return strconv.FormatInt(timestamp, 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getFormatedBytes(bytes int64, humanReadable bool) string {
|
||||||
|
if humanReadable {
|
||||||
|
return units.Base2Bytes(bytes).String()
|
||||||
|
}
|
||||||
|
return strconv.FormatInt(bytes, 10)
|
||||||
|
}
|
||||||
|
|
||||||
func openBlock(path, blockID string) (*tsdb.DBReadOnly, tsdb.BlockReader, error) {
|
func openBlock(path, blockID string) (*tsdb.DBReadOnly, tsdb.BlockReader, error) {
|
||||||
db, err := tsdb.OpenDBReadOnly(path, nil)
|
db, err := tsdb.OpenDBReadOnly(path, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -124,6 +124,9 @@ type BlockReader interface {
|
||||||
|
|
||||||
// Meta provides meta information about the block reader.
|
// Meta provides meta information about the block reader.
|
||||||
Meta() BlockMeta
|
Meta() BlockMeta
|
||||||
|
|
||||||
|
// Size returns the number of bytes that the block takes up on disk.
|
||||||
|
Size() int64
|
||||||
}
|
}
|
||||||
|
|
||||||
// BlockMeta provides meta information about a block.
|
// BlockMeta provides meta information about a block.
|
||||||
|
|
|
@ -461,6 +461,7 @@ func (erringBReader) Index() (IndexReader, error) { return nil, error
|
||||||
func (erringBReader) Chunks() (ChunkReader, error) { return nil, errors.New("chunks") }
|
func (erringBReader) Chunks() (ChunkReader, error) { return nil, errors.New("chunks") }
|
||||||
func (erringBReader) Tombstones() (tombstones.Reader, error) { return nil, errors.New("tombstones") }
|
func (erringBReader) Tombstones() (tombstones.Reader, error) { return nil, errors.New("tombstones") }
|
||||||
func (erringBReader) Meta() BlockMeta { return BlockMeta{} }
|
func (erringBReader) Meta() BlockMeta { return BlockMeta{} }
|
||||||
|
func (erringBReader) Size() int64 { return 0 }
|
||||||
|
|
||||||
type nopChunkWriter struct{}
|
type nopChunkWriter struct{}
|
||||||
|
|
||||||
|
|
|
@ -1103,11 +1103,9 @@ func BeyondSizeRetention(db *DB, blocks []*Block) (deletable map[ulid.ULID]struc
|
||||||
|
|
||||||
deletable = make(map[ulid.ULID]struct{})
|
deletable = make(map[ulid.ULID]struct{})
|
||||||
|
|
||||||
walSize, _ := db.Head().wal.Size()
|
|
||||||
headChunksSize := db.Head().chunkDiskMapper.Size()
|
|
||||||
// Initializing size counter with WAL size and Head chunks
|
// Initializing size counter with WAL size and Head chunks
|
||||||
// written to disk, as that is part of the retention strategy.
|
// written to disk, as that is part of the retention strategy.
|
||||||
blocksSize := walSize + headChunksSize
|
blocksSize := db.Head().Size()
|
||||||
for i, block := range blocks {
|
for i, block := range blocks {
|
||||||
blocksSize += block.Size()
|
blocksSize += block.Size()
|
||||||
if blocksSize > int64(db.opts.MaxBytes) {
|
if blocksSize > int64(db.opts.MaxBytes) {
|
||||||
|
|
12
tsdb/head.go
12
tsdb/head.go
|
@ -2340,3 +2340,15 @@ type noopSeriesLifecycleCallback struct{}
|
||||||
func (noopSeriesLifecycleCallback) PreCreation(labels.Labels) error { return nil }
|
func (noopSeriesLifecycleCallback) PreCreation(labels.Labels) error { return nil }
|
||||||
func (noopSeriesLifecycleCallback) PostCreation(labels.Labels) {}
|
func (noopSeriesLifecycleCallback) PostCreation(labels.Labels) {}
|
||||||
func (noopSeriesLifecycleCallback) PostDeletion(...labels.Labels) {}
|
func (noopSeriesLifecycleCallback) PostDeletion(...labels.Labels) {}
|
||||||
|
|
||||||
|
func (h *Head) Size() int64 {
|
||||||
|
var walSize int64
|
||||||
|
if h.wal != nil {
|
||||||
|
walSize, _ = h.wal.Size()
|
||||||
|
}
|
||||||
|
return walSize + h.chunkDiskMapper.Size()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *RangeHead) Size() int64 {
|
||||||
|
return h.head.Size()
|
||||||
|
}
|
||||||
|
|
|
@ -65,3 +65,4 @@ func (r *mockBReader) Tombstones() (tombstones.Reader, error) {
|
||||||
return tombstones.NewMemTombstones(), nil
|
return tombstones.NewMemTombstones(), nil
|
||||||
}
|
}
|
||||||
func (r *mockBReader) Meta() BlockMeta { return BlockMeta{MinTime: r.mint, MaxTime: r.maxt} }
|
func (r *mockBReader) Meta() BlockMeta { return BlockMeta{MinTime: r.mint, MaxTime: r.maxt} }
|
||||||
|
func (r *mockBReader) Size() int64 { return 0 }
|
||||||
|
|
Loading…
Reference in a new issue