From 756eb176b896b8b816412d5646391a7c8bde6123 Mon Sep 17 00:00:00 2001 From: wusheng Date: Mon, 29 Feb 2016 15:24:15 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=A1=A5=E5=85=85=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E5=81=A5=E5=BA=B7=E6=A3=80=E6=9F=A5=E4=BB=A3=E7=A0=81=202.?= =?UTF-8?q?=E8=A1=A5=E5=85=85=E9=83=A8=E5=88=86=E6=96=87=E6=A1=A3=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 45 +++++++++++++++++-- .../cloud/skywalking/sender/DataSender.java | 7 +-- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 45466f855..9e47ec38d 100644 --- a/README.md +++ b/README.md @@ -144,7 +144,11 @@ INSERT INTO `system_config` (`config_id`,`conf_key`,`conf_value`,`val_type`,`val 暂未提供 ## 使用maven发布各插件工程 -发布skywalking-sdk-plugin下的各子工程(dubbo-plugin,spring-plugin,web-plugin,jdbc-plugin,httpclient-4.2.x-plugin,httpclient-4.3.x-plugin) +- 发布skywalking-sdk-plugin下的各子工程(dubbo-plugin,spring-plugin,web-plugin,jdbc-plugin,httpclient-4.2.x-plugin,httpclient-4.3.x-plugin) +- 请跳过maven.test环节,避免打包失败 +```properties +-Dmaven.test.skip=true +``` ## 引入核心SDK 无论试用哪种插件,都必须引入 @@ -180,21 +184,38 @@ export SKYWALKING_RUN=true - 设置完成后,可以在当前环境中启动业务应用系统 ## 通过扩展log4j或log4j2,在应用日志中,显示trace-id -- 编译并发布skywalking-log/log4j-1.x-plugin和skywalking-log/log4j-2.x-plugin -- 引用所需的日志插件 +### log4j +- 编译并发布skywalking-log/log4j-1.x-plugin ```xml com.ai.cloud skywalking-log4j-1.x-plugin 1.0-SNAPSHOT +``` +- 配置log4j配置文件 +```properties +log4j.appender.A1.layout=com.ai.cloud.skywalking.plugin.log.log4j.v1.x.TraceIdPatternLayout +#%x为traceid的转义符 +log4j.appender.A1.layout.ConversionPattern=[%x] %-d{yyyy-MM-dd HH:mm:ss.SSS} %c %n[%p] %n%m%n +``` + +### log4j2 +- 编译并发布skywalking-log/log4j-2.x-plugin +- 引用所需的日志插件 +```xml com.ai.cloud skywalking-log4j-2.x-plugin 1.0-SNAPSHOT ``` -- 设置log4j和log4j2参考[用户指南](http://wu-sheng.github.io/sky-walking/sample-code/codeView.html)->能通过哪些渠道在应用中发现traceid? +- 配置log4j2配置文件 +```xml + + +``` + - 日志示例 ``` #tid:N/A,代表环境设置不正确或监控已经关闭 @@ -203,5 +224,21 @@ export SKYWALKING_RUN=true [DEBUG] Returning handler method [public org.springframework.web.servlet.ModelAndView com.ai.cloud.skywalking.example.controller.OrderSaveController.save(javax.servlet.http.HttpServletRequest)] TID:1.0a2.1453192613272.2e0c63e.11144.58.1 2016-01-19 16:36:53.288 org.springframework.beans.factory.support.DefaultListableBeanFactory ``` +## 如何在追踪日志中记录日志上下文 +- 使用sky walking提供的专用API,可以将日志保存到追踪日志中。示例如下: +```java +String businessKey = "phoneNumber:" + phoneNumber + ",resourceId:" + resourceId + ",mail:" + mail; +BusinessKeyAppender.setBusinessKey2Trace(businessKey); +``` + +## 如何在代码中获取traceid +- 通过API获取traceid +```java +Tracing.getTraceId(); +``` + +## 还有其他方式获取traceid么? +- 通过web应用的http调用入口,通过返回的header信息,找到此次调用的traceid。前提:此web应用的url,已经使用skywalking进行监控。 + # 源代码说明 * [HBase存储结构说明](https://github.com/wu-sheng/sky-walking/blob/master/skywalking-server/doc/hbase_table_desc.md) diff --git a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java index 1f0529e03..e0a3a455d 100644 --- a/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java +++ b/skywalking-api/src/main/java/com/ai/cloud/skywalking/sender/DataSender.java @@ -59,6 +59,7 @@ public class DataSender implements IDataSender { bootstrap.connect(address).sync(); } catch (Exception e) { status = SenderStatus.FAILED; + SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.INFO, "DataSender[" + socketAddress + "] send data successfully."); } } @@ -73,15 +74,15 @@ public class DataSender implements IDataSender { try { if (channel != null && channel.isActive()) { channel.writeAndFlush(data.getBytes()); - SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.INFO, "DataSender send data successfully."); + SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.INFO, "DataSender[" + socketAddress + "] send data successfully."); return true; }else{ DataSenderFactoryWithBalance.unRegister(this); - SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender channel isn't active. unregister sender."); + SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender[" + socketAddress + "] channel isn't active. unregister sender."); } } catch (Exception e) { DataSenderFactoryWithBalance.unRegister(this); - SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender channel broken. unregister sender."); + SDKHealthCollector.getCurrentHeathReading("sender").updateData(HeathReading.WARNING, "DataSender[" + socketAddress + "] channel broken. unregister sender."); } return false;