|
|
|
|
@ -30,6 +30,17 @@ type diskstatsCollector struct { |
|
|
|
|
rbytes typedDesc |
|
|
|
|
wbytes typedDesc |
|
|
|
|
time typedDesc |
|
|
|
|
bsize typedDesc |
|
|
|
|
qdepth typedDesc |
|
|
|
|
|
|
|
|
|
rblks typedDesc |
|
|
|
|
wblks typedDesc |
|
|
|
|
|
|
|
|
|
rserv typedDesc |
|
|
|
|
wserv typedDesc |
|
|
|
|
|
|
|
|
|
xfers typedDesc |
|
|
|
|
xrate typedDesc |
|
|
|
|
|
|
|
|
|
deviceFilter deviceFilter |
|
|
|
|
logger *slog.Logger |
|
|
|
|
@ -57,6 +68,70 @@ func NewDiskstatsCollector(logger *slog.Logger) (Collector, error) { |
|
|
|
|
wbytes: typedDesc{writtenBytesDesc, prometheus.CounterValue}, |
|
|
|
|
time: typedDesc{ioTimeSecondsDesc, prometheus.CounterValue}, |
|
|
|
|
|
|
|
|
|
bsize: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "block_size_bytes"), |
|
|
|
|
"Size of the block device in bytes.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.GaugeValue, |
|
|
|
|
}, |
|
|
|
|
qdepth: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "queue_depth"), |
|
|
|
|
"Number of requests in the queue.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.GaugeValue, |
|
|
|
|
}, |
|
|
|
|
rblks: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "read_blocks_total"), |
|
|
|
|
"The total number of read blocks.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.CounterValue, |
|
|
|
|
}, |
|
|
|
|
wblks: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "written_blocks_total"), |
|
|
|
|
"The total number of written blocks.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.CounterValue, |
|
|
|
|
}, |
|
|
|
|
rserv: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "read_time_seconds_total"), |
|
|
|
|
"The total time spent servicing read requests.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.CounterValue, |
|
|
|
|
}, |
|
|
|
|
wserv: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "write_time_seconds_total"), |
|
|
|
|
"The total time spent servicing write requests.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.CounterValue, |
|
|
|
|
}, |
|
|
|
|
xfers: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "transfers_total"), |
|
|
|
|
"The total number of transfers to/from disk.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.CounterValue, |
|
|
|
|
}, |
|
|
|
|
xrate: typedDesc{ |
|
|
|
|
prometheus.NewDesc( |
|
|
|
|
prometheus.BuildFQName(namespace, diskSubsystem, "transfers_to_disk_total"), |
|
|
|
|
"The total number of transfers from disk.", |
|
|
|
|
diskLabelNames, nil, |
|
|
|
|
), |
|
|
|
|
prometheus.CounterValue, |
|
|
|
|
}, |
|
|
|
|
deviceFilter: deviceFilter, |
|
|
|
|
logger: logger, |
|
|
|
|
|
|
|
|
|
@ -77,6 +152,15 @@ func (c *diskstatsCollector) Update(ch chan<- prometheus.Metric) error { |
|
|
|
|
ch <- c.rbytes.mustNewConstMetric(float64(stat.Rblks*512), stat.Name) |
|
|
|
|
ch <- c.wbytes.mustNewConstMetric(float64(stat.Wblks*512), stat.Name) |
|
|
|
|
ch <- c.time.mustNewConstMetric(float64(stat.Time/c.tickPerSecond), stat.Name) |
|
|
|
|
|
|
|
|
|
ch <- c.bsize.mustNewConstMetric(float64(stat.BSize), stat.Name) |
|
|
|
|
ch <- c.qdepth.mustNewConstMetric(float64(stat.QDepth), stat.Name) |
|
|
|
|
ch <- c.rblks.mustNewConstMetric(float64(stat.Rblks), stat.Name) |
|
|
|
|
ch <- c.wblks.mustNewConstMetric(float64(stat.Wblks), stat.Name) |
|
|
|
|
ch <- c.rserv.mustNewConstMetric(float64(stat.Rserv/c.tickPerSecond), stat.Name) |
|
|
|
|
ch <- c.wserv.mustNewConstMetric(float64(stat.Wserv/c.tickPerSecond), stat.Name) |
|
|
|
|
ch <- c.xfers.mustNewConstMetric(float64(stat.Xfers), stat.Name) |
|
|
|
|
ch <- c.xrate.mustNewConstMetric(float64(stat.XRate), stat.Name) |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|