diff --git a/go.mod b/go.mod index 6019992649b20..4b3f8a763d247 100644 --- a/go.mod +++ b/go.mod @@ -128,6 +128,7 @@ require ( github.com/lxc/lxd v0.0.0-20220920163450-e9b4b514106a github.com/matttproud/golang_protobuf_extensions v1.0.4 github.com/mdlayher/apcupsd v0.0.0-20220319200143-473c7b5f3c6a + github.com/mdlayher/vsock v1.2.1 github.com/microsoft/ApplicationInsights-Go v0.4.4 github.com/microsoft/go-mssqldb v1.5.0 github.com/miekg/dns v1.1.56 @@ -356,7 +357,7 @@ require ( github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect github.com/jcmturner/rpc/v2 v2.0.3 // indirect github.com/josharian/intern v1.0.0 // indirect - github.com/josharian/native v1.0.0 // indirect + github.com/josharian/native v1.1.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/juju/webbrowser v1.0.0 // indirect @@ -373,8 +374,8 @@ require ( github.com/mattn/go-ieproxy v0.0.1 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mdlayher/genetlink v1.2.0 // indirect - github.com/mdlayher/netlink v1.6.0 // indirect - github.com/mdlayher/socket v0.2.3 // indirect + github.com/mdlayher/netlink v1.7.2 // indirect + github.com/mdlayher/socket v0.4.1 // indirect github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect github.com/minio/highwayhash v1.0.2 // indirect diff --git a/go.sum b/go.sum index 18ef66a79fd3e..c1cd93b98cb77 100644 --- a/go.sum +++ b/go.sum @@ -923,8 +923,9 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/josharian/native v0.0.0-20200817173448-b6b71def0850/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= -github.com/josharian/native v1.0.0 h1:Ts/E8zCSEsG17dUqv7joXJFybuMLjQfWE04tsBODTxk= github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= +github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -1078,14 +1079,17 @@ github.com/mdlayher/netlink v1.3.0/go.mod h1:xK/BssKuwcRXHrtN04UBkwQ6dY9VviGGuri github.com/mdlayher/netlink v1.4.0/go.mod h1:dRJi5IABcZpBD2A3D0Mv/AiX8I9uDEu5oGkAVrekmf8= github.com/mdlayher/netlink v1.4.1/go.mod h1:e4/KuJ+s8UhfUpO9z00/fDZZmhSrs+oxyqAS9cNgn6Q= github.com/mdlayher/netlink v1.4.2/go.mod h1:13VaingaArGUTUxFLf/iEovKxXji32JAtF858jZYEug= -github.com/mdlayher/netlink v1.6.0 h1:rOHX5yl7qnlpiVkFWoqccueppMtXzeziFjWAjLg6sz0= github.com/mdlayher/netlink v1.6.0/go.mod h1:0o3PlBmGst1xve7wQ7j/hwpNaFaH4qCRyWCdcZk8/vA= +github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= +github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= github.com/mdlayher/socket v0.0.0-20210307095302-262dc9984e00/go.mod h1:GAFlyu4/XV68LkQKYzKhIo/WW7j3Zi0YRAz/BOoanUc= github.com/mdlayher/socket v0.0.0-20211007213009-516dcbdf0267/go.mod h1:nFZ1EtZYK8Gi/k6QNu7z7CgO20i/4ExeQswwWuPmG/g= github.com/mdlayher/socket v0.0.0-20211102153432-57e3fa563ecb/go.mod h1:nFZ1EtZYK8Gi/k6QNu7z7CgO20i/4ExeQswwWuPmG/g= github.com/mdlayher/socket v0.1.1/go.mod h1:mYV5YIZAfHh4dzDVzI8x8tWLWCliuX8Mon5Awbj+qDs= -github.com/mdlayher/socket v0.2.3 h1:XZA2X2TjdOwNoNPVPclRCURoX/hokBY8nkTmRZFEheM= -github.com/mdlayher/socket v0.2.3/go.mod h1:bz12/FozYNH/VbvC3q7TRIK/Y6dH1kCKsXaUeXi/FmY= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ= +github.com/mdlayher/vsock v1.2.1/go.mod h1:NRfCibel++DgeMD8z/hP+PPTjlNJsdPOmxcnENvE+SE= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mholt/archiver/v3 v3.5.0/go.mod h1:qqTTPUK/HZPFgFQ/TJ3BzvTpF/dPtFVJXdQbCmeMxwc= github.com/microsoft/ApplicationInsights-Go v0.4.4 h1:G4+H9WNs6ygSCe6sUyxRc2U81TI5Es90b2t/MwX5KqY= diff --git a/plugins/outputs/prometheus_client/README.md b/plugins/outputs/prometheus_client/README.md index 74a72a020ce09..27380f82d93d5 100644 --- a/plugins/outputs/prometheus_client/README.md +++ b/plugins/outputs/prometheus_client/README.md @@ -26,6 +26,9 @@ to use them. # Configuration for the Prometheus client to spawn [[outputs.prometheus_client]] ## Address to listen on. + ## ex: + ## listen = ":9273" + ## listen = "vsock://:9273" listen = ":9273" ## Maximum duration before timing out read of the request diff --git a/plugins/outputs/prometheus_client/prometheus_client.go b/plugins/outputs/prometheus_client/prometheus_client.go index 74f088514ab3d..e90a201d433ea 100644 --- a/plugins/outputs/prometheus_client/prometheus_client.go +++ b/plugins/outputs/prometheus_client/prometheus_client.go @@ -5,13 +5,17 @@ import ( "context" "crypto/tls" _ "embed" + "errors" "fmt" "net" "net/http" "net/url" + "strconv" + "strings" "sync" "time" + "github.com/mdlayher/vsock" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -187,11 +191,40 @@ func (p *PrometheusClient) Init() error { return nil } -func (p *PrometheusClient) listen() (net.Listener, error) { +func (p *PrometheusClient) listenTCP(host string) (net.Listener, error) { if p.server.TLSConfig != nil { - return tls.Listen("tcp", p.Listen, p.server.TLSConfig) + return tls.Listen("tcp",host, p.server.TLSConfig) + } + return net.Listen("tcp", host) +} + +func (p *PrometheusClient) listeVsock(host string)(net.Listener, error) { + _, portStr, err := net.SplitHostPort(host) + if err != nil { + return nil, err + } + port, err := strconv.ParseUint(portStr, 10, 32) + if err != nil { + return nil, err + } + return vsock.Listen(uint32(port), nil) +} + +func (p *PrometheusClient) listen() (net.Listener, error) { + u, err := url.ParseRequestURI(p.Listen) + if err != nil { + if strings.Contains(err.Error(), "missing protocol scheme") { + return p.listenTCP(p.Listen) + } + return nil, err + } + switch u.Scheme { + case "tcp", "http": + return p.listenTCP(u.Host) + case "vsock": + return p.listeVsock(u.Host) } - return net.Listen("tcp", p.Listen) + return nil, errors.New("Unknow scheme") } func (p *PrometheusClient) Connect() error { diff --git a/plugins/outputs/prometheus_client/sample.conf b/plugins/outputs/prometheus_client/sample.conf index 2e23d60caa20e..7055f1bacfc78 100644 --- a/plugins/outputs/prometheus_client/sample.conf +++ b/plugins/outputs/prometheus_client/sample.conf @@ -1,6 +1,9 @@ # Configuration for the Prometheus client to spawn [[outputs.prometheus_client]] ## Address to listen on. + ## ex: + ## listen = ":9273" + ## listen = "vsock://:9273" listen = ":9273" ## Maximum duration before timing out read of the request