Browse Source

Improve the logs when the heartbeat response indicates failure (#1303)

master
Lin.Liang GitHub 4 years ago
parent
commit
72bfe870cb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 19 deletions
  1. +3
    -3
      sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/transport/config/TransportConfig.java
  2. +40
    -6
      sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/HttpHeartbeatSender.java
  3. +25
    -5
      sentinel-transport/sentinel-transport-simple-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SimpleHttpHeartbeatSender.java
  4. +7
    -5
      sentinel-transport/sentinel-transport-simple-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/client/SimpleHttpResponse.java

+ 3
- 3
sentinel-transport/sentinel-transport-common/src/main/java/com/alibaba/csp/sentinel/transport/config/TransportConfig.java View File

@@ -15,15 +15,15 @@
*/ */
package com.alibaba.csp.sentinel.transport.config; package com.alibaba.csp.sentinel.transport.config;


import java.util.ArrayList;
import java.util.List;

import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.config.SentinelConfig;
import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.util.HostNameUtil; import com.alibaba.csp.sentinel.util.HostNameUtil;
import com.alibaba.csp.sentinel.util.StringUtil; import com.alibaba.csp.sentinel.util.StringUtil;
import com.alibaba.csp.sentinel.util.function.Tuple2; import com.alibaba.csp.sentinel.util.function.Tuple2;


import java.util.ArrayList;
import java.util.List;

/** /**
* @author leyou * @author leyou
*/ */


+ 40
- 6
sentinel-transport/sentinel-transport-netty-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/HttpHeartbeatSender.java View File

@@ -15,20 +15,17 @@
*/ */
package com.alibaba.csp.sentinel.transport.heartbeat; package com.alibaba.csp.sentinel.transport.heartbeat;


import java.util.List;

import com.alibaba.csp.sentinel.Constants; import com.alibaba.csp.sentinel.Constants;
import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.config.SentinelConfig;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.spi.SpiOrder; import com.alibaba.csp.sentinel.spi.SpiOrder;
import com.alibaba.csp.sentinel.transport.HeartbeatSender;
import com.alibaba.csp.sentinel.transport.config.TransportConfig; import com.alibaba.csp.sentinel.transport.config.TransportConfig;
import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.util.AppNameUtil; import com.alibaba.csp.sentinel.util.AppNameUtil;
import com.alibaba.csp.sentinel.util.HostNameUtil; import com.alibaba.csp.sentinel.util.HostNameUtil;
import com.alibaba.csp.sentinel.transport.HeartbeatSender;
import com.alibaba.csp.sentinel.util.PidUtil; import com.alibaba.csp.sentinel.util.PidUtil;
import com.alibaba.csp.sentinel.util.StringUtil; import com.alibaba.csp.sentinel.util.StringUtil;
import com.alibaba.csp.sentinel.util.function.Tuple2; import com.alibaba.csp.sentinel.util.function.Tuple2;

import org.apache.http.client.config.RequestConfig; import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
@@ -36,6 +33,8 @@ import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;


import java.util.List;

/** /**
* @author Eric Zhao * @author Eric Zhao
* @author leyou * @author leyou
@@ -45,6 +44,9 @@ public class HttpHeartbeatSender implements HeartbeatSender {


private final CloseableHttpClient client; private final CloseableHttpClient client;


private static final int OK_STATUS = 200;


private final int timeoutMs = 3000; private final int timeoutMs = 3000;
private final RequestConfig requestConfig = RequestConfig.custom() private final RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(timeoutMs) .setConnectionRequestTimeout(timeoutMs)
@@ -89,11 +91,43 @@ public class HttpHeartbeatSender implements HeartbeatSender {
// Send heartbeat request. // Send heartbeat request.
CloseableHttpResponse response = client.execute(request); CloseableHttpResponse response = client.execute(request);
response.close(); response.close();
return true;
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == OK_STATUS) {
return true;
} else if (clientErrorCode(statusCode) || serverErrorCode(statusCode)) {
RecordLog.warn("[HttpHeartbeatSender] Failed to send heartbeat to "
+ consoleHost + ":" + consolePort + ", http status code: {0}", statusCode);
}

return false;


} }


@Override @Override
public long intervalMs() { public long intervalMs() {
return 5000; return 5000;
} }

/**
* 4XX Client Error
*
* @param code
* @return
*/
private boolean clientErrorCode(int code) {
return code > 399 && code < 500;
}

/**
* 5XX Server Error
*
* @param code
* @return
*/
private boolean serverErrorCode(int code) {
return code > 499 && code < 600;
}


} }

+ 25
- 5
sentinel-transport/sentinel-transport-simple-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/SimpleHttpHeartbeatSender.java View File

@@ -15,19 +15,17 @@
*/ */
package com.alibaba.csp.sentinel.transport.heartbeat; package com.alibaba.csp.sentinel.transport.heartbeat;


import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.List;

import com.alibaba.csp.sentinel.log.RecordLog; import com.alibaba.csp.sentinel.log.RecordLog;
import com.alibaba.csp.sentinel.transport.HeartbeatSender; import com.alibaba.csp.sentinel.transport.HeartbeatSender;
import com.alibaba.csp.sentinel.transport.config.TransportConfig; import com.alibaba.csp.sentinel.transport.config.TransportConfig;
import com.alibaba.csp.sentinel.transport.heartbeat.client.SimpleHttpClient; import com.alibaba.csp.sentinel.transport.heartbeat.client.SimpleHttpClient;
import com.alibaba.csp.sentinel.transport.heartbeat.client.SimpleHttpRequest; import com.alibaba.csp.sentinel.transport.heartbeat.client.SimpleHttpRequest;
import com.alibaba.csp.sentinel.transport.heartbeat.client.SimpleHttpResponse; import com.alibaba.csp.sentinel.transport.heartbeat.client.SimpleHttpResponse;
import com.alibaba.csp.sentinel.util.StringUtil;
import com.alibaba.csp.sentinel.util.function.Tuple2; import com.alibaba.csp.sentinel.util.function.Tuple2;


import java.net.InetSocketAddress;
import java.util.List;

/** /**
* The heartbeat sender provides basic API for sending heartbeat request to provided target. * The heartbeat sender provides basic API for sending heartbeat request to provided target.
* This implementation is based on a trivial HTTP client. * This implementation is based on a trivial HTTP client.
@@ -73,6 +71,8 @@ public class SimpleHttpHeartbeatSender implements HeartbeatSender {
SimpleHttpResponse response = httpClient.post(request); SimpleHttpResponse response = httpClient.post(request);
if (response.getStatusCode() == OK_STATUS) { if (response.getStatusCode() == OK_STATUS) {
return true; return true;
} else if (clientErrorCode(response.getStatusCode()) || serverErrorCode(response.getStatusCode())) {
RecordLog.warn("[SimpleHttpHeartbeatSender] Failed to send heartbeat to " + addr + ", http status code: {0}", response.getStatusCode());
} }
} catch (Exception e) { } catch (Exception e) {
RecordLog.warn("[SimpleHttpHeartbeatSender] Failed to send heartbeat to " + addr, e); RecordLog.warn("[SimpleHttpHeartbeatSender] Failed to send heartbeat to " + addr, e);
@@ -96,4 +96,24 @@ public class SimpleHttpHeartbeatSender implements HeartbeatSender {
return addressList.get(index); return addressList.get(index);
} }



/**
* 4XX Client Error
*
* @param code
* @return
*/
private boolean clientErrorCode(int code) {
return code > 399 && code < 500;
}

/**
* 5XX Server Error
*
* @param code
* @return
*/
private boolean serverErrorCode(int code) {
return code > 499 && code < 600;
}
} }

+ 7
- 5
sentinel-transport/sentinel-transport-simple-http/src/main/java/com/alibaba/csp/sentinel/transport/heartbeat/client/SimpleHttpResponse.java View File

@@ -15,11 +15,11 @@
*/ */
package com.alibaba.csp.sentinel.transport.heartbeat.client; package com.alibaba.csp.sentinel.transport.heartbeat.client;


import com.alibaba.csp.sentinel.config.SentinelConfig;

import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Map; import java.util.Map;


import com.alibaba.csp.sentinel.config.SentinelConfig;

/** /**
* Simple HTTP response representation. * Simple HTTP response representation.
* *
@@ -112,10 +112,12 @@ public class SimpleHttpResponse {
public String toString() { public String toString() {
StringBuilder buf = new StringBuilder(); StringBuilder buf = new StringBuilder();
buf.append(statusLine) buf.append(statusLine)
.append("\r\n");
for (Map.Entry<String, String> entry : headers.entrySet()) {
buf.append(entry.getKey()).append(": ").append(entry.getValue())
.append("\r\n"); .append("\r\n");
if (headers != null) {
for (Map.Entry<String, String> entry : headers.entrySet()) {
buf.append(entry.getKey()).append(": ").append(entry.getValue())
.append("\r\n");
}
} }
buf.append("\r\n"); buf.append("\r\n");
buf.append(getBodyAsString()); buf.append(getBodyAsString());


Loading…
Cancel
Save