From 6d1a4ddb24c156d3337b4f7e995eace0aa1bee32 Mon Sep 17 00:00:00 2001 From: binjip978 Date: Tue, 16 Jun 2020 07:35:51 +0300 Subject: [PATCH 1/2] add pool size to entropy collector Signed-off-by: binjip978 --- collector/entropy_linux.go | 34 ++++++++++++++++--- collector/fixtures/e2e-output.txt | 3 ++ .../fixtures/proc/sys/kernel/random/poolsize | 1 + 3 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 collector/fixtures/proc/sys/kernel/random/poolsize diff --git a/collector/entropy_linux.go b/collector/entropy_linux.go index e68eb958..848e54e7 100644 --- a/collector/entropy_linux.go +++ b/collector/entropy_linux.go @@ -20,11 +20,14 @@ import ( "github.com/go-kit/kit/log" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/procfs" ) type entropyCollector struct { - entropyAvail *prometheus.Desc - logger log.Logger + fs procfs.FS + entropyAvail *prometheus.Desc + entropyPoolSize *prometheus.Desc + logger log.Logger } func init() { @@ -33,23 +36,44 @@ func init() { // NewEntropyCollector returns a new Collector exposing entropy stats. 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{ + fs: fs, entropyAvail: prometheus.NewDesc( prometheus.BuildFQName(namespace, "", "entropy_available_bits"), "Bits of available entropy.", nil, nil, ), + entropyPoolSize: prometheus.NewDesc( + prometheus.BuildFQName(namespace, "", "entropy_pool_size_bytes"), + "Bytes of entropy pool.", + nil, nil, + ), logger: logger, }, nil } 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 { - 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( - 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 } diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt index df04679d..64f74a08 100644 --- a/collector/fixtures/e2e-output.txt +++ b/collector/fixtures/e2e-output.txt @@ -627,6 +627,9 @@ node_edac_uncorrectable_errors_total{controller="0"} 5 # HELP node_entropy_available_bits Bits of available entropy. # TYPE node_entropy_available_bits gauge 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. # TYPE node_exporter_build_info gauge # HELP node_filefd_allocated File descriptor statistics: allocated. diff --git a/collector/fixtures/proc/sys/kernel/random/poolsize b/collector/fixtures/proc/sys/kernel/random/poolsize new file mode 100644 index 00000000..801c306e --- /dev/null +++ b/collector/fixtures/proc/sys/kernel/random/poolsize @@ -0,0 +1 @@ +4096 From 3e1cb10f55ec649180d35be5f75d167c1d9101aa Mon Sep 17 00:00:00 2001 From: binjip978 Date: Tue, 16 Jun 2020 18:29:22 +0300 Subject: [PATCH 2/2] change metric description to correct units Signed-off-by: binjip978 --- collector/entropy_linux.go | 4 ++-- collector/fixtures/e2e-output.txt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/collector/entropy_linux.go b/collector/entropy_linux.go index 848e54e7..ce55e269 100644 --- a/collector/entropy_linux.go +++ b/collector/entropy_linux.go @@ -49,8 +49,8 @@ func NewEntropyCollector(logger log.Logger) (Collector, error) { nil, nil, ), entropyPoolSize: prometheus.NewDesc( - prometheus.BuildFQName(namespace, "", "entropy_pool_size_bytes"), - "Bytes of entropy pool.", + prometheus.BuildFQName(namespace, "", "entropy_pool_size_bits"), + "Bits of entropy pool.", nil, nil, ), logger: logger, diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt index 64f74a08..c189f58c 100644 --- a/collector/fixtures/e2e-output.txt +++ b/collector/fixtures/e2e-output.txt @@ -627,9 +627,9 @@ node_edac_uncorrectable_errors_total{controller="0"} 5 # HELP node_entropy_available_bits Bits of available entropy. # TYPE node_entropy_available_bits gauge 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_entropy_pool_size_bits Bits of entropy pool. +# TYPE node_entropy_pool_size_bits gauge +node_entropy_pool_size_bits 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. # TYPE node_exporter_build_info gauge # HELP node_filefd_allocated File descriptor statistics: allocated.