diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Config.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Config.java index 3b8268a47..67cbae824 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Config.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/conf/Config.java @@ -88,7 +88,7 @@ public class Config { public static int ALARM_EXPIRE_SECONDS = 1000 * 60 * 90; - public static String REDIS_SERVER_CONFIG = "127.0.0.1:6379"; + public static String REDIS_SERVER = "127.0.0.1:6379"; public static int REDIS_MAX_IDLE = 10; diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/ChainException.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/ChainException.java index 7410c97f6..be4024ad3 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/ChainException.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/ChainException.java @@ -1,8 +1,9 @@ package com.ai.cloud.skywalking.reciever.storage; public class ChainException extends RuntimeException { + private static final long serialVersionUID = -3134195788063272909L; - public ChainException(Throwable cause) { + public ChainException(Throwable cause) { super(cause); } diff --git a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/chain/AlarmChain.java b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/chain/AlarmChain.java index 914045289..dcd3fc6f7 100644 --- a/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/chain/AlarmChain.java +++ b/skywalking-server/src/main/java/com/ai/cloud/skywalking/reciever/storage/chain/AlarmChain.java @@ -16,134 +16,128 @@ import java.util.List; import static com.ai.cloud.skywalking.reciever.conf.Config.Alarm.ALARM_EXPIRE_SECONDS; public class AlarmChain implements IStorageChain { - private static Logger logger = LogManager.getLogger(AlarmChain.class); - private static JedisPool jedisPool; - private static String[] config; - private static Object lock = new Object(); - private static RedisInspector connector; + private static Logger logger = LogManager.getLogger(AlarmChain.class); + private static JedisPool jedisPool; + private static String[] config; + private static Object lock = new Object(); + private static RedisInspector connector = new RedisInspector();; - static { - GenericObjectPoolConfig genericObjectPoolConfig = buildGenericObjectPoolConfig(); - String redisServerConfig = Config.Alarm.REDIS_SERVER_CONFIG; - if (redisServerConfig == null || redisServerConfig.length() <= 0) { - logger.error("Redis server config is null."); - Config.Alarm.ALARM_OFF_FLAG = true; - } else { - config = redisServerConfig.split(":"); - if (config.length != 2) { - logger.error("Redis server config is illegal"); - Config.Alarm.ALARM_OFF_FLAG = true; - } else { - jedisPool = - new JedisPool(genericObjectPoolConfig, config[0], - Integer.valueOf(config[1])); - // Test connect redis. - Jedis jedis = null; - try { - jedis = jedisPool.getResource(); - } catch (Exception e) { - handleFailedToConnectRedisServerException(e); - logger.error("Failed to set data.", e); - } finally { - if (jedis != null) { - jedis.close(); - } - } - } - } - } + static { + GenericObjectPoolConfig genericObjectPoolConfig = buildGenericObjectPoolConfig(); + String redisServerConfig = Config.Alarm.REDIS_SERVER; + if (redisServerConfig == null || redisServerConfig.length() <= 0) { + logger.error("Redis server is not setting. Switch off alarm module. "); + Config.Alarm.ALARM_OFF_FLAG = true; + } else { + config = redisServerConfig.split(":"); + if (config.length != 2) { + logger.error("Redis server address is illegal setting, need to be 'ip:port'. Switch off alarm module. "); + Config.Alarm.ALARM_OFF_FLAG = true; + } else { + jedisPool = new JedisPool(genericObjectPoolConfig, config[0], + Integer.valueOf(config[1])); + // Test connect redis. + Jedis jedis = null; + try { + jedis = jedisPool.getResource(); + } catch (Exception e) { + handleFailedToConnectRedisServerException(e); + logger.error("can't connect to redis[" + + Config.Alarm.REDIS_SERVER + "]", e); + } finally { + if (jedis != null) { + jedis.close(); + } + } + } + } + } - @Override - public void doChain(List spans, Chain chain) { - for (Span span : spans) { - if (span.getStatusCode() != 1) - continue; - saveAlarmMessage( - generateAlarmKey(span) - , span.getTraceId()); - } - chain.doChain(spans); - } + @Override + public void doChain(List spans, Chain chain) { + for (Span span : spans) { + if (span.getStatusCode() != 1) + continue; + saveAlarmMessage(generateAlarmKey(span), span.getTraceId()); + } + chain.doChain(spans); + } - private String generateAlarmKey(Span span) { - return span.getUserId() + "-" - + span.getApplicationId() + "-" - + (System.currentTimeMillis() / (10000 * 6)); - } + private String generateAlarmKey(Span span) { + return span.getUserId() + "-" + span.getApplicationId() + "-" + + (System.currentTimeMillis() / (10000 * 6)); + } + private void saveAlarmMessage(String key, String traceId) { + if (Config.Alarm.ALARM_OFF_FLAG) { + return; + } - private void saveAlarmMessage(String key, String traceId) { - if (Config.Alarm.ALARM_OFF_FLAG) { - return; - } + Jedis jedis = null; + try { + jedis = jedisPool.getResource(); + jedis.hset(key, traceId, ""); + jedis.expire(key, ALARM_EXPIRE_SECONDS); + } catch (Exception e) { + handleFailedToConnectRedisServerException(e); + logger.error("Failed to set data.", e); + } finally { + if (jedis != null) { + jedis.close(); + } + } + } - Jedis jedis = null; - try { - jedis = jedisPool.getResource(); - jedis.hset(key, traceId, ""); - jedis.expire(key, ALARM_EXPIRE_SECONDS); - } catch (Exception e) { - handleFailedToConnectRedisServerException(e); - logger.error("Failed to set data.", e); - } finally { - if (jedis != null) { - jedis.close(); - } - } - } + private static class RedisInspector extends Thread { + @Override + public void run() { + logger.debug("Connecting to redis...."); + Jedis jedis; + while (true) { + try { + jedisPool = new JedisPool(buildGenericObjectPoolConfig(), + config[0], Integer.valueOf(config[1])); + jedis = jedisPool.getResource(); + jedis.get("ok"); + break; + } catch (Exception e) { + if (e instanceof JedisConnectionException) { + try { + Thread.sleep(5000L); + } catch (InterruptedException e1) { + logger.error("Sleep failed", e); + } + continue; + } + } + } + logger.debug("Connected to redis success. Open alarm function."); + Config.Alarm.ALARM_OFF_FLAG = false; + // 清理当前线程 + connector = null; + } + } - private static class RedisInspector extends Thread { - @Override - public void run() { - logger.info("Connecting to redis...."); - Jedis jedis; - while (true) { - try { - jedisPool = - new JedisPool(buildGenericObjectPoolConfig(), - config[0], Integer.valueOf(config[1])); - jedis = jedisPool.getResource(); - jedis.get("ok"); - break; - } catch (Exception e) { - if (e instanceof JedisConnectionException) { - try { - Thread.sleep(5000L); - } catch (InterruptedException e1) { - logger.error("Sleep failed", e); - } - continue; - } - } - } - logger.info("Connected to redis success. Open alarm function."); - Config.Alarm.ALARM_OFF_FLAG = false; - // 清理当前线程 - connector = null; - } - } + private static void handleFailedToConnectRedisServerException(Exception e) { + if (e instanceof JedisConnectionException) { + // 发生连接不上Redis + if (connector == null || !connector.isAlive()) { + synchronized (lock) { + if (!connector.isAlive()) { + // 启动巡检线程 + connector.start(); + } + } + } + } + } - private static void handleFailedToConnectRedisServerException(Exception e) { - if (e instanceof JedisConnectionException) { - // 发生连接不上Redis - if (connector == null || !connector.isAlive()) { - synchronized (lock) { - if (connector == null || !connector.isAlive()) { - // 启动巡检线程 - connector = new RedisInspector(); - connector.start(); - } - } - } - } - } - - private static GenericObjectPoolConfig buildGenericObjectPoolConfig() { - GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); - genericObjectPoolConfig.setTestOnBorrow(true); - genericObjectPoolConfig.setMaxIdle(Config.Alarm.REDIS_MAX_IDLE); - genericObjectPoolConfig.setMinIdle(Config.Alarm.REDIS_MIN_IDLE); - genericObjectPoolConfig.setMaxTotal(Config.Alarm.REDIS_MAX_TOTAL); - return genericObjectPoolConfig; - } + private static GenericObjectPoolConfig buildGenericObjectPoolConfig() { + GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig(); + genericObjectPoolConfig.setTestOnBorrow(true); + genericObjectPoolConfig.setMaxIdle(Config.Alarm.REDIS_MAX_IDLE); + genericObjectPoolConfig.setMinIdle(Config.Alarm.REDIS_MIN_IDLE); + genericObjectPoolConfig.setMaxTotal(Config.Alarm.REDIS_MAX_TOTAL); + return genericObjectPoolConfig; + } } diff --git a/skywalking-server/src/main/resources/config.properties b/skywalking-server/src/main/resources/config.properties index 2e29564e5..41a227a2e 100644 --- a/skywalking-server/src/main/resources/config.properties +++ b/skywalking-server/src/main/resources/config.properties @@ -45,7 +45,7 @@ hbaseconfig.client_port=29181 #告警失效时间 alarm.alarm_expire_seconds=3600000 #Redis配置 -alarm.redis_server_config=127.0.0.1:16379 +alarm.redis_server=127.0.0.1:16379 #Redis最大空闲数量 alarm.edis_max_idle=10 #Redis最小空闲数量