spring-boot - Spring boot千分尺datadog套接字连接错误
问题描述
我正在为我的 spring boot 2 rest api 创建一些自定义指标。我添加了所需的千分尺和数据狗依赖项。我的办公机器在代理后面工作。我通过 spring boot 插件设置了代理。
-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.ipc.http.HttpUrlConnectionSender.send 方法失败,我不知道千分尺数据狗如何获取代理详细信息。
千分尺医生说
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 还是代理有任何特定的 uri 模式?我正在使用弹簧启动 2.2.4.RELEASE
解决方案
如果您尝试连接到 Datadog 的 HTTPS URL(https://app.datadoghq.com
在您的示例中),那么您需要设置https.proxyHost
系统属性以使其生效 -http.proxyHost
适用于 HTTP URLs[1]。这些是系统范围的设置,如果 a未传递给其构造函数,则默认HttpSender
( )将使用这些设置。HttpUrlConnectionSender
Proxy
千分尺医生说
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 还是代理有任何特定的 uri 模式?
这是指您将配置为在内部网络上接收 Datadog 流量的不同类型的代理,并将其转发到网络外部的 Datadog。如果您使用的是 HTTP 代理,那么您应该使用系统属性或HttpSender
配置您的 HTTP 代理的 an(例如 anHttpUrlConnectionSender
并将 a 传递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
推荐阅读
- reactjs - React Admin:如何在返回前运行方法
表单视图 - reactjs - React-redux 空值存储为字符串
- sql - Oracle SQL IF ELSE CALCULATION GIVE ME ',',
- javascript - 添加指向基本 HTML/JavaScript 鼠标悬停/弹出窗口的链接
- python-3.x - 为什么绕过回调函数
- node.js - 来自 React-Native App 的 Nodejs 中的分页(ORM Sequelize)
- c# - 从另一个 ViewModel 访问 ViewModel 中的方法
- php - 在商店页面中添加到购物车旁边显示数量按钮
- r - 删除列表中每个变量开头的空格
- uwp - 如何从 Cortana 动态清除自定义 VCD 命令?