Ошибка подключения гнезда микросчетчика данных пружинной загрузки - PullRequest
1 голос
/ 10 апреля 2020

Я работаю над созданием некоторых пользовательских метрик для моего весеннего загрузчика 2 rest api. Я добавил необходимые микрометры и зависимости от данных. Моя офисная машина работает за прокси. Я установил прокси через плагин весенней загрузки.

-Dhttp.proxyHost=xxxx.proxy.com
-Dhttp.proxyPort=xxxx

ниже находятся в моем файле application.properties. management.metrics.export.datadog.apiKey = mykey

management.metrics.export.datadog.uri=https://app.datadoghq.com

management.metrics.export.datadog.enabled=true

management.metrics.export.datadog.step=10s

Но я получаю тайм-аут соединения с сокетом.

   [datadog-metrics-publisher] 10 Apr 2020 16:51:39,552 WARN  DatadogMeterRegistry [{}]: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:606)
    at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:666)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
    at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1162)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1056)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1340)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1315)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:264)
    at io.micrometer.core.ipc.http.HttpUrlConnectionSender.send(HttpUrlConnectionSender.java:96)
    at io.micrometer.core.ipc.http.HttpSender$Request$Builder.send(HttpSender.java:284)
    at io.micrometer.datadog.DatadogMeterRegistry.publish(DatadogMeterRegistry.java:141)
    at io.micrometer.core.instrument.push.PushMeterRegistry.publishSafely(PushMeterRegistry.java:48)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)

Насколько я отлаживал, метод io.micrometer.core.ip c .http.HttpUrlConnectionSender.send не работает, и я не понимаю, как собака данных микрометра берет данные прокси.

Микрометр c говорит

management.metrics.export.datadog.uri=https://app.datadoghq.com # URI to ship metrics to. If you need to publish metrics to an internal proxy en-route to Datadog, you can define the location of the proxy with this.

Но я не понимаю, что это значит? я должен заменить этот URL-адрес на мой URL-адрес прокси или есть какой-либо конкретный шаблон c URI с прокси? Я использую весеннюю загрузку 2.2.4. RELEASE

1 Ответ

1 голос
/ 16 апреля 2020

Если вы пытаетесь подключиться к URL-адресу HTTPS для Datadog (https://app.datadoghq.com в вашем примере), то вам нужно установить системное свойство https.proxyHost, чтобы оно действовало - http.proxyHost для URL-адресов HTTP [ 1]. Это общесистемные настройки, которые будут использоваться по умолчанию HttpSender (HttpUrlConnectionSender), если Proxy не передан его конструктору.

Микрометр do c говорит

management.metrics.export.datadog.uri=https://app.datadoghq.com # URI to ship metrics to. If you need to publish metrics to an internal proxy en-route to Datadog, you can define the location of the proxy with this.

Но я не понимаю, что это значит? я должен заменить этот URL-адрес моим прокси-адресом или есть какой-либо конкретный шаблон c uri с прокси-сервером?

Это относится к прокси-серверу другого типа, который вы настроите для получения трафика Datadog. c в вашей внутренней сети, и он перенаправит его в Datadog за пределами вашей сети. Если вы используете прокси-сервер HTTP, вам следует использовать системные свойства или HttpSender с настроенным прокси-сервером HTTP (например, HttpUrlConnectionSender и передачей Proxy его конструктору).

Вы можете настроить пользовательский HttpSender с DatadogMeterRegistry, использующим его Builder. Если вы выставите это как Bean в @Configuration классе, Spring Boot будет использовать его в автоконфигурации. Например:

@Bean
public DatadogMeterRegistry datadogMeterRegistry(DatadogConfig config, Clock clock) {
    HttpSender httpSender = new HttpUrlConnectionSender(config.connectTimeout(), config.readTimeout(), new Proxy(Proxy.Type.HTTP, new InetSocketAddress("myproxy", 8080)));
    return DatadogMeterRegistry.builder(config).clock(clock).httpClient(httpSender).build();
}

[1] https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html

...