├── 03-Java应用(探针)接入Skywalking ├── 1542454877150.jpg ├── sky-demo │ ├── src │ │ └── main │ │ │ ├── resources │ │ │ └── application.yml │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── sky │ │ │ └── demo │ │ │ └── agent │ │ │ ├── AgentDemoApplication.java │ │ │ ├── service │ │ │ └── HelloService.java │ │ │ └── controller │ │ │ └── HelloWorldController.java │ ├── .gitignore │ ├── Dockerfile │ └── pom.xml └── Note.md ├── 01-通过Skywalking-5.x版本的源码构建并运行 ├── 1541986816594.jpg └── Note.md ├── 02-通过Skywalking-6.x版本的源码构建并运行 └── Note.md └── README.md /03-Java应用(探针)接入Skywalking/1542454877150.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredTan95/skywalking-tutorials/HEAD/03-Java应用(探针)接入Skywalking/1542454877150.jpg -------------------------------------------------------------------------------- /01-通过Skywalking-5.x版本的源码构建并运行/1541986816594.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaredTan95/skywalking-tutorials/HEAD/01-通过Skywalking-5.x版本的源码构建并运行/1541986816594.jpg -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 10101 3 | tomcat: 4 | max-threads: 10000 5 | spring: 6 | application: 7 | name: SkyWalking-Agent-Demo 8 | 9 | -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/.gitignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | target/ 3 | .idea/ 4 | *.iml 5 | .classpath 6 | .project 7 | .settings/ 8 | .DS_Store 9 | *~ 10 | packages/ 11 | **/dependency-reduced-pom.xml 12 | /skywalking-agent/ 13 | /dist/ 14 | .mvn/wrapper/*.jar 15 | -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/src/main/java/com/example/sky/demo/agent/AgentDemoApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.sky.demo.agent; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class AgentDemoApplication { 8 | public static void main(String[] args) { 9 | SpringApplication.run(AgentDemoApplication.class, args); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /02-通过Skywalking-6.x版本的源码构建并运行/Note.md: -------------------------------------------------------------------------------- 1 | # 02-compile-build-run-skywalking-6.0.0 2 | 3 | ## 编译参考: 4 | https://github.com/apache/incubator-skywalking/blob/master/docs/en/guides/How-to-build.md 5 | 6 | ## Elasticsearch配置 7 | - [通过Docker快速启动](https://github.com/JaredTan95/skywalking-docker/blob/master/elasticsearch-Zone-Asia-SH/6.3.2/README.md) 8 | 9 | ```bash 10 | docker run -p 9200:9200 -p 9300:9300 -e cluster.name=elasticsearch -d wutang/elasticsearch-shanghai-zone:6.3.2 11 | ``` 12 | 13 | 注意:Skywalking 6.0.0使用端口:`9200` -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8-jre-alpine 2 | 3 | LABEL maintainer="tanjian20150101@gmail.com" 4 | 5 | ENV SW_APPLICATION_CODE=java-agent-demo \ 6 | SW_COLLECTOR_SERVERS=localhost:11800 7 | 8 | COPY skywalking-agent /apache-skywalking-apm-incubating/agent 9 | 10 | COPY target/sky-demo-1.0-SNAPSHOT.jar /demo.jar 11 | 12 | ENTRYPOINT java -javaagent:/apache-skywalking-apm-incubating/agent/skywalking-agent.jar -Dskywalking.collector.backend_service=${SW_COLLECTOR_SERVERS} \ 13 | -Dskywalking.agent.application_code=${SW_APPLICATION_CODE} -jar /demo.jar 14 | -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/src/main/java/com/example/sky/demo/agent/service/HelloService.java: -------------------------------------------------------------------------------- 1 | package com.example.sky.demo.agent.service; 2 | 3 | import org.apache.skywalking.apm.toolkit.trace.TraceContext; 4 | import org.springframework.stereotype.Service; 5 | 6 | @Service 7 | public class HelloService { 8 | 9 | public String say(String words) { 10 | System.out.println(words); 11 | return "hello " + words + ",traceId:" + TraceContext.traceId(); 12 | } 13 | 14 | public String errorCall(String string) { 15 | if (string.equals("hello")) { 16 | throw new RuntimeException("err"); 17 | } 18 | return string; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # skywalking-tutorials 2 | Video tutorials for [Skywalking](https://skywalking.incubator.apache.org/)(A distributed tracing system, and APM). 3 | 4 | 此仓库包含了Skywalking的使用教程,教程会以视频的形式上传至视频网站,可以直接在线预览。 5 | 同时,在每节视频中产生的一些笔记也会存放在相应的目录中。 6 | 7 | - [01 通过Skywalking-5.x版本的源码构建并运行](./01-通过Skywalking-5.x版本的源码构建并运行/Note.md) 👉:[哔哩哔哩](https://www.bilibili.com/video/av35806851/) | [腾讯视频](https://v.qq.com/x/page/d07924w6u13.html) 8 | - [02 通过Skywalking-6.x版本的源码构建并运行](./02-通过Skywalking-6.x版本的源码构建并运行/Note.md) 👉:[哔哩哔哩](https://www.bilibili.com/video/av35990012/) | [腾讯视频](https://v.qq.com/x/page/s0793890ce6.html) 9 | - [03 Java应用(探针)接入Skywalking[6.x]](./03-Java应用(探针)接入Skywalking/Note.md) 👉:[哔哩哔哩](https://www.bilibili.com/video/av36172319/) | [腾讯视频](https://v.qq.com/x/page/w0795uri7jy.html) 10 | -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/Note.md: -------------------------------------------------------------------------------- 1 | # 03 Java (Spring Boot)应用的接入 2 | 参考Skywalking Github:[Setup java agent](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/service-agent/java-agent/README.md) 3 | 4 | [@Trace注解的使用](https://github.com/apache/incubator-skywalking/blob/master/docs/en/setup/service-agent/java-agent/Application-toolkit-trace.md) 5 | 6 | ## 通过IDEA进行调试接入 7 | - 更多agent 配置可以参考[agent config](https://github.com/apache/incubator-skywalking/blob/master/apm-sniffer/config/agent.config) 8 | - vm options: 9 | 10 | ```bash 11 | -javaagent:incubator-skywalking/skywalking-agent/skywalking-agent.jar 12 | -Dskywalking.agent.application_code=hello-world-demo 13 | -Dskywalking.collector.backend_service=localhost:11800 14 | ``` 15 | 16 | ## 通过Jar包方式接入 17 | 18 | ```bash 19 | java -javaagent:/apache-skywalking-apm-incubating/agent/skywalking-agent.jar -Dskywalking.collector.backend_service=localhost -Dskywalking.agent.application_code=hello-world-demo-0004 -jar target/sky-demo-1.0-SNAPSHOT.jar 20 | 21 | ``` 22 | 23 | ## 通过容器接入 24 | - Dockerfile 25 | 26 | ```bash 27 | FROM openjdk:8-jre-alpine 28 | 29 | LABEL maintainer="tanjian20150101@gmail.com" 30 | 31 | ENV SW_APPLICATION_CODE=java-agent-demo \ 32 | SW_COLLECTOR_SERVERS=localhost:11800 33 | 34 | COPY skywalking-agent /apache-skywalking-apm-incubating/agent 35 | 36 | COPY target/sky-demo-1.0-SNAPSHOT.jar /demo.jar 37 | 38 | ENTRYPOINT java -javaagent:/apache-skywalking-apm-incubating/agent/skywalking-agent.jar -Dskywalking.collector.backend_service=${SW_COLLECTOR_SERVERS} \ 39 | -Dskywalking.agent.application_code=${SW_APPLICATION_CODE} -jar /demo.jar 40 | 41 | ``` 42 | 43 | - 构建并运行 44 | 45 | ```bash 46 | docker build -t hello-demo . 47 | docker run -p 10101:10101 -e SW_APPLICATION_CODE=hello-world-demo-005 -e SW_COLLECTOR_SERVERS=127.10.0.2:11800 hello-demo 48 | 49 | ``` 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | 8 | org.springframework.boot 9 | spring-boot-starter-parent 10 | 1.5.17.RELEASE 11 | 12 | 13 | com.example.sky.demo.agent 14 | sky-demo 15 | 1.0-SNAPSHOT 16 | jar 17 | 18 | 19 | UTF-8 20 | UTF-8 21 | 1.8 22 | 23 | 24 | 25 | 26 | org.springframework.boot 27 | spring-boot-starter-test 28 | test 29 | 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-starter-web 34 | 35 | 36 | 37 | 38 | org.apache.skywalking 39 | apm-toolkit-trace 40 | 5.0.0-beta2 41 | 42 | 43 | 44 | 45 | 46 | 47 | org.springframework.boot 48 | spring-boot-maven-plugin 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /03-Java应用(探针)接入Skywalking/sky-demo/src/main/java/com/example/sky/demo/agent/controller/HelloWorldController.java: -------------------------------------------------------------------------------- 1 | package com.example.sky.demo.agent.controller; 2 | 3 | import com.example.sky.demo.agent.service.HelloService; 4 | import org.apache.skywalking.apm.toolkit.trace.ActiveSpan; 5 | import org.apache.skywalking.apm.toolkit.trace.Trace; 6 | import org.apache.skywalking.apm.toolkit.trace.TraceContext; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | import org.springframework.web.bind.annotation.GetMapping; 10 | import org.springframework.web.bind.annotation.PathVariable; 11 | import org.springframework.web.bind.annotation.RequestMapping; 12 | import org.springframework.web.bind.annotation.RestController; 13 | 14 | @RestController 15 | @RequestMapping("/") 16 | public class HelloWorldController { 17 | 18 | private static final Logger log = LoggerFactory.getLogger(HelloWorldController.class); 19 | 20 | private HelloService helloService; 21 | 22 | public HelloWorldController(HelloService helloService) { 23 | this.helloService = helloService; 24 | } 25 | 26 | @Trace 27 | @GetMapping("/hello/{words}") 28 | public String hello(@PathVariable("words") String words) { 29 | ActiveSpan.tag("hello,测试😄,你输入的是:", words); 30 | return helloService.say(words); 31 | } 32 | 33 | @Trace 34 | @GetMapping("/ok") 35 | public String ok() { 36 | //TraceContext.traceId(); 37 | ActiveSpan.tag("ok,测试😁", "ok啦"); 38 | log.info("{}", this); 39 | log.info("{}", TraceContext.traceId()); 40 | return "ok,traceId:" + TraceContext.traceId(); 41 | } 42 | 43 | @GetMapping("/err") 44 | public String err() { 45 | return helloService.errorCall("hello"); 46 | } 47 | 48 | @Trace 49 | @GetMapping("/sleep") 50 | public String sleep() throws InterruptedException { 51 | log.info("{}", TraceContext.traceId()); 52 | ActiveSpan.tag("sleep,测试😁", "ok啦"); 53 | Thread.sleep(6000l); 54 | return "sleep:6s,traceId:" + TraceContext.traceId(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /01-通过Skywalking-5.x版本的源码构建并运行/Note.md: -------------------------------------------------------------------------------- 1 | # 01-通过Skywalking-5.x版本的源码构建并运行 2 | 3 | ## 参考: 4 | - [官方编译指南](https://github.com/apache/incubator-skywalking/blob/5.x/docs/en/How-to-build.md) 5 | - [芋道源码](http://www.iocoder.cn/SkyWalking/build-debugging-environment/) 6 | - [JaredTan95](https://github.com/JaredTan95/JaredTan95.github.io/issues/11) 7 | 8 | ## 源码地址:https://github.com/apache/incubator-skywalking.git 9 | 10 | ## 从GitHub下载代码编译 11 | ### 在IntelliJ IDEA中编译工程 12 | - 准备环境: git, jdk8,Maven 13 | - `git clone https://github.com/apache/incubator-skywalking.git` 14 | - `cd incubator-skywalking/` 15 | - `git checkout -b 5.x` 16 | - `git submodule init` 17 | - `git submodule update` 18 | - `mvn clean package -DskipTests` 19 | - 将`/incubator-skywalking/apm-protocol/apm-network/target/generated-sources/protobuf`目录下面`grpc-java`和`java`目录右键设置为`Generated Rources Root`. 20 | - 将`apm-collector/apm-collector-remote/apm-remote-grpc-provider/target/generated-sources/protobuf`目录下面`grpc-java`和`java`目录右键设置为`Generated Rources Root`. 21 | 22 | ## Elasticsearch 启动: 23 | [https://github.com/JaredTan95/skywalking-docker/blob/master/elasticsearch-Zone-Asia-SH/5.6.10/README.md](https://github.com/JaredTan95/skywalking-docker/blob/master/elasticsearch-Zone-Asia-SH/5.6.10/README.md) 24 | 25 | ## Skywalking 相关配置说明 26 | ``` 27 | #cluster: 28 | # zookeeper: 29 | # hostPort: localhost:2181,localhost:2182 #zookeeper集群地址 30 | # sessionTimeout: 100000 31 | ``` 32 | 33 | ``` 34 | configuration: 35 | default: 36 | #namespace: xxxxx 37 | # alarm threshold 38 | applicationApdexThreshold: 2000 #应用性能指数阀值,Apdex含义请参考如下 39 | serviceErrorRateThreshold: 10.00 #服务错误率阀值 40 | serviceAverageResponseTimeThreshold: 2000 #服务平均响应时间阀值 41 | instanceErrorRateThreshold: 10.00 #实例错误率阀值 42 | instanceAverageResponseTimeThreshold: 2000 #实例平均响应时间阀值 43 | applicationErrorRateThreshold: 10.00 #应用错误率阀值 44 | applicationAverageResponseTimeThreshold: 2000 #应用平均响应时间阀值 45 | # thermodynamic 46 | thermodynamicResponseTimeStep: 50 #热力图响应时间 47 | thermodynamicCountOfResponseTimeSteps: 40 #热力图的响应时间步长数量 48 | # max collection's size of worker cache collection, setting it smaller when collector OutOfMemory crashed. 49 | workerCacheMaxSize: 10000 #最大工作缓存数量 50 | 51 | # Apdex 52 | # 性能指数: 53 | # Apdex(Application Performance Index)是一个国际通用标准, 54 | # Apdex 是用户对应用性能满意度的量化值。它提供了一个统一的测量和报告用户体验的方法, 55 | # 把最终用户的体验和应用性能作为一个完整的指标进行统一度量。 56 | # 如何计算 Apdex:基于“响应性”,Apdex 定义了 3 个用户满意度区间( OneAPM 默认定义的 T 值为 0.5 秒): 57 | # 满意:这样的响应时间让用户感到很愉快,响应时间少于 T 秒钟。 58 | # 容忍:慢了一点,但还可以接受,继续这一应用过程,响应时间 T~4T 秒。 59 | # 失望:太慢了,受不了了,用户决定放弃这个应用,响应时间超过 4T 秒。 60 | ``` 61 | 62 | ``` 63 | storage: 64 | elasticsearch: 65 | clusterName: elasticsearch #Elasticsearch集群名称,默认为elasticsearch 66 | clusterTransportSniffer: false 67 | clusterNodes: localhost:9300 #Elasticsearch连接,默认localhost:9300 68 | indexShardsNumber: 2 69 | indexReplicasNumber: 0 70 | highPerformanceMode: true 71 | # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html 72 | bulkActions: 2000 # Execute the bulk every 2000 requests 73 | bulkSize: 20 # flush the bulk every 20mb 74 | flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests 75 | concurrentRequests: 2 # the number of concurrent requests 76 | # Set a timeout on metric data. After the timeout has expired, the metric data will automatically be deleted. 77 | traceDataTTL: 90 #追踪数据滚动删除周期,默认90分钟 78 | minuteMetricDataTTL: 90 #分钟监控数据滚动删除周期,默认90分钟 79 | hourMetricDataTTL: 36 #小时监控数据滚动删除周期,默认36小时 80 | dayMetricDataTTL: 45 #天监控数据滚动删除周期,默认45天 81 | monthMetricDataTTL: 18 #月监控数据滚动删除周期,默认18个月 82 | ``` 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | --------------------------------------------------------------------------------