SkyWalking全平台部署指南:Windows、Linux与Docker环境下的安装配置与实践

SkyWalking

SkyWalking介绍

SkyWalking适用于分布式系统的应用程序性能监控(Application Performance Monitoring,即APM)工具,专为微服务、云原生和基于容器 (Kubernetes) 的架构而设计。

官网:https://skywalking.apache.org/

GitHub:https://github.com/apache/skywalking

官网文档:https://skywalking.apache.org/docs/main/v9.4.0/readme/

中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/

官方提供控制台演示:

arduino 复制代码
演示地址:http://demo.skywalking.apache.org/ 

账号:skywalking 

密码:skywalking

skywalking架构原理

Skywalking是一种分布式追踪系统,它的原理是在应用程序中嵌入Skywalking Agent,Agent在运行时会自动注入并收集上下文数据,然后将这些数据发送到Skywalking Collector。Collector接收到数据后会将其存储起来,并生成相应的调用链、度量和报告等信息,供开发人员或运维人员进行监控和分析。Skywalking还支持多种语言和框架,可与常见的云原生工具集集成,如Kubernetes、Istio等。

Skywalking中有多个角色:

arduino 复制代码
Skywalking Agent:嵌入在应用程序中的组件,负责收集和注入上下文数据

Skywalking Collector:接收从 Agent 发送的数据并存储起来,生成调用链、度量和报告等信息

Skywalking Web UI:提供一个用户友好的 Web 界面,以显示应用程序的监控数据和分析结果

Skywalking OAP Server:可选组件,用于扩展 Collector 的功能并与其他数据源集成

数据库:Skywalking 还需要使用一个数据库来保存其元数据和报表数据

集成的组件:Skywalking 还可以与常见的云原生工具集进行集成,如 Kubernetes、Istio等

Skywalking采用分布式追踪技术,其底层原理主要涉及数据收集、传输和存储,以及调用链的构建和服务性能度量。

css 复制代码
Skywalking Agent:Skywalking Agent嵌入在应用程序中,可以自动收集和注入上下文数据

数据传输:Skywalking Agent将收集到的数据通过HTTP、gRPC等协议发送到Skywalking Collector中。Collector接收到数据后进行处理存储,并通过Web UI提供用户可视化展示

Trace ID:Skywalking采用唯一的Trace ID标识一次调用链,整个调用链的所有节点都使用相同的Trace ID

Span:表示一次服务调用单元,包含一个开始时间和结束时间,每个Span都有属于自己的Trace ID

Trace Segment:一个完整的调用链称为Trace Segment,包含多个Span的集合。Trace Segment会在整个调用链结束后发送到 Collector进行存储和归档

Metrics:Skywalking还支持对服务性能指标的监控和度量,例如延迟、吞吐量等

Windos环境下的安装

确认环境

在开始安装SkyWalking之前,请确认系统中已安装Java 8或更高版本

java 复制代码
java -version

下载SkyWalking Apm与Agent

下载地址:https://skywalking.apache.org/downloads/

注意:

应该在skywalking9版本以后将agent进行了单独拆分,因此若要使用9版本以后的,需要下载apm和agent两个压缩包。具体以官方为准。

Apm下载

java 复制代码
wget https://www.apache.org/dyn/closer.cgi/skywalking/9.4.0/apache-skywalking-apm-9.4.0.tar.gz

wget https://archive.apache.org/dist/skywalking/9.2.0/apache-skywalking-apm-9.2.0.tar.gz

Agent下载

java 复制代码
wget https://www.apache.org/dyn/closer.cgi/skywalking/java-agent/8.15.0/apache-skywalking-java-agent-8.15.0.tgz

wget https://archive.apache.org/dist/skywalking/java-agent/8.13.0/apache-skywalking-java-agent-8.13.0.tgz

注意:截至当前时间,使用最新版本9.4,发现在Windos环境下死活启动不起来,且无任何日志作为排查,故降低2个版本,使用9.2版本。

目录结构说明

skywalking-apm包目录结构如下: skywalking-java-agent包目录结构如下:

启动SkyWalking

双击bin目录下的oapService.bat

启动Skywalking-Collector服务,追踪信息收集器,通过gRPC/Http收集客户端的采集信息 ,Http默认端口12800,gRPC默认端口11800。

双击bin目录下的webappService.bat

启动Skywalking-Webapp服务,管理平台页面,默认是8080端口

双击bin目录下的startup.bat

同时启动Skywalking-Collector服务与Skywalking-Webapp服务

这里同时启动两个服务 启动后将出现如下2个窗口 访问:http://127.0.0.1:8080/

Skywalking配置

Skywalking的配置在刚开始使用时,着重关注以下几个文件:

arduino 复制代码
skywalking-apm/config/application.yml

skywalking-apm/webapp/webapp.yml

skywalking-java-agent/config/agent.config

application.yml

application.yml关注以下几个点:

复制代码
cluster:Skywalking的集群配置

core:Skywalking的核心配置

storage:Skywalking的数据存储方式

webapp.yml

webapp.yml文件是针对Skywalking-Webapp服务,即管理平台页面做配置

java 复制代码
server:
  port: 8080

spring:
  cloud:
    gateway:
      routes:
        - id: oap-route
          uri: lb://oap-service
          predicates:
            - Path=/graphql/**
    discovery:
      client:
        simple:
          instances:
            oap-service:
              - uri: http://127.0.0.1:12800
            # - uri: http://<oap-host-1>:<oap-port1>
            # - uri: http://<oap-host-2>:<oap-port2>

  mvc:
    throw-exception-if-no-handler-found: true

  web:
    resources:
      add-mappings: true

management:
  server:
    base-path: /manage

agent.config

Agent配置参数,以java-agent对应的配置文件参数说明,以下是一些常见参数

yml 复制代码
# 在skywalking上显示的服务名,一个服务一个名称,会在界面的拓补图中显示
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}

# agent的命名空间
agent.namespace=${SW_AGENT_NAMESPACE:}

# 每三秒追踪链采样数量,负数表示尽可能的多采集,默认为-1
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}

# 配置认证,需要和backend服务中的认证配置相符
agent.authentication=${SW_AGENT_AUTHENTICATION:}

# 配置在单个segment中出现的span的最大数量,skywalking将用这个配置来估计应用的内存开销
agent.span_limit_per_segment=${SW_AGENT_SPAN_LIMIT:300}

# 配置哪些资源不会被skywalking所捕获,设置需要忽略的请求地址,默认配置如下
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}

# 探针调试开关,如果设置为true,探针会将所有操作字节码的类输出  到/debugging目录下
agent.is_open_debugging_class=${SW_AGENT_OPEN_DEBUG:false}

# 配置collector的地址,多个地址之间以","隔开
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

# 日志文件名称前缀
logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log}

# 日志文件最大大小,默认为300M。如果超过此大小,则会生成新文件
logging.max_file_size=${SW_LOGGING_MAX_FILE_SIZE:314572800}

# 日志级别,默认为INFO
logging.level=${SW_LOGGING_LEVEL:INFO}

# mysql插件配置
# 配置追踪sql参数,这样可以在sql错误的时候查看是否是参数所引起的
plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS:false}

程序接入SkyWalking实现监控

配置参数说明

java 复制代码
# SkyWalking Agent配置参数说明

# skywalking的collector服务的IP及端口
-Dskywalking.collector.backend_service=127.0.0.1:11800

# skywalking‐agent.jar的路径
-javaagent:D:\Development\skywalking-java-agent\skywalking-agent.jar

# 在skywalking上显示的服务名
-Dskywalking.agent.service_name=Agent-Test

IDEA接入

修改项目启动的VM运行参数

Java命令启动

注意:-javaagent配置参数一定要在-jar参数之前

java 复制代码
java -javaagent:D:\Development\skywalking-java-agent\skywalking-agent.jar -Dskywalking.agent.service_name=Agent-Test -Dskywalking.collector.backend_service=localhost:11800 -jar APP.jar

查看监控信息

访问管理平台页面即可看到监控信息

数据存储方式

SkyWalking数据存储方式默认是H2内存数据库,如果重启SkyWalking,数据则都会丢失。可以选择将数据持久化存放在mysql、es中等。更改数据存储方式,需要修改config/application.yml

使用MySQL存储数据

1.修改数据存储方式,这里指定:mysql存储

java 复制代码
storage:
  selector: ${SW_STORAGE:mysql}

2.配置MySQL的连接信息 修改MySQL连接信息,注意:需要创建相应数据库,如创建swtest数据库

java 复制代码
  mysql:
    properties:
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true"}
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}

3.下载MySQL驱动jar包到oap-libs目录下

下载地址:https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar

4.双击bin目录下的startup.bat,启动skywalking

启动成功后,数据库中自动生成相应的表

使用elasticsearch存储数据

当Skywalking数据存储量比较大,推荐使用elasticsearch

1.安装Elasticsearch与Elasticsearch-HQ

参考:https://blog.csdn.net/qq_38628046/article/details/126736275

2.配置存储方式,指定使用:elasticsearch

java 复制代码
storage:
  selector: ${SW_STORAGE:elasticsearch}
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:IP:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
    connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}
    socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
    responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}
    numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}

3.双击bin目录下的startup.bat,启动skywalking

4.访问Elasticsearch-HQ

访问Elasticsearch-HQ,发现已生成相关索引

Linux环境下的安装

Linux的安装方式实则与Window安装方式类似,都是解压、配置、启动,只是启动执行脚本不一样。其执行 oapService.shwebappService.shstartup.sh 等脚本来启动。

Docker部署

安装elasticsearch

java 复制代码
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms250m -Xmx512m" -d elasticsearch:7.4.0

安装Skywalking-UI

java 复制代码
 docker run --name skywalking-oap --restart always -d -p 11800:11800 -p 12800:12800  apache/skywalking-oap-server:9.2.0

使用ES作为存储

java 复制代码
docker run --name skywalking-oap --restart always -d -p 11800:11800 -p 12800:12800 --link elasticsearch:es  -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=es:9200 apache/skywalking-oap-server:9.2.0

安装Skywalking-UI

java 复制代码
docker run --name skywalking-ui -d -p 8080:8080 --link skywalking-oap:oap  -e SW_OAP_ADDRESS=oap :12800 --restart always apache/skywalking-ui 

docker-compose部署

编辑docker-compose.yml文件

java 复制代码
version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:7.4.0
    container_name: elasticsearch
    restart: always
    privileged: true
    hostname: elasticsearch
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    networks:
      - skywalking
    ulimits:
      memlock:
        soft: -1
        hard: -1
  elasticsearch-hq:
    image: elastichq/elasticsearch-hq
    container_name: elasticsearch-hq
    restart: always
    privileged: true
    hostname: elasticsearch-hq
    ports:
      - 5000:5000
    environment:
      - TZ=Asia/Shanghai
    networks:
      - skywalking
  oap:
    image: apache/skywalking-oap-server:9.2.0
    container_name: oap
    hostname: oap
    privileged: true
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      TZ: Asia/Shanghai
    volumes:
      - ./config/alarm-settings.yml:/skywalking/config/alarm-settings.yml
    networks:
      - skywalking
  ui:
    image: apache/skywalking-ui:8.9.0
    container_name: ui
    privileged: true
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: oap:12800
      TZ: Asia/Shanghai
    networks:
      - skywalking
 
networks:
  skywalking:
    driver: bridge

命令一键启动:

java 复制代码
docker-compose up -d
相关推荐
炎码工坊2 分钟前
容器运行时保护:用Falco构建云原生安全防线
网络安全·微服务·云原生·系统安全·安全架构
18你磊哥35 分钟前
Docker Compose部署Spring Cloud 微服务系统
spring cloud·docker·微服务
掘金-我是哪吒3 小时前
分布式微服务系统架构第152集:JavaPlus技术文档平台日更
分布式·微服务·云原生·架构·系统架构
爱吃芝麻汤圆6 小时前
分布式——分布式系统设计二——幂等性详解
分布式
qq_441996056 小时前
【 感知集群】大规模分布式基础设施的AI赋能蓝图
人工智能·分布式
GeminiJM6 小时前
分布式选举算法<一> Bully算法
分布式·算法
云和恩墨6 小时前
国网某省电力借zDBM重构数据库容灾防线,400TB核心资产迈入分布式实时保护时代
数据库·分布式·重构
AAIshangyanxiu6 小时前
WRF-Hydro分布式水文模型:洪水预报、水资源管理与规划、生态水文研究、气候变化影响评估、流域综合管理、水电工程规划与运行
分布式·水文模型·水文气象·wrf-hydro·气象水文
爱吃芝麻汤圆6 小时前
分布式——分布式一致性算法(共识算法)
分布式·算法·共识算法