Skywalking 集成与部署

567 阅读2分钟

SpringCloud 集成 skywalking

skywalking 的 maven 依赖,建议放到 SpringCloud 的顶层 pom.xml 文件里面

<!-- 版本参数 -->
<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    <mysql.version>8.0.23</mysql.version>
    <mybatis.version>2.3.2</mybatis.version>
    <skywalking.version>8.8.0</skywalking.version>
</properties>

<dependency>
	<groupId>org.apache.skywalking</groupId>
	<artifactId>apm-toolkit-trace</artifactId>
	<version>${skywalking.version}</version>
</dependency>

<!-- skywalking 日志采集依赖 -->
<dependency>
	<groupId>org.apache.skywalking</groupId>
	<artifactId>apm-toolkit-logback-1.x</artifactId>
	<version>${skywalking.version}</version>
</dependency>

logback-spring.xml 日志配置文件新增配置

<!-- skywalking 日志采集 -->
<appender name="grpc-log" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] %level [%thread] %logger{60} [%file:%line]: %msg%n</Pattern>
        </layout>
    </encoder>
</appender>

<root level="info">
    <!-- skywalking 追加日志配置 -->
    <appender-ref ref="grpc-log"/>
</root>

SpringBoot 应用启动时新增 VM 启动参数

-javaagent:D:/develop/skywalking-agent/skywalking-agent.jar # skywalking-agent 磁盘路径
-Dskywalking.agent.service_name=${服务名称}
-Dskywalking.collector.backend_service=${skywalking 的服务 IP 地址}:11800

docker-compose 部署 skywalking

.env

# 网络名称前缀
COMPOSE_PROJECT_NAME=skywalking
# 挂载目录前缀
MOUNT_PREFIX=/opt

docker-compose.yml

services:
  # SpringCloud 配置中心
  nacos:
    image: nacos/nacos-server:2.0.2
    container_name: nacos
    environment:
      - MODE=standalone
    ports:
      - "8848:8848"
      # - "9848:9848" # spring-cloud-alibaba-dependencies 2.2.7.RELEASE 及以上需开放的端口号
    networks:
      - skywalking

  # 非必要,如果业务需求有的话
  mysql:
    image: mysql:8.0.23
    container_name: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - "3306:3306"
    volumes:
      - ${MOUNT_PREFIX}/mysql/conf/my.cnf:/etc/mysql/my.cnf
      - ${MOUNT_PREFIX}/mysql/data:/var/lib/mysql
      - ${MOUNT_PREFIX}/mysql/logs:/logs
    networks:
      - skywalking
    command: --lower-case-table-names=1

  elasticsearch:
    image: elasticsearch:7.6.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    mem_limit: 1g
    ports:
      - "9200:9200"
    networks:
      - skywalking
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"]
      interval: 5s      # 每 10 秒检查一次
      timeout: 5s       # 5 秒内没有响应则视为失败
      retries: 5        # 重试 5 次后视为失败
      start_period: 10s # 容器启动后等待 20 秒再开始健康检查

  oap:
    image: apache/skywalking-oap-server:8.8.1
    container_name: skywalking-oap
    environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
    ports:
      - "11800:11800"
      - "12800:12800"
    depends_on:
      elasticsearch:
        condition: service_healthy
    networks:
      - skywalking

  ui:
    image: apache/skywalking-ui:8.8.1
    container_name: skywalking-ui
    environment:
      SW_OAP_ADDRESS: http://skywalking-oap:12800
      SW_LANG: zh-CN
    ports:
      - "8080:8080"
    networks:
      - skywalking

networks:
  skywalking:
    driver: bridge

拓展:skywalking 自定义 traceId

从官网下载 skywalking 源代码,此处是 8.8.0 版本

位于 skywalking-java-agent\apm-sniffer\apm-agent-core\src\main\java\org\apache\skywalking\apm\agent\core\context\ids\GlobalIdGenerator.java
其中 generate() 方法就是 traceId 的生成策略
修改后打包整个项目(必须右键顶层 pom.xml 进行 package),会生成一个 skywalking-agent 文件夹
将 skywalking-agent 替换掉原来的目录即可