proxy support for http input (#8477)
This commit is contained in:
parent
a7096c8128
commit
4090c77275
|
|
@ -0,0 +1,24 @@
|
||||||
|
package proxy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
type HTTPProxy struct {
|
||||||
|
HTTPProxyURL string `toml:"http_proxy_url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type proxyFunc func(req *http.Request) (*url.URL, error)
|
||||||
|
|
||||||
|
func (p *HTTPProxy) Proxy() (proxyFunc, error) {
|
||||||
|
if len(p.HTTPProxyURL) > 0 {
|
||||||
|
url, err := url.Parse(p.HTTPProxyURL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("error parsing proxy url %q: %w", p.HTTPProxyURL, err)
|
||||||
|
}
|
||||||
|
return http.ProxyURL(url), nil
|
||||||
|
}
|
||||||
|
return http.ProxyFromEnvironment, nil
|
||||||
|
}
|
||||||
|
|
@ -34,6 +34,9 @@ The HTTP input plugin collects metrics from one or more HTTP(S) endpoints. The
|
||||||
# username = "username"
|
# username = "username"
|
||||||
# password = "pa$$word"
|
# password = "pa$$word"
|
||||||
|
|
||||||
|
## HTTP Proxy support
|
||||||
|
# http_proxy_url = ""
|
||||||
|
|
||||||
## Optional TLS Config
|
## Optional TLS Config
|
||||||
# tls_ca = "/etc/telegraf/ca.pem"
|
# tls_ca = "/etc/telegraf/ca.pem"
|
||||||
# tls_cert = "/etc/telegraf/cert.pem"
|
# tls_cert = "/etc/telegraf/cert.pem"
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import (
|
||||||
|
|
||||||
"github.com/influxdata/telegraf"
|
"github.com/influxdata/telegraf"
|
||||||
"github.com/influxdata/telegraf/internal"
|
"github.com/influxdata/telegraf/internal"
|
||||||
|
"github.com/influxdata/telegraf/plugins/common/proxy"
|
||||||
"github.com/influxdata/telegraf/plugins/common/tls"
|
"github.com/influxdata/telegraf/plugins/common/tls"
|
||||||
"github.com/influxdata/telegraf/plugins/inputs"
|
"github.com/influxdata/telegraf/plugins/inputs"
|
||||||
"github.com/influxdata/telegraf/plugins/parsers"
|
"github.com/influxdata/telegraf/plugins/parsers"
|
||||||
|
|
@ -29,6 +30,8 @@ type HTTP struct {
|
||||||
Password string `toml:"password"`
|
Password string `toml:"password"`
|
||||||
tls.ClientConfig
|
tls.ClientConfig
|
||||||
|
|
||||||
|
proxy.HTTPProxy
|
||||||
|
|
||||||
// Absolute path to file with Bearer token
|
// Absolute path to file with Bearer token
|
||||||
BearerToken string `toml:"bearer_token"`
|
BearerToken string `toml:"bearer_token"`
|
||||||
|
|
||||||
|
|
@ -70,6 +73,9 @@ var sampleConfig = `
|
||||||
## compress body or "identity" to apply no encoding.
|
## compress body or "identity" to apply no encoding.
|
||||||
# content_encoding = "identity"
|
# content_encoding = "identity"
|
||||||
|
|
||||||
|
## HTTP Proxy support
|
||||||
|
# http_proxy_url = ""
|
||||||
|
|
||||||
## Optional TLS Config
|
## Optional TLS Config
|
||||||
# tls_ca = "/etc/telegraf/ca.pem"
|
# tls_ca = "/etc/telegraf/ca.pem"
|
||||||
# tls_cert = "/etc/telegraf/cert.pem"
|
# tls_cert = "/etc/telegraf/cert.pem"
|
||||||
|
|
@ -106,12 +112,19 @@ func (h *HTTP) Init() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proxy, err := h.HTTPProxy.Proxy()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
transport := &http.Transport{
|
||||||
|
TLSClientConfig: tlsCfg,
|
||||||
|
Proxy: proxy,
|
||||||
|
}
|
||||||
|
|
||||||
h.client = &http.Client{
|
h.client = &http.Client{
|
||||||
Transport: &http.Transport{
|
Transport: transport,
|
||||||
TLSClientConfig: tlsCfg,
|
Timeout: h.Timeout.Duration,
|
||||||
Proxy: http.ProxyFromEnvironment,
|
|
||||||
},
|
|
||||||
Timeout: h.Timeout.Duration,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set default as [200]
|
// Set default as [200]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue