diff options
-rw-r--r-- | collector/fixtures/e2e-output.txt | 31 | ||||
-rwxr-xr-x | end-to-end-test.sh | 2 | ||||
-rw-r--r-- | node_exporter.go | 32 |
3 files changed, 48 insertions, 17 deletions
diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt index 03cb207..feac6c7 100644 --- a/collector/fixtures/e2e-output.txt +++ b/collector/fixtures/e2e-output.txt | |||
@@ -457,8 +457,6 @@ node_edac_uncorrectable_errors_total{controller="0"} 5 | |||
457 | node_entropy_available_bits 1337 | 457 | node_entropy_available_bits 1337 |
458 | # 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. | 458 | # 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. |
459 | # TYPE node_exporter_build_info gauge | 459 | # TYPE node_exporter_build_info gauge |
460 | # HELP node_exporter_scrape_duration_seconds node_exporter: Duration of a scrape job. | ||
461 | # TYPE node_exporter_scrape_duration_seconds summary | ||
462 | # HELP node_filefd_allocated File descriptor statistics: allocated. | 460 | # HELP node_filefd_allocated File descriptor statistics: allocated. |
463 | # TYPE node_filefd_allocated gauge | 461 | # TYPE node_filefd_allocated gauge |
464 | node_filefd_allocated 1024 | 462 | node_filefd_allocated 1024 |
@@ -2072,6 +2070,35 @@ node_procs_blocked 0 | |||
2072 | # HELP node_procs_running Number of processes in runnable state. | 2070 | # HELP node_procs_running Number of processes in runnable state. |
2073 | # TYPE node_procs_running gauge | 2071 | # TYPE node_procs_running gauge |
2074 | node_procs_running 2 | 2072 | node_procs_running 2 |
2073 | # HELP node_scrape_collector_duration_seconds node_exporter: Duration of a collector scrape. | ||
2074 | # TYPE node_scrape_collector_duration_seconds gauge | ||
2075 | # HELP node_scrape_collector_success node_exporter: Whether a collector succeeded. | ||
2076 | # TYPE node_scrape_collector_success gauge | ||
2077 | node_scrape_collector_success{collector="bonding"} 1 | ||
2078 | node_scrape_collector_success{collector="buddyinfo"} 1 | ||
2079 | node_scrape_collector_success{collector="conntrack"} 1 | ||
2080 | node_scrape_collector_success{collector="diskstats"} 1 | ||
2081 | node_scrape_collector_success{collector="drbd"} 1 | ||
2082 | node_scrape_collector_success{collector="edac"} 1 | ||
2083 | node_scrape_collector_success{collector="entropy"} 1 | ||
2084 | node_scrape_collector_success{collector="filefd"} 1 | ||
2085 | node_scrape_collector_success{collector="hwmon"} 1 | ||
2086 | node_scrape_collector_success{collector="infiniband"} 1 | ||
2087 | node_scrape_collector_success{collector="ksmd"} 1 | ||
2088 | node_scrape_collector_success{collector="loadavg"} 1 | ||
2089 | node_scrape_collector_success{collector="mdadm"} 1 | ||
2090 | node_scrape_collector_success{collector="megacli"} 1 | ||
2091 | node_scrape_collector_success{collector="meminfo"} 1 | ||
2092 | node_scrape_collector_success{collector="meminfo_numa"} 1 | ||
2093 | node_scrape_collector_success{collector="mountstats"} 1 | ||
2094 | node_scrape_collector_success{collector="netdev"} 1 | ||
2095 | node_scrape_collector_success{collector="netstat"} 1 | ||
2096 | node_scrape_collector_success{collector="nfs"} 1 | ||
2097 | node_scrape_collector_success{collector="sockstat"} 1 | ||
2098 | node_scrape_collector_success{collector="stat"} 1 | ||
2099 | node_scrape_collector_success{collector="textfile"} 1 | ||
2100 | node_scrape_collector_success{collector="wifi"} 1 | ||
2101 | node_scrape_collector_success{collector="zfs"} 1 | ||
2075 | # HELP node_sockstat_FRAG_inuse Number of FRAG sockets in state inuse. | 2102 | # HELP node_sockstat_FRAG_inuse Number of FRAG sockets in state inuse. |
2076 | # TYPE node_sockstat_FRAG_inuse gauge | 2103 | # TYPE node_sockstat_FRAG_inuse gauge |
2077 | node_sockstat_FRAG_inuse 0 | 2104 | node_sockstat_FRAG_inuse 0 |
diff --git a/end-to-end-test.sh b/end-to-end-test.sh index 26a191b..e074556 100755 --- a/end-to-end-test.sh +++ b/end-to-end-test.sh | |||
@@ -35,7 +35,7 @@ cd "$(dirname $0)" | |||
35 | port="$((10000 + (RANDOM % 10000)))" | 35 | port="$((10000 + (RANDOM % 10000)))" |
36 | tmpdir=$(mktemp -d /tmp/node_exporter_e2e_test.XXXXXX) | 36 | tmpdir=$(mktemp -d /tmp/node_exporter_e2e_test.XXXXXX) |
37 | 37 | ||
38 | skip_re="^(go_|node_exporter_|process_|node_textfile_mtime)" | 38 | skip_re="^(go_|node_exporter_build_info|node_scrape_collector_duration_seconds|process_|node_textfile_mtime)" |
39 | 39 | ||
40 | keep=0; update=0; verbose=0 | 40 | keep=0; update=0; verbose=0 |
41 | while getopts 'hkuv' opt | 41 | while getopts 'hkuv' opt |
diff --git a/node_exporter.go b/node_exporter.go index 1028ed8..4a7f88a 100644 --- a/node_exporter.go +++ b/node_exporter.go | |||
@@ -36,14 +36,17 @@ const ( | |||
36 | ) | 36 | ) |
37 | 37 | ||
38 | var ( | 38 | var ( |
39 | scrapeDurations = prometheus.NewSummaryVec( | 39 | scrapeDurationDesc = prometheus.NewDesc( |
40 | prometheus.SummaryOpts{ | 40 | prometheus.BuildFQName(collector.Namespace, "scrape", "collector_duration_seconds"), |
41 | Namespace: collector.Namespace, | 41 | "node_exporter: Duration of a collector scrape.", |
42 | Subsystem: "exporter", | 42 | []string{"collector"}, |
43 | Name: "scrape_duration_seconds", | 43 | nil, |
44 | Help: "node_exporter: Duration of a scrape job.", | 44 | ) |
45 | }, | 45 | scrapeSuccessDesc = prometheus.NewDesc( |
46 | []string{"collector", "result"}, | 46 | prometheus.BuildFQName(collector.Namespace, "scrape", "collector_success"), |
47 | "node_exporter: Whether a collector succeeded.", | ||
48 | []string{"collector"}, | ||
49 | nil, | ||
47 | ) | 50 | ) |
48 | ) | 51 | ) |
49 | 52 | ||
@@ -54,7 +57,8 @@ type NodeCollector struct { | |||
54 | 57 | ||
55 | // Describe implements the prometheus.Collector interface. | 58 | // Describe implements the prometheus.Collector interface. |
56 | func (n NodeCollector) Describe(ch chan<- *prometheus.Desc) { | 59 | func (n NodeCollector) Describe(ch chan<- *prometheus.Desc) { |
57 | scrapeDurations.Describe(ch) | 60 | ch <- scrapeDurationDesc |
61 | ch <- scrapeSuccessDesc | ||
58 | } | 62 | } |
59 | 63 | ||
60 | // Collect implements the prometheus.Collector interface. | 64 | // Collect implements the prometheus.Collector interface. |
@@ -68,7 +72,6 @@ func (n NodeCollector) Collect(ch chan<- prometheus.Metric) { | |||
68 | }(name, c) | 72 | }(name, c) |
69 | } | 73 | } |
70 | wg.Wait() | 74 | wg.Wait() |
71 | scrapeDurations.Collect(ch) | ||
72 | } | 75 | } |
73 | 76 | ||
74 | func filterAvailableCollectors(collectors string) string { | 77 | func filterAvailableCollectors(collectors string) string { |
@@ -86,16 +89,17 @@ func execute(name string, c collector.Collector, ch chan<- prometheus.Metric) { | |||
86 | begin := time.Now() | 89 | begin := time.Now() |
87 | err := c.Update(ch) | 90 | err := c.Update(ch) |
88 | duration := time.Since(begin) | 91 | duration := time.Since(begin) |
89 | var result string | 92 | var success float64 |
90 | 93 | ||
91 | if err != nil { | 94 | if err != nil { |
92 | log.Errorf("ERROR: %s collector failed after %fs: %s", name, duration.Seconds(), err) | 95 | log.Errorf("ERROR: %s collector failed after %fs: %s", name, duration.Seconds(), err) |
93 | result = "error" | 96 | success = 0 |
94 | } else { | 97 | } else { |
95 | log.Debugf("OK: %s collector succeeded after %fs.", name, duration.Seconds()) | 98 | log.Debugf("OK: %s collector succeeded after %fs.", name, duration.Seconds()) |
96 | result = "success" | 99 | success = 1 |
97 | } | 100 | } |
98 | scrapeDurations.WithLabelValues(name, result).Observe(duration.Seconds()) | 101 | ch <- prometheus.MustNewConstMetric(scrapeDurationDesc, prometheus.GaugeValue, duration.Seconds(), name) |
102 | ch <- prometheus.MustNewConstMetric(scrapeSuccessDesc, prometheus.GaugeValue, success, name) | ||
99 | } | 103 | } |
100 | 104 | ||
101 | func loadCollectors(list string) (map[string]collector.Collector, error) { | 105 | func loadCollectors(list string) (map[string]collector.Collector, error) { |