提交 734b14bf 编写于 作者: wu-sheng's avatar wu-sheng

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)

------------------------------------------------
上级 44980a0c
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;
}
}
\ No newline at end of file
package com.ai.cloud.skywalking.reciever.conf;
public class Constants {
public static final String HEALTH_DATA_SPILT_PATTERN = "^~";
public static final String DATA_SPILT = "#&";
}
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 + ")";
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册