aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Cameron <cameronpm@gmail.com>2020-01-28 18:50:23 +1100
committerBen Kochie <superq@gmail.com>2020-01-28 08:50:23 +0100
commit9bb37873a8757508853b14e6048a9c3418f3d667 (patch)
treee1ee2e3b0bee954287f13f9c38ca6a00c920814a
parent04ad4b351058bc89e83702d149f2961efa989bf4 (diff)
downloadprometheus_node_collector-9bb37873a8757508853b14e6048a9c3418f3d667.tar.bz2
prometheus_node_collector-9bb37873a8757508853b14e6048a9c3418f3d667.tar.xz
prometheus_node_collector-9bb37873a8757508853b14e6048a9c3418f3d667.zip
Add unix socket support for supervisord collector (#1592)
* Add unix socket support for supervisord collector For example: --collector.supervisord.url=unix:///var/run/supervisor.sock Fixes prometheus/node_exporter#262 Signed-off-by: Paul Cameron <cameronpm@gmail.com>
-rw-r--r--CHANGELOG.md1
-rw-r--r--collector/supervisord.go23
2 files changed, 23 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2f85f51..a640db2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -29,6 +29,7 @@
29* [ENHANCEMENT] Add check for systemd version before attempting to query certain metrics. #1413 29* [ENHANCEMENT] Add check for systemd version before attempting to query certain metrics. #1413
30* [ENHANCEMENT] Add new counters for flush requests in Linux 5.5 #1548 30* [ENHANCEMENT] Add new counters for flush requests in Linux 5.5 #1548
31* [ENHANCEMENT] The sockstat collector now exposes IPv6 statistics in addition to the existing IPv4 support. #1552 31* [ENHANCEMENT] The sockstat collector now exposes IPv6 statistics in addition to the existing IPv4 support. #1552
32* [ENHANCEMENT] Add unix socket support for supervisord collector #262
32* [BUGFIX] Renamed label `state` to `name` on `node_systemd_service_restart_total`. #1393 33* [BUGFIX] Renamed label `state` to `name` on `node_systemd_service_restart_total`. #1393
33* [BUGFIX] Fix netdev nil reference on Darwin #1414 34* [BUGFIX] Fix netdev nil reference on Darwin #1414
34* [BUGFIX] Strip path.rootfs from mountpoint labels #1421 35* [BUGFIX] Strip path.rootfs from mountpoint labels #1421
diff --git a/collector/supervisord.go b/collector/supervisord.go
index a182062..33f3b8a 100644
--- a/collector/supervisord.go
+++ b/collector/supervisord.go
@@ -16,7 +16,12 @@
16package collector 16package collector
17 17
18import ( 18import (
19 "context"
19 "fmt" 20 "fmt"
21 "net"
22 "net/http"
23 "net/url"
24 "time"
20 25
21 "github.com/go-kit/kit/log" 26 "github.com/go-kit/kit/log"
22 "github.com/go-kit/kit/log/level" 27 "github.com/go-kit/kit/log/level"
@@ -27,6 +32,7 @@ import (
27 32
28var ( 33var (
29 supervisordURL = kingpin.Flag("collector.supervisord.url", "XML RPC endpoint.").Default("http://localhost:9001/RPC2").String() 34 supervisordURL = kingpin.Flag("collector.supervisord.url", "XML RPC endpoint.").Default("http://localhost:9001/RPC2").String()
35 xrpc *xmlrpc.Client
30) 36)
31 37
32type supervisordCollector struct { 38type supervisordCollector struct {
@@ -47,6 +53,21 @@ func NewSupervisordCollector(logger log.Logger) (Collector, error) {
47 subsystem = "supervisord" 53 subsystem = "supervisord"
48 labelNames = []string{"name", "group"} 54 labelNames = []string{"name", "group"}
49 ) 55 )
56
57 if u, err := url.Parse(*supervisordURL); err == nil && u.Scheme == "unix" {
58 // Fake the URI scheme as http, since net/http.*Transport.roundTrip will complain
59 // about a non-http(s) transport.
60 xrpc = xmlrpc.NewClient("http://unix/RPC2")
61 xrpc.HttpClient.Transport = &http.Transport{
62 DialContext: func(ctx context.Context, _, _ string) (net.Conn, error) {
63 d := net.Dialer{Timeout: 10 * time.Second}
64 return d.DialContext(ctx, "unix", u.Path)
65 },
66 }
67 } else {
68 xrpc = xmlrpc.NewClient(*supervisordURL)
69 }
70
50 return &supervisordCollector{ 71 return &supervisordCollector{
51 upDesc: prometheus.NewDesc( 72 upDesc: prometheus.NewDesc(
52 prometheus.BuildFQName(namespace, subsystem, "up"), 73 prometheus.BuildFQName(namespace, subsystem, "up"),
@@ -111,7 +132,7 @@ func (c *supervisordCollector) Update(ch chan<- prometheus.Metric) error {
111 PID int `xmlrpc:"pid"` 132 PID int `xmlrpc:"pid"`
112 } 133 }
113 134
114 res, err := xmlrpc.Call(*supervisordURL, "supervisor.getAllProcessInfo") 135 res, err := xrpc.Call("supervisor.getAllProcessInfo")
115 if err != nil { 136 if err != nil {
116 return fmt.Errorf("unable to call supervisord: %s", err) 137 return fmt.Errorf("unable to call supervisord: %s", err)
117 } 138 }