add pool size to entropy collector

Signed-off-by: binjip978 <binjip978@gmail.com>
This commit is contained in:
binjip978 2020-06-16 07:35:51 +03:00
parent 3799895d41
commit 6d1a4ddb24
3 changed files with 33 additions and 5 deletions

View file

@ -20,10 +20,13 @@ import (
"github.com/go-kit/kit/log" "github.com/go-kit/kit/log"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/procfs"
) )
type entropyCollector struct { type entropyCollector struct {
fs procfs.FS
entropyAvail *prometheus.Desc entropyAvail *prometheus.Desc
entropyPoolSize *prometheus.Desc
logger log.Logger logger log.Logger
} }
@ -33,23 +36,44 @@ func init() {
// NewEntropyCollector returns a new Collector exposing entropy stats. // NewEntropyCollector returns a new Collector exposing entropy stats.
func NewEntropyCollector(logger log.Logger) (Collector, error) { func NewEntropyCollector(logger log.Logger) (Collector, error) {
fs, err := procfs.NewFS(*procPath)
if err != nil {
return nil, fmt.Errorf("failed to open procfs: %w", err)
}
return &entropyCollector{ return &entropyCollector{
fs: fs,
entropyAvail: prometheus.NewDesc( entropyAvail: prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "entropy_available_bits"), prometheus.BuildFQName(namespace, "", "entropy_available_bits"),
"Bits of available entropy.", "Bits of available entropy.",
nil, nil, nil, nil,
), ),
entropyPoolSize: prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "entropy_pool_size_bytes"),
"Bytes of entropy pool.",
nil, nil,
),
logger: logger, logger: logger,
}, nil }, nil
} }
func (c *entropyCollector) Update(ch chan<- prometheus.Metric) error { func (c *entropyCollector) Update(ch chan<- prometheus.Metric) error {
value, err := readUintFromFile(procFilePath("sys/kernel/random/entropy_avail")) stats, err := c.fs.KernelRandom()
if err != nil { if err != nil {
return fmt.Errorf("couldn't get entropy_avail: %s", err) return fmt.Errorf("failed to get kernel random stats: %w", err)
}
if stats.EntropyAvaliable == nil {
return fmt.Errorf("couldn't get entropy_avail")
} }
ch <- prometheus.MustNewConstMetric( ch <- prometheus.MustNewConstMetric(
c.entropyAvail, prometheus.GaugeValue, float64(value)) c.entropyAvail, prometheus.GaugeValue, float64(*stats.EntropyAvaliable))
if stats.PoolSize == nil {
return fmt.Errorf("couldn't get entropy pool size")
}
ch <- prometheus.MustNewConstMetric(
c.entropyPoolSize, prometheus.GaugeValue, float64(*stats.PoolSize))
return nil return nil
} }

View file

@ -627,6 +627,9 @@ node_edac_uncorrectable_errors_total{controller="0"} 5
# HELP node_entropy_available_bits Bits of available entropy. # HELP node_entropy_available_bits Bits of available entropy.
# TYPE node_entropy_available_bits gauge # TYPE node_entropy_available_bits gauge
node_entropy_available_bits 1337 node_entropy_available_bits 1337
# HELP node_entropy_pool_size_bytes Bytes of entropy pool.
# TYPE node_entropy_pool_size_bytes gauge
node_entropy_pool_size_bytes 4096
# HELP node_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which node_exporter was built. # HELP node_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which node_exporter was built.
# TYPE node_exporter_build_info gauge # TYPE node_exporter_build_info gauge
# HELP node_filefd_allocated File descriptor statistics: allocated. # HELP node_filefd_allocated File descriptor statistics: allocated.

View file

@ -0,0 +1 @@
4096