监控接入

  • Agent 收集 Trace 数据
  • Agent 发送 Trace 数据给 Collector
  • Collector 接收 Trace 数据
  • Collector 存储 Trace 数据到存储器,例如,数据库

一. Java Agent

* Java Agent 配置

  1. # 当前的应用编码,最终会显示在webui上。
  2. # 建议一个应用的多个实例,使用有相同的application_code。请使用英文
  3. agent.application_code=Your_ApplicationName
  4. # 每三秒采样的Trace数量
  5. # 默认为负数,代表在保证不超过内存Buffer区的前提下,采集所有的Trace
  6. # agent.sample_n_per_3_secs=-1
  7. # 设置需要忽略的请求地址
  8. # 默认配置如下
  9. # agent.ignore_suffix=.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg
  10. # 探针调试开关,如果设置为true,探针会将所有操作字节码的类输出到/debugging目录下
  11. # skywalking团队可能在调试,需要此文件
  12. # agent.is_open_debugging_class = true
  13. # 对应 Collector的config/application.yml 配置文件中 agent_server/jetty/port 配置内容
  14. # 例如:
  15. # 单节点配置:SERVERS="127.0.0.1:8080"
  16. # 集群配置:SERVERS="10.2.45.126:8080,10.2.45.127:7600"
  17. collector.servers=127.0.0.1:10800
  18. # 日志文件名称前缀
  19. logging.file_name=skywalking-agent.log
  20. # 日志文件最大大小
  21. # 如果超过此大小,则会生成新文件。
  22. # 默认为300M
  23. logging.max_file_size=314572800
  24. # 日志级别,默认为DEBUG。
  25. logging.level=DEBUG
  • Java Agent 启动方式
  1. # JAR File 或 Spring Boot, 添加 -javaagent 参数
  2. java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar /path/to/xxx.jar
  3. # Linux Tomcat 7,Tomcat 8, tomcat/bin/catalina.sh
  4. CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
  5. # Jetty, 在 {JETTY_HOME}/start.ini 配置文件中添加以下内容
  6. --exec # 去掉前面的井号取消注释
  7. -javaagent:<skywalking-agent-path>

1. JAVA Agent 自动代理插件列表

1.1 关闭插件

  1. 删除对应的 plugins 列表即可
  2. +-- skywalking-agent
  3. +-- activations
  4. apm-toolkit-log4j-1.x-activation.jar
  5. apm-toolkit-log4j-2.x-activation.jar
  6. apm-toolkit-logback-1.x-activation.jar
  7. ...
  8. +-- config
  9. agent.config
  10. +-- plugins
  11. apm-dubbo-plugin.jar
  12. apm-feign-default-http-9.x.jar
  13. apm-httpClient-4.x-plugin.jar
  14. .....
  15. skywalking-agent.jar

1.2 可选插件

  1. 允许在Spring上下文中追踪带有@Bean @Service@Component@Repository注解的bean的所有方法
  2. 为什么这个插件是可选的? Spring上下文中追踪所有方法会创建很多的span,也会消耗更多的CPU,内存和网络。 当然你希望包含尽可能多的span,但请确保你的系统有效负载能够支持这些。
  1. 由于OracleResinLicense,这些插件无法在Apache发行版中提供。
  2. 我们应该如何在本地构建这些可选插件?
  3. Resin 3: 下载Resin 3.0.9 并且把jar放在/ci-dependencies/resin-3.0.9.jar
  4. Resin 4: 下载Resin 4.0.41 并且把jar放在/ci-dependencies/resin-4.0.41.jar
  5. Oracle: 下载Oracle OJDBC-14 Driver 10.2.0.4.0 并且把jar放在/ci-dependencies/ojdbc14-10.2.0.4.0.jar
  1. 此插件的目的是过滤预期被跟踪系统忽略的端点。
  2. 您可以设置多个URL路径模式,不会跟踪匹配这些模式的端点。
  3. 当前的匹配规则遵循Ant Path的比赛风格,像/path/*,/path/**,/path/?。
  4. 复制apm-trace-ignore-plugin-x.jaragent/plugins,重新启动agent可以影响插件。

2. Application Toolkit

  • Application Toolkit 是由 Skywalking APM 提供的库的集合
  • 应用程序和远程 APM 代理之间建立桥梁

2.1 OpenTracing Java API

  1. <dependency>
  2. <groupId>org.apache.skywalking</groupId>
  3. <artifactId>apm-toolkit-opentracing</artifactId>
  4. <version>{project.release.version}</version>
  5. </dependency>
  6. # 使用我们的 OpenTracing tracer 实现
  7. Tracer tracer = new SkywalkingTracer();
  8. Tracer.SpanBuilder spanBuilder = tracer.buildSpan("/yourApplication/yourService");

2.2 SkyWalking 本机 Java API

  1. <dependency>
  2. <groupId>org.apache.skywalking</groupId>
  3. <artifactId>apm-toolkit-trace</artifactId>
  4. <version>${skywalking.version}</version>
  5. </dependency>
  6. import TraceContext;
  7. modelAndView.addObject("traceId", TraceContext.traceId());
  8. ActiveSpan.tag("my_tag", "my_value");

2.3 日志中打印跟踪上下文(例如traceId)

  1. log4j-2 案例如下
  2. Dependency the toolkit, such as using maven or gradle
  3. <dependency>
  4. <groupId>org.apache.skywalking</groupId>
  5. <artifactId>apm-toolkit-log4j-2.x</artifactId>
  6. <version>{project.release.version}</version>
  7. </dependency>
  8. Config the [%traceId] pattern in your log4j2.xml
  9. <Appenders>
  10. <Console name="Console" target="SYSTEM_OUT">
  11. <PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
  12. </Console>
  13. </Appenders>
  14. 当使用-javaagent激活空中行走跟踪器时,如果存在traceId, log4j2将输出traceId。如果跟踪器处于非活动状态,则输出TID: N/A

2.4 手动跨线程解决方案 API

二. 接入第三方调用链监控

1. zipkin

  1. 修改配置文件 config/application.yml 打开如下注释, 重启服务
  2. receiver_zipkin:
  3. default:
  4. host: ${SW_RECEIVER_ZIPKIN_HOST:0.0.0.0}
  5. port: ${SW_RECEIVER_ZIPKIN_PORT:9411}
  6. contextPath: ${SW_RECEIVER_ZIPKIN_CONTEXT_PATH:/}