diff options
author | Pavel Borzenkov <pavel.borzenkov@gmail.com> | 2015-11-11 16:02:41 +0300 |
---|---|---|
committer | Pavel Borzenkov <pavel.borzenkov@gmail.com> | 2016-01-21 13:43:22 +0300 |
commit | 0e78ed63a62fe17f0228c3dc39775127710edb0a (patch) | |
tree | 5ceb7a06003aec4511485d2b5645607e2212117a | |
parent | c47c01106377ba4c5e17d539ae6ed5ad1c029578 (diff) | |
download | prometheus_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.txt | 27 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/full_scans | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/merge_across_nodes | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/pages_shared | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/pages_sharing | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/pages_to_scan | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/pages_unshared | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/pages_volatile | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/run | 1 | ||||
-rw-r--r-- | collector/fixtures/sys/kernel/mm/ksm/sleep_millisecs | 1 | ||||
-rw-r--r-- | collector/ksmd_linux.go | 83 | ||||
-rwxr-xr-x | end-to-end-test.sh | 1 |
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 |
446 | node_intr 8.885917e+06 | 446 | node_intr 8.885917e+06 |
447 | # HELP node_ksmd_full_scans_total ksmd 'full_scans' file. | ||
448 | # TYPE node_ksmd_full_scans_total counter | ||
449 | node_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 | ||
452 | node_ksmd_merge_across_nodes 1 | ||
453 | # HELP node_ksmd_pages_shared ksmd 'pages_shared' file. | ||
454 | # TYPE node_ksmd_pages_shared gauge | ||
455 | node_ksmd_pages_shared 1 | ||
456 | # HELP node_ksmd_pages_sharing ksmd 'pages_sharing' file. | ||
457 | # TYPE node_ksmd_pages_sharing gauge | ||
458 | node_ksmd_pages_sharing 255 | ||
459 | # HELP node_ksmd_pages_to_scan ksmd 'pages_to_scan' file. | ||
460 | # TYPE node_ksmd_pages_to_scan gauge | ||
461 | node_ksmd_pages_to_scan 100 | ||
462 | # HELP node_ksmd_pages_unshared ksmd 'pages_unshared' file. | ||
463 | # TYPE node_ksmd_pages_unshared gauge | ||
464 | node_ksmd_pages_unshared 0 | ||
465 | # HELP node_ksmd_pages_volatile ksmd 'pages_volatile' file. | ||
466 | # TYPE node_ksmd_pages_volatile gauge | ||
467 | node_ksmd_pages_volatile 0 | ||
468 | # HELP node_ksmd_run ksmd 'run' file. | ||
469 | # TYPE node_ksmd_run gauge | ||
470 | node_ksmd_run 1 | ||
471 | # HELP node_ksmd_sleep_seconds ksmd 'sleep_millisecs' file. | ||
472 | # TYPE node_ksmd_sleep_seconds gauge | ||
473 | node_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 |
449 | node_load1 0.21 | 476 | node_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 | |||
16 | package collector | ||
17 | |||
18 | import ( | ||
19 | "fmt" | ||
20 | "path" | ||
21 | |||
22 | "github.com/prometheus/client_golang/prometheus" | ||
23 | ) | ||
24 | |||
25 | var ( | ||
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 | |||
30 | type ksmdCollector struct { | ||
31 | metricDescs map[string]*prometheus.Desc | ||
32 | } | ||
33 | |||
34 | func init() { | ||
35 | Factories["ksmd"] = NewKsmdCollector | ||
36 | } | ||
37 | |||
38 | func 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. | ||
51 | func 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. | ||
64 | func (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 |