1.服务端增加运行时报告,定制日志输出线程的运行情况,提高辨识度。示例如下:
---------Server Health Collector Report--------- id<SkyWalkingServer,M:null/null,P:24763,T:PersistenceThread_1(13)> [INFO]read 3 chars from local file:1455864122412-37cd0a49fbb84ae9b111a08557cbd827(t:1455864245081) id<SkyWalkingServer,M:null/null,P:24763,T:PersistenceThread_2(14)> [INFO]read 3 chars from local file:1455864122406-e19d28ec360d44d2a06335511f61d7c6(t:1455864245080) id<SkyWalkingServer,M:unknown host!/null,P:24763,T:PersistenceThread_0(12)> [INFO]read 3 chars from local file:1455864122413-c0efe8bf31194c1887301ff3098eed00(t:1455864245080) id<SkyWalkingServer,M:unknown host!/null,P:24763,T:PersistenceThread_3(15)> [INFO]read 3 chars from local file:1455864122413-79b44d640a7c4f9899d599c8354b861b(t:1455864245080) id<SkyWalkingServer,M:unknown host!/null,P:24763,T:PersistenceThread_4(16)> [INFO]read 3 chars from local file:1455864122413-db2d14a825db4b5a93fa1a0a0e25d0c6(t:1455864245082) id<SkyWalkingServer,M:unknown host!/null,P:24763,T:RegisterPersistenceThread(11)> [INFO]flush memory register to file.(t:1455864250063) ------------------------------------------------
This commit is contained in:
parent
44980a0c03
commit
734b14bf68
|
|
@ -1,12 +1,11 @@
|
|||
package com.ai.cloud.skywalking.reciever;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.buffer.DataBufferThreadContainer;
|
||||
import com.ai.cloud.skywalking.reciever.conf.Config;
|
||||
import com.ai.cloud.skywalking.reciever.conf.ConfigInitializer;
|
||||
import com.ai.cloud.skywalking.reciever.handler.CollectionServerDataHandler;
|
||||
import com.ai.cloud.skywalking.reciever.persistance.PersistenceThreadLauncher;
|
||||
import io.netty.bootstrap.ServerBootstrap;
|
||||
import io.netty.channel.*;
|
||||
import io.netty.channel.ChannelFuture;
|
||||
import io.netty.channel.ChannelInitializer;
|
||||
import io.netty.channel.ChannelOption;
|
||||
import io.netty.channel.ChannelPipeline;
|
||||
import io.netty.channel.EventLoopGroup;
|
||||
import io.netty.channel.nio.NioEventLoopGroup;
|
||||
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
||||
|
|
@ -15,12 +14,20 @@ import io.netty.handler.codec.bytes.ByteArrayDecoder;
|
|||
import io.netty.handler.codec.bytes.ByteArrayEncoder;
|
||||
import io.netty.handler.logging.LogLevel;
|
||||
import io.netty.handler.logging.LoggingHandler;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.buffer.DataBufferThreadContainer;
|
||||
import com.ai.cloud.skywalking.reciever.conf.Config;
|
||||
import com.ai.cloud.skywalking.reciever.conf.ConfigInitializer;
|
||||
import com.ai.cloud.skywalking.reciever.handler.CollectionServerDataHandler;
|
||||
import com.ai.cloud.skywalking.reciever.persistance.PersistenceThreadLauncher;
|
||||
import com.ai.cloud.skywalking.reciever.selfexamination.ServerHealthCollector;
|
||||
|
||||
public class CollectionServer {
|
||||
|
||||
static Logger logger = LogManager.getLogger(CollectionServer.class);
|
||||
|
|
@ -62,6 +69,8 @@ public class CollectionServer {
|
|||
public static void main(String[] args) throws IOException, IllegalAccessException, InterruptedException {
|
||||
logger.info("To initialize the collect server configuration parameters....");
|
||||
initializeParam();
|
||||
logger.info("To init server health collector...");
|
||||
ServerHealthCollector.init();
|
||||
logger.info("To launch register persistence thread....");
|
||||
PersistenceThreadLauncher.doLaunch();
|
||||
logger.info("To init data buffer thread container...");
|
||||
|
|
|
|||
|
|
@ -72,9 +72,9 @@ public class Config {
|
|||
}
|
||||
|
||||
public static class HBaseConfig {
|
||||
//
|
||||
|
||||
public static String TABLE_NAME = "sw-call-chain";
|
||||
//
|
||||
|
||||
public static String FAMILY_COLUMN_NAME = "call-chain";
|
||||
|
||||
public static String ZK_HOSTNAME;
|
||||
|
|
@ -104,4 +104,9 @@ public class Config {
|
|||
|
||||
public static boolean ALARM_OFF_FLAG = false;
|
||||
}
|
||||
|
||||
public static class HealthCollector {
|
||||
// 默认健康检查上报时间
|
||||
public static long REPORT_INTERVAL = 5 * 60 * 1000L;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
package com.ai.cloud.skywalking.reciever.conf;
|
||||
|
||||
public class Constants {
|
||||
public static final String HEALTH_DATA_SPILT_PATTERN = "^~";
|
||||
|
||||
public static final String DATA_SPILT = "#&";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,33 +1,71 @@
|
|||
package com.ai.cloud.skywalking.reciever.selfexamination;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.conf.Config;
|
||||
import com.ai.cloud.skywalking.reciever.util.MachineUtil;
|
||||
|
||||
public class ServerHealthCollector extends Thread{
|
||||
private static Map<String, ServerHeathReading> heathReadings = new HashMap<String, ServerHeathReading>();
|
||||
public class ServerHealthCollector extends Thread {
|
||||
private Logger logger = LogManager.getLogger(ServerHealthCollector.class);
|
||||
|
||||
private static Map<String, ServerHeathReading> heathReadings = new ConcurrentHashMap<String, ServerHeathReading>();
|
||||
|
||||
private ServerHealthCollector(){
|
||||
super("ServerHealthCollector");
|
||||
}
|
||||
|
||||
public static ServerHeathReading getCurrentHeathReading(String extraId){
|
||||
public static void init(){
|
||||
new ServerHealthCollector().start();
|
||||
}
|
||||
|
||||
public static ServerHeathReading getCurrentHeathReading(String extraId) {
|
||||
String id = getId(extraId);
|
||||
if(!heathReadings.containsKey(id)){
|
||||
if (!heathReadings.containsKey(id)) {
|
||||
synchronized (heathReadings) {
|
||||
if(!heathReadings.containsKey(id)){
|
||||
if (!heathReadings.containsKey(id)) {
|
||||
heathReadings.put(id, new ServerHeathReading(id));
|
||||
}
|
||||
}
|
||||
}
|
||||
return heathReadings.get(id);
|
||||
}
|
||||
|
||||
private static String getId(String extraId){
|
||||
return "SkyWalkingServer,M:" + MachineUtil.getHostDesc() +",P:" + MachineUtil.getProcessNo() + ",T:"
|
||||
|
||||
private static String getId(String extraId) {
|
||||
return "SkyWalkingServer,M:" + MachineUtil.getHostDesc() + ",P:"
|
||||
+ MachineUtil.getProcessNo() + ",T:"
|
||||
+ Thread.currentThread().getName() + "("
|
||||
+ Thread.currentThread().getId() + ")" + (extraId == null? "" : ",extra:" + extraId);
|
||||
+ Thread.currentThread().getId() + ")"
|
||||
+ (extraId == null ? "" : ",extra:" + extraId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run(){
|
||||
//TODO: 服务端本地存储,用于将信息存储如数据库,并供前台展现,完成定时刷新
|
||||
public void run() {
|
||||
while (true) {
|
||||
try {
|
||||
String[] keyList = heathReadings.keySet().toArray(new String[0]);
|
||||
Arrays.sort(keyList);
|
||||
StringBuilder log = new StringBuilder();
|
||||
log.append("\n---------Server Health Collector Report---------\n");
|
||||
for(String key : keyList){
|
||||
log.append(heathReadings.get(key)).append("\n");
|
||||
}
|
||||
log.append("------------------------------------------------\n");
|
||||
|
||||
logger.info(log);
|
||||
|
||||
try {
|
||||
Thread.sleep(Config.HealthCollector.REPORT_INTERVAL);
|
||||
} catch (InterruptedException e) {
|
||||
logger.warn("sleep error.", e);
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
logger.error("ServerHealthCollector report error.", t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,12 +3,10 @@ package com.ai.cloud.skywalking.reciever.selfexamination;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.ai.cloud.skywalking.reciever.conf.Constants;
|
||||
|
||||
public class ServerHeathReading {
|
||||
public static final String ERROR = "ERROR";
|
||||
public static final String WARNING = "WARNING";
|
||||
public static final String INFO = "INFO";
|
||||
public static final String ERROR = "[ERROR]";
|
||||
public static final String WARNING = "[WARNING]";
|
||||
public static final String INFO = "[INFO]";
|
||||
|
||||
private String id;
|
||||
|
||||
|
|
@ -32,10 +30,10 @@ public class ServerHeathReading {
|
|||
|
||||
@Override
|
||||
public String toString(){
|
||||
StringBuilder sb = new StringBuilder(this.id);
|
||||
sb.append(Constants.HEALTH_DATA_SPILT_PATTERN);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("id<").append(this.id).append(">\n");
|
||||
for(Map.Entry<String, HeathDetailData> data : datas.entrySet()){
|
||||
sb.append(data.getKey()).append(Constants.HEALTH_DATA_SPILT_PATTERN).append(data.getValue().toString()).append(Constants.HEALTH_DATA_SPILT_PATTERN);
|
||||
sb.append(data.getKey()).append(data.getValue().toString()).append("\n");
|
||||
}
|
||||
|
||||
//reset data
|
||||
|
|
@ -68,7 +66,7 @@ public class ServerHeathReading {
|
|||
|
||||
@Override
|
||||
public String toString(){
|
||||
return "d:" + data + Constants.HEALTH_DATA_SPILT_PATTERN + "t:" + statusTime;
|
||||
return data + "(t:" + statusTime + ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue