Java Agent 服务器探针

参考官网给出的帮助 Setup java agent,我们需要使用官方提供的探针为我们达到监控的目的,按照实际情况我们需要实现三种部署方式

  • IDEA 部署探针
  • Java 启动方式部署探针(我们是 Spring Boot 应用程序,需要使用 java -jar 的方式启动应用)
  • Docker 启动方式部署探针(待研究补充)
    • 使用官方提供的基础镜像
      • 查看官方 docker hub 提供的基础镜像,只需要在你构建服务镜像是 From 这个镜像即可,直接集成到 Jenkins 中可以更加方便
    • 将 agent 包构建到已经存在的基础镜像中
      • 下载 oracle jdk
      • 下载 skywalking 官方发行包,并解压
      • 通过以下 dockerfile 构建基础镜像
      • 这里由于 alpine 是基于mini lib 的,但是 java 需要 glibc ,所以加入了 glibc 相关的东西,最后构建出的镜像大小在 490M 左右,应为加了挺多命令还是有点大,仅供参考,同样构建出的镜像也可以直接配置到 jenkins 中。
  1. FROM alpine:3.8
  2. ENV LANG=C.UTF-8
  3. RUN set -eux && \
  4. apk update && apk upgrade && \
  5. wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&\
  6. wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk &&\
  7. apk --no-cache add unzip vim curl git bash ca-certificates glibc-2.30-r0.apk file && \
  8. rm -rf /var/lib/apk/* &&\
  9. mkdir -p /usr/skywalking/agent/
  10. # A streamlined jre
  11. ADD jdk1.8.0_221/ /usr/java/jdk1.8.0_221/
  12. ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/
  13. # set env
  14. ENV JAVA_HOME /usr/java/jdk1.8.0_221
  15. ENV PATH ${PATH}:${JAVA_HOME}/bin
  16. # run container with base path:/
  17. WORKDIR /
  18. CMD bash

探针文件在 apache-skywalking-apm-bin/agent 目录下

skyWalking_agent.png

IDEA 部署探针

继续之前的案例项目,如在nacos-service-consumer 工程里新建工程包,并将 agent 整个目录拷贝进来

skyWalking_agent_integration_idea.png

修改项目的 VM 运行参数,点击菜单栏中的 Run -> EditConfigurations...,此处我们以 nacos-provider 项目为例,修改参数如下

  1. -javaagent:D:\Workspace\Others\hello-spring-cloud-alibaba\hello-spring-cloud-external-skywalking\agent\skywalking-agent.jar
  2. -Dskywalking.agent.service_name=nacos-provider
  3. -Dskywalking.collector.backend_service=localhost:11800

skyWalking_agent_idea_run.png

其中

  1. -javaagent:用于指定探针路径
  2. -Dskywalking.agent.service_name:用于重写 agent/config/agent.config 配置文件中的服务名
  3. -Dskywalking.collector.backend_service:用于重写 agent/config/agent.config 配置文件中的服务地址

Java 启动方式

  1. java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=nacos-provider -Dskywalking.collector.backend_service=localhost:11800 -jar yourApp.jar

测试监控

启动 nacos-provider 项目,通过观察日志可以发现,已经成功加载探针
skyWalking_agent_idea_run_result.png

访问之前写好的接口 http://localhost:8103/pki-nacos-consumer/sayHi 之后再刷新 SkyWalking Web UI,你会发现 Service 与 Endpoint 已经成功检测到了

skyWalking_dashboard_overview.png

skyWalking_dashboard_service_locations.png

至此,表示 SkyWalking 链路追踪配置成功

SkyWalking Trace 监控

SkyWalking 通过业务调用监控进行依赖分析,提供给我们了服务之间的服务调用拓扑关系、以及针对每个 Endpoint 的 Trace 记录

  • 代码新增手动trace 追踪点
    引入相关依赖
  1. //open tracing 手动探针
  2. compile 'org.apache.skywalking:apm-toolkit-trace:6.4.0'

示例代码

  1. @RestController
  2. @Slf4j
  3. @RequestMapping(value = "/pki-nacos-provider")
  4. public class HelloProviderController {
  5. @GetMapping("/sayHi")
  6. //对任何需要追踪的方法,使用 @Trace 标注,则此方法会被加入到追踪链中。
  7. @Trace()
  8. public String sayHi() {
  9. //在被追踪的方法中自定义 tag.
  10. //ActiveSpan.tag("my_tag", "my_value");
  11. ActiveSpan.tag("provider_say_hi", "call sayHi()");
  12. return helloServiceProviderService.sayHi();
  13. }
  14. }

调用链路监控

点击 追踪 菜单,进入追踪页
skyWalking_dashboard_trace.png

点击 Trace ID 展开详细信息

skyWalking_dashboard_trace_details.png

skyWalking_dashboard_trace_tags_details.png

上图展示了一次正常的响应,总响应时间为 53ms 共有4个 Span(基本工作单元,表示一次完整的请求,包含响应,即请求并响应)

Span /pki-nacos-consumer/sayHi 说明如下:

Duration:响应时间 53 毫秒
component:组件类型为 SpringMVC
url:请求地址
http.method:请求类型

自定义的trace endpoint查看

skywalking_dashboard_trace_tags_details_selfdefine.png

服务性能指标监控

点击 `服务 菜单,进入服务性能指标监控页skyWalking_dashboard_service_overview.png

选择希望监控的服务
skyWalking_dashbaord_service_node_detail.png

  • 名称:服务名词
  • 类型: 服务的框架
  • Avg SLA: 服务可用性(主要是通过请求成功与失败次数来计算)
  • CPM: 每分钟调用次数
  • Avg Response Time: 平均响应时间
  • Latency:延迟时间

可选插件配置

trace ignore 配置

  • 官方文档
  • 该插件用于自定义需要忽视追踪的请求
  • 选用插件apm-trace-ignore-plugin
    • 确保该插件在/agent/plugins目录下
    • 原本插件位置位于/agent/optional-plugins目录下
  • 添加配置

    • 新增apm-trace-ignore-plugin.config配置文件,置于/agent/config目录下

      • 该配置会忽视所有/actuator开头的请求config trace.ignore_path=/actuator/**
    • 多个请求通过逗号连接config trace.ignore_path=/your/path/1/**,/your/path/2/**