apache / apache/hertzbeat

[BUG] <When using VictoriaMetrics time series library, springboot2 monitoring does not display the key correctly when displaying multi-record charts>

Open
#1,524 2 comments 1 reaction 0 assignees View on GitHub
bug good first issue
Dominant language
Java
Stars
7.4k
Forks
1.3k
Avg merge
1d 20h
Merged PRs (30d)
32

Description

### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

![ec6b449dad4198abf006d9b23bcf36e](https://github.com/dromara/hertzbeat/assets/8541447/f2311e52-7ca2-4047-84f0-55744a385b3a)
查看内存使用图表时,其key为空
---
hzb error日志有错误(不确定是否有关联性)

### Expected Behavior

![image](https://github.com/dromara/hertzbeat/assets/8541447/3e144a41-cd1c-48b0-bead-9293fca90580)
应根据内存监控中space列来显示图表

### Steps To Reproduce

1. 使用VictoriaMetrics
2. 运行hzb
3. 添加springboot2监控
4. 等待数据
5. 查看历史图表

### Environment

```markdown
HertzBeat version(s): v1.4.4
---
系统信息:
版本 Windows Server 2022 Datacenter
版本号 21H2
操作系统内部版本 20348.2159
---
VictoriaMetrics: victoria-metrics-windows-amd64-v1.97.0
```

### Debug logs

2024-02-01 11:08:37.591 [warehouse-persistent-data-storage] ERROR org.dromara.hertzbeat.warehouse.store.HistoryVictoriaMetricsDataStorage Line:189 - flush metrics data to victoria-metrics error: I/O error on POST request for "http://localhost:8428/api/v1/import": Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect.
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8428/api/v1/import": Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:785)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:468)
at org.dromara.hertzbeat.warehouse.store.HistoryVictoriaMetricsDataStorage.saveData(HistoryVictoriaMetricsDataStorage.java:181)
at org.dromara.hertzbeat.warehouse.store.DataStorageDispatch.lambda$startStoragePersistentData$3(DataStorageDispatch.java:88)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.BindException: Address already in use: connect
at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:509)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:604)
at java.base/sun.net.www.http.HttpClient.(HttpClient.java:277)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:376)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:397)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:109)
at org.dromara.hertzbeat.manager.config.HeaderRequestInterceptor.intercept(HeaderRequestInterceptor.java:47)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
... 7 common frames omitted
2024-02-01 11:08:37.607 [warehouse-persistent-data-storage] ERROR org.dromara.hertzbeat.warehouse.store.HistoryVictoriaMetricsDataStorage Line:189 - flush metrics data to victoria-metrics error: I/O error on POST request for "http://localhost:8428/api/v1/import": Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect.
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8428/api/v1/import": Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:785)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:468)
at org.dromara.hertzbeat.warehouse.store.HistoryVictoriaMetricsDataStorage.saveData(HistoryVictoriaMetricsDataStorage.java:181)
at org.dromara.hertzbeat.warehouse.store.DataStorageDispatch.lambda$startStoragePersistentData$3(DataStorageDispatch.java:88)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.BindException: Address already in use: connect
at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:509)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:604)
at java.base/sun.net.www.http.HttpClient.(HttpClient.java:277)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:376)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:397)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:109)
at org.dromara.hertzbeat.manager.config.HeaderRequestInterceptor.intercept(HeaderRequestInterceptor.java:47)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
... 7 common frames omitted
2024-02-01 11:08:37.607 [warehouse-persistent-data-storage] ERROR org.dromara.hertzbeat.warehouse.store.HistoryVictoriaMetricsDataStorage Line:189 - flush metrics data to victoria-metrics error: I/O error on POST request for "http://localhost:8428/api/v1/import": Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect.
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://localhost:8428/api/v1/import": Address already in use: connect; nested exception is java.net.BindException: Address already in use: connect
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:785)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:468)
at org.dromara.hertzbeat.warehouse.store.HistoryVictoriaMetricsDataStorage.saveData(HistoryVictoriaMetricsDataStorage.java:181)
at org.dromara.hertzbeat.warehouse.store.DataStorageDispatch.lambda$startStoragePersistentData$3(DataStorageDispatch.java:88)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.BindException: Address already in use: connect
at java.base/java.net.PlainSocketImpl.waitForConnect(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:107)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
at java.base/java.net.Socket.connect(Socket.java:609)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:509)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:604)
at java.base/sun.net.www.http.HttpClient.(HttpClient.java:277)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:376)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:397)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1253)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1187)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1081)
at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1015)
at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:109)
at org.dromara.hertzbeat.manager.config.HeaderRequestInterceptor.intercept(HeaderRequestInterceptor.java:47)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
... 7 common frames omitted

### Anything else?

_No response_

Contributor guide

Open the contributing guide

Research direction

Start with warehouse/store/HistoryVictoriaMetricsDataStorage.java at lines 181 and 189, then inspect DataStorageDispatch and reproduce the VictoriaMetrics springboot2 monitoring workflow described in the issue. Determine why the memory chart key is empty and verify that multi-record charts display the memory monitor's space value; separate this from the reported connection error.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, spring-boot
Domain
backend, observability
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.