diff options
author | Paul Cameron <cameronpm@gmail.com> | 2020-01-28 18:50:23 +1100 |
---|---|---|
committer | Ben Kochie <superq@gmail.com> | 2020-01-28 08:50:23 +0100 |
commit | 9bb37873a8757508853b14e6048a9c3418f3d667 (patch) | |
tree | e1ee2e3b0bee954287f13f9c38ca6a00c920814a | |
parent | 04ad4b351058bc89e83702d149f2961efa989bf4 (diff) | |
download | prometheus_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.md | 1 | ||||
-rw-r--r-- | collector/supervisord.go | 23 |
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 @@ | |||
16 | package collector | 16 | package collector |
17 | 17 | ||
18 | import ( | 18 | import ( |
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 | ||
28 | var ( | 33 | var ( |
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 | ||
32 | type supervisordCollector struct { | 38 | type 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 | } |