aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Borzenkov <pavel.borzenkov@gmail.com>2015-11-11 16:02:41 +0300
committerPavel Borzenkov <pavel.borzenkov@gmail.com>2016-01-21 13:43:22 +0300
commit0e78ed63a62fe17f0228c3dc39775127710edb0a (patch)
tree5ceb7a06003aec4511485d2b5645607e2212117a
parentc47c01106377ba4c5e17d539ae6ed5ad1c029578 (diff)
downloadprometheus_node_collector-0e78ed63a62fe17f0228c3dc39775127710edb0a.tar.bz2
prometheus_node_collector-0e78ed63a62fe17f0228c3dc39775127710edb0a.tar.xz
prometheus_node_collector-0e78ed63a62fe17f0228c3dc39775127710edb0a.zip
Add new collector exposing 'ksmd' stats
Add new collector which exposes the content of /sys/kernel/mm/ksm directory. This directory contains control and statistics files for Kernel Samepage Merging daemon. The collector is not enabled by default. Signed-off-by: Pavel Borzenkov <pavel.borzenkov@gmail.com>
-rw-r--r--collector/fixtures/e2e-output.txt27
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/full_scans1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/merge_across_nodes1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/pages_shared1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/pages_sharing1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/pages_to_scan1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/pages_unshared1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/pages_volatile1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/run1
-rw-r--r--collector/fixtures/sys/kernel/mm/ksm/sleep_millisecs1
-rw-r--r--collector/ksmd_linux.go83
-rwxr-xr-xend-to-end-test.sh1
12 files changed, 120 insertions, 0 deletions
diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt
index 4801347..1ab0356 100644
--- a/collector/fixtures/e2e-output.txt
+++ b/collector/fixtures/e2e-output.txt
@@ -444,6 +444,33 @@ node_forks 26442
444# HELP node_intr Total number of interrupts serviced. 444# HELP node_intr Total number of interrupts serviced.
445# TYPE node_intr counter 445# TYPE node_intr counter
446node_intr 8.885917e+06 446node_intr 8.885917e+06
447# HELP node_ksmd_full_scans_total ksmd 'full_scans' file.
448# TYPE node_ksmd_full_scans_total counter
449node_ksmd_full_scans_total 323
450# HELP node_ksmd_merge_across_nodes ksmd 'merge_across_nodes' file.
451# TYPE node_ksmd_merge_across_nodes gauge
452node_ksmd_merge_across_nodes 1
453# HELP node_ksmd_pages_shared ksmd 'pages_shared' file.
454# TYPE node_ksmd_pages_shared gauge
455node_ksmd_pages_shared 1
456# HELP node_ksmd_pages_sharing ksmd 'pages_sharing' file.
457# TYPE node_ksmd_pages_sharing gauge
458node_ksmd_pages_sharing 255
459# HELP node_ksmd_pages_to_scan ksmd 'pages_to_scan' file.
460# TYPE node_ksmd_pages_to_scan gauge
461node_ksmd_pages_to_scan 100
462# HELP node_ksmd_pages_unshared ksmd 'pages_unshared' file.
463# TYPE node_ksmd_pages_unshared gauge
464node_ksmd_pages_unshared 0
465# HELP node_ksmd_pages_volatile ksmd 'pages_volatile' file.
466# TYPE node_ksmd_pages_volatile gauge
467node_ksmd_pages_volatile 0
468# HELP node_ksmd_run ksmd 'run' file.
469# TYPE node_ksmd_run gauge
470node_ksmd_run 1
471# HELP node_ksmd_sleep_seconds ksmd 'sleep_millisecs' file.
472# TYPE node_ksmd_sleep_seconds gauge
473node_ksmd_sleep_seconds 0.02
447# HELP node_load1 1m load average. 474# HELP node_load1 1m load average.
448# TYPE node_load1 gauge 475# TYPE node_load1 gauge
449node_load1 0.21 476node_load1 0.21
diff --git a/collector/fixtures/sys/kernel/mm/ksm/full_scans b/collector/fixtures/sys/kernel/mm/ksm/full_scans
new file mode 100644
index 0000000..3860ed9
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/full_scans
@@ -0,0 +1 @@
323
diff --git a/collector/fixtures/sys/kernel/mm/ksm/merge_across_nodes b/collector/fixtures/sys/kernel/mm/ksm/merge_across_nodes
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/merge_across_nodes
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/kernel/mm/ksm/pages_shared b/collector/fixtures/sys/kernel/mm/ksm/pages_shared
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/pages_shared
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/kernel/mm/ksm/pages_sharing b/collector/fixtures/sys/kernel/mm/ksm/pages_sharing
new file mode 100644
index 0000000..ace9d03
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/pages_sharing
@@ -0,0 +1 @@
255
diff --git a/collector/fixtures/sys/kernel/mm/ksm/pages_to_scan b/collector/fixtures/sys/kernel/mm/ksm/pages_to_scan
new file mode 100644
index 0000000..29d6383
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/pages_to_scan
@@ -0,0 +1 @@
100
diff --git a/collector/fixtures/sys/kernel/mm/ksm/pages_unshared b/collector/fixtures/sys/kernel/mm/ksm/pages_unshared
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/pages_unshared
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/kernel/mm/ksm/pages_volatile b/collector/fixtures/sys/kernel/mm/ksm/pages_volatile
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/pages_volatile
@@ -0,0 +1 @@
0
diff --git a/collector/fixtures/sys/kernel/mm/ksm/run b/collector/fixtures/sys/kernel/mm/ksm/run
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/run
@@ -0,0 +1 @@
1
diff --git a/collector/fixtures/sys/kernel/mm/ksm/sleep_millisecs b/collector/fixtures/sys/kernel/mm/ksm/sleep_millisecs
new file mode 100644
index 0000000..209e3ef
--- /dev/null
+++ b/collector/fixtures/sys/kernel/mm/ksm/sleep_millisecs
@@ -0,0 +1 @@
20
diff --git a/collector/ksmd_linux.go b/collector/ksmd_linux.go
new file mode 100644
index 0000000..198024e
--- /dev/null
+++ b/collector/ksmd_linux.go
@@ -0,0 +1,83 @@
1// Copyright 2015 The Prometheus Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14// +build !noksmd
15
16package collector
17
18import (
19 "fmt"
20 "path"
21
22 "github.com/prometheus/client_golang/prometheus"
23)
24
25var (
26 ksmdFiles = []string{"full_scans", "merge_across_nodes", "pages_shared", "pages_sharing",
27 "pages_to_scan", "pages_unshared", "pages_volatile", "run", "sleep_millisecs"}
28)
29
30type ksmdCollector struct {
31 metricDescs map[string]*prometheus.Desc
32}
33
34func init() {
35 Factories["ksmd"] = NewKsmdCollector
36}
37
38func getCanonicalMetricName(filename string) string {
39 switch filename {
40 case "full_scans":
41 return filename + "_total"
42 case "sleep_millisecs":
43 return "sleep_seconds"
44 default:
45 return filename
46 }
47}
48
49// Takes a prometheus registry and returns a new Collector exposing
50// kernel/system statistics.
51func NewKsmdCollector() (Collector, error) {
52 subsystem := "ksmd"
53 descs := make(map[string]*prometheus.Desc)
54
55 for _, n := range ksmdFiles {
56 descs[n] = prometheus.NewDesc(
57 prometheus.BuildFQName(Namespace, subsystem, getCanonicalMetricName(n)),
58 fmt.Sprintf("ksmd '%s' file.", n), nil, nil)
59 }
60 return &ksmdCollector{descs}, nil
61}
62
63// Expose kernel and system statistics.
64func (c *ksmdCollector) Update(ch chan<- prometheus.Metric) (err error) {
65 for _, n := range ksmdFiles {
66 val, err := readUintFromFile(sysFilePath(path.Join("kernel/mm/ksm", n)))
67 if err != nil {
68 return err
69 }
70
71 t := prometheus.GaugeValue
72 v := float64(val)
73 switch n {
74 case "full_scans":
75 t = prometheus.CounterValue
76 case "sleep_millisecs":
77 v /= 1000
78 }
79 ch <- prometheus.MustNewConstMetric(c.metricDescs[n], t, v)
80 }
81
82 return nil
83}
diff --git a/end-to-end-test.sh b/end-to-end-test.sh
index 6057946..89f799f 100755
--- a/end-to-end-test.sh
+++ b/end-to-end-test.sh
@@ -7,6 +7,7 @@ collectors=$(cat << COLLECTORS
7 diskstats 7 diskstats
8 entropy 8 entropy
9 filefd 9 filefd
10 ksmd
10 loadavg 11 loadavg
11 mdadm 12 mdadm
12 meminfo 13 meminfo