未验证 提交 536b7d23 编写于 作者: wu-sheng's avatar wu-sheng 提交者: GitHub

Support connectTimeout and socketTimeout settings (#7214)

上级 0975809e
...@@ -61,6 +61,7 @@ Release Notes. ...@@ -61,6 +61,7 @@ Release Notes.
* Performance: enhance persistent session mechanism, about differentiating cache timeout for different dimensionality * Performance: enhance persistent session mechanism, about differentiating cache timeout for different dimensionality
metrics. The timeout of the cache for minute and hour level metrics has been prolonged to ~5 min. metrics. The timeout of the cache for minute and hour level metrics has been prolonged to ~5 min.
* Performance: Add L1 aggregation flush period, which reduce the CPU load and help young GC. * Performance: Add L1 aggregation flush period, which reduce the CPU load and help young GC.
* Support connectTimeout and socketTimeout settings for ElasticSearch6 and ElasticSearch7 storages.
#### UI #### UI
......
...@@ -81,6 +81,8 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`. **Receiver** mode ...@@ -81,6 +81,8 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`. **Receiver** mode
| - | - | nameSpace | Prefix of indexes created and used by SkyWalking. | SW_NAMESPACE | - | | - | - | nameSpace | Prefix of indexes created and used by SkyWalking. | SW_NAMESPACE | - |
| - | - | clusterNodes | ElasticSearch cluster nodes for client connection.| SW_STORAGE_ES_CLUSTER_NODES |localhost| | - | - | clusterNodes | ElasticSearch cluster nodes for client connection.| SW_STORAGE_ES_CLUSTER_NODES |localhost|
| - | - | protocol | HTTP or HTTPs. | SW_STORAGE_ES_HTTP_PROTOCOL | HTTP| | - | - | protocol | HTTP or HTTPs. | SW_STORAGE_ES_HTTP_PROTOCOL | HTTP|
| - | - | connectTimeout | Connect timeout of ElasticSearch client. Unit is ms. | SW_STORAGE_ES_CONNECT_TIMEOUT | 500|
| - | - | socketTimeout | Socket timeout of ElasticSearch client. Unit is ms. | SW_STORAGE_ES_SOCKET_TIMEOUT | 30000|
| - | - | user| User name of ElasticSearch cluster| SW_ES_USER | - | | - | - | user| User name of ElasticSearch cluster| SW_ES_USER | - |
| - | - | password | Password of ElasticSearch cluster | SW_ES_PASSWORD | - | | - | - | password | Password of ElasticSearch cluster | SW_ES_PASSWORD | - |
| - | - | trustStorePath | Trust JKS file path. Only work when user name and password opened | SW_STORAGE_ES_SSL_JKS_PATH | - | | - | - | trustStorePath | Trust JKS file path. Only work when user name and password opened | SW_STORAGE_ES_SSL_JKS_PATH | - |
...@@ -104,6 +106,8 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`. **Receiver** mode ...@@ -104,6 +106,8 @@ core|default|role|Option values, `Mixed/Receiver/Aggregator`. **Receiver** mode
| - | - | nameSpace | Prefix of indexes created and used by SkyWalking. | SW_NAMESPACE | - | | - | - | nameSpace | Prefix of indexes created and used by SkyWalking. | SW_NAMESPACE | - |
| - | - | clusterNodes | ElasticSearch cluster nodes for client connection.| SW_STORAGE_ES_CLUSTER_NODES |localhost| | - | - | clusterNodes | ElasticSearch cluster nodes for client connection.| SW_STORAGE_ES_CLUSTER_NODES |localhost|
| - | - | protocol | HTTP or HTTPs. | SW_STORAGE_ES_HTTP_PROTOCOL | HTTP| | - | - | protocol | HTTP or HTTPs. | SW_STORAGE_ES_HTTP_PROTOCOL | HTTP|
| - | - | connectTimeout | Connect timeout of ElasticSearch client. Unit is ms. | SW_STORAGE_ES_CONNECT_TIMEOUT | 500|
| - | - | socketTimeout | Socket timeout of ElasticSearch client. Unit is ms. | SW_STORAGE_ES_SOCKET_TIMEOUT | 30000|
| - | - | user| User name of ElasticSearch cluster| SW_ES_USER | - | | - | - | user| User name of ElasticSearch cluster| SW_ES_USER | - |
| - | - | password | Password of ElasticSearch cluster | SW_ES_PASSWORD | - | | - | - | password | Password of ElasticSearch cluster | SW_ES_PASSWORD | - |
| - | - | trustStorePath | Trust JKS file path. Only work when user name and password opened | SW_STORAGE_ES_SSL_JKS_PATH | - | | - | - | trustStorePath | Trust JKS file path. Only work when user name and password opened | SW_STORAGE_ES_SSL_JKS_PATH | - |
......
...@@ -120,6 +120,8 @@ storage: ...@@ -120,6 +120,8 @@ storage:
nameSpace: ${SW_NAMESPACE:""} nameSpace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:500}
socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
user: ${SW_ES_USER:""} user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""} password: ${SW_ES_PASSWORD:""}
trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""} trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
...@@ -146,6 +148,8 @@ storage: ...@@ -146,6 +148,8 @@ storage:
nameSpace: ${SW_NAMESPACE:""} nameSpace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:500}
socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""} trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""} trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index. dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
......
...@@ -119,6 +119,8 @@ public class ElasticSearchClient implements Client, HealthCheckable { ...@@ -119,6 +119,8 @@ public class ElasticSearchClient implements Client, HealthCheckable {
protected volatile RestHighLevelClient client; protected volatile RestHighLevelClient client;
protected DelegatedHealthChecker healthChecker = new DelegatedHealthChecker(); protected DelegatedHealthChecker healthChecker = new DelegatedHealthChecker();
protected final ReentrantLock connectLock = new ReentrantLock(); protected final ReentrantLock connectLock = new ReentrantLock();
private final int connectTimeout;
private final int socketTimeout;
public ElasticSearchClient(String clusterNodes, public ElasticSearchClient(String clusterNodes,
String protocol, String protocol,
...@@ -126,7 +128,9 @@ public class ElasticSearchClient implements Client, HealthCheckable { ...@@ -126,7 +128,9 @@ public class ElasticSearchClient implements Client, HealthCheckable {
String trustStorePass, String trustStorePass,
String user, String user,
String password, String password,
List<IndexNameConverter> indexNameConverters) { List<IndexNameConverter> indexNameConverters,
int connectTimeout,
int socketTimeout) {
this.clusterNodes = clusterNodes; this.clusterNodes = clusterNodes;
this.protocol = protocol; this.protocol = protocol;
this.user = user; this.user = user;
...@@ -134,6 +138,8 @@ public class ElasticSearchClient implements Client, HealthCheckable { ...@@ -134,6 +138,8 @@ public class ElasticSearchClient implements Client, HealthCheckable {
this.indexNameConverters = indexNameConverters; this.indexNameConverters = indexNameConverters;
this.trustStorePath = trustStorePath; this.trustStorePath = trustStorePath;
this.trustStorePass = trustStorePass; this.trustStorePass = trustStorePass;
this.connectTimeout = connectTimeout;
this.socketTimeout = socketTimeout;
} }
@Override @Override
...@@ -183,6 +189,11 @@ public class ElasticSearchClient implements Client, HealthCheckable { ...@@ -183,6 +189,11 @@ public class ElasticSearchClient implements Client, HealthCheckable {
} else { } else {
builder = RestClient.builder(pairsList.toArray(new HttpHost[0])); builder = RestClient.builder(pairsList.toArray(new HttpHost[0]));
} }
builder.setRequestConfigCallback(
requestConfigBuilder -> requestConfigBuilder
.setConnectTimeout(connectTimeout)
.setSocketTimeout(socketTimeout)
);
return new RestHighLevelClient(builder); return new RestHighLevelClient(builder);
} }
......
...@@ -69,7 +69,7 @@ public class ITElasticSearchClient { ...@@ -69,7 +69,7 @@ public class ITElasticSearchClient {
final String esAddress = System.getProperty("elastic.search.address"); final String esAddress = System.getProperty("elastic.search.address");
final String esProtocol = System.getProperty("elastic.search.protocol"); final String esProtocol = System.getProperty("elastic.search.protocol");
client = new ElasticSearchClient(esAddress, esProtocol, "", "", "test", "test", client = new ElasticSearchClient(esAddress, esProtocol, "", "", "test", "test",
indexNameConverters(namespace) indexNameConverters(namespace), 500, 6000
); );
client.connect(); client.connect();
} }
......
...@@ -29,6 +29,18 @@ public class StorageModuleElasticsearchConfig extends ModuleConfig { ...@@ -29,6 +29,18 @@ public class StorageModuleElasticsearchConfig extends ModuleConfig {
private String nameSpace; private String nameSpace;
private String clusterNodes; private String clusterNodes;
String protocol = "http"; String protocol = "http";
/**
* Connect timeout of ElasticSearch client.
*
* @since 8.7.0
*/
private int connectTimeout = 500;
/**
* Socket timeout of ElasticSearch client.
*
* @since 8.7.0
*/
private int socketTimeout = 30000;
/** /**
* Since 6.4.0, the index of metrics and traces data in minute/hour/month precision are organized in days. ES * Since 6.4.0, the index of metrics and traces data in minute/hour/month precision are organized in days. ES
* storage creates new indexes in every day. * storage creates new indexes in every day.
......
...@@ -163,11 +163,11 @@ public class StorageModuleElasticsearchProvider extends ModuleProvider { ...@@ -163,11 +163,11 @@ public class StorageModuleElasticsearchProvider extends ModuleProvider {
elasticSearchClient = new ElasticSearchClient( elasticSearchClient = new ElasticSearchClient(
config.getClusterNodes(), config.getProtocol(), config.getTrustStorePath(), config config.getClusterNodes(), config.getProtocol(), config.getTrustStorePath(), config
.getTrustStorePass(), config.getUser(), config.getPassword(), .getTrustStorePass(), config.getUser(), config.getPassword(),
indexNameConverters(config.getNameSpace()) indexNameConverters(config.getNameSpace()), config.getConnectTimeout(), config.getSocketTimeout()
); );
this.registerServiceImplementation( this.registerServiceImplementation(
IBatchDAO.class, IBatchDAO.class,
new BatchProcessEsDAO(elasticSearchClient, config.getBulkActions(), config new BatchProcessEsDAO(elasticSearchClient, config.getBulkActions(), config
.getFlushInterval(), config.getConcurrentRequests()) .getFlushInterval(), config.getConcurrentRequests())
); );
this.registerServiceImplementation(StorageDAO.class, new StorageEsDAO(elasticSearchClient)); this.registerServiceImplementation(StorageDAO.class, new StorageEsDAO(elasticSearchClient));
......
...@@ -161,7 +161,7 @@ public class StorageModuleElasticsearch7Provider extends ModuleProvider { ...@@ -161,7 +161,7 @@ public class StorageModuleElasticsearch7Provider extends ModuleProvider {
elasticSearch7Client = new ElasticSearch7Client( elasticSearch7Client = new ElasticSearch7Client(
config.getClusterNodes(), config.getProtocol(), config.getTrustStorePath(), config config.getClusterNodes(), config.getProtocol(), config.getTrustStorePath(), config
.getTrustStorePass(), config.getUser(), config.getPassword(), .getTrustStorePass(), config.getUser(), config.getPassword(),
indexNameConverters(config.getNameSpace()) indexNameConverters(config.getNameSpace()), config.getConnectTimeout(), config.getSocketTimeout()
); );
this.registerServiceImplementation( this.registerServiceImplementation(
IBatchDAO.class, IBatchDAO.class,
......
...@@ -78,9 +78,6 @@ import org.elasticsearch.index.reindex.BulkByScrollResponse; ...@@ -78,9 +78,6 @@ import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryRequest; import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.builder.SearchSourceBuilder;
/**
*
*/
@Slf4j @Slf4j
public class ElasticSearch7Client extends ElasticSearchClient { public class ElasticSearch7Client extends ElasticSearchClient {
public ElasticSearch7Client(final String clusterNodes, public ElasticSearch7Client(final String clusterNodes,
...@@ -89,10 +86,12 @@ public class ElasticSearch7Client extends ElasticSearchClient { ...@@ -89,10 +86,12 @@ public class ElasticSearch7Client extends ElasticSearchClient {
final String trustStorePass, final String trustStorePass,
final String user, final String user,
final String password, final String password,
List<IndexNameConverter> indexNameConverters) { List<IndexNameConverter> indexNameConverters,
int connectTimeout,
int socketTimeout) {
super( super(
clusterNodes, protocol, trustStorePath, trustStorePass, user, password, clusterNodes, protocol, trustStorePath, trustStorePass, user, password,
indexNameConverters indexNameConverters, connectTimeout, socketTimeout
); );
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册