SkyWalking全平台部署指南:Windows、Linux与Docker环境下的安装配置与实践_skywalking安装
SkyWalking的安装以及使用教程
- SkyWalking
-
- SkyWalking介绍
- skywalking架构原理
- Windos环境下的安装
-
- 确认环境
- 下载SkyWalking Apm与Agent
- 目录结构说明
- 启动SkyWalking
- Skywalking配置
-
- application.yml
- webapp.yml
- agent.config
- 程序接入SkyWalking实现监控
-
- 配置参数说明
- IDEA接入
- Java命令启动
- 查看监控信息
- 数据存储方式
-
- 使用MySQL存储数据
- 使用elasticsearch存储数据
- Linux环境下的安装
- Docker部署
- docker-compose部署
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/
官方提供控制台演示:
演示地址:http://demo.skywalking.apache.org/ 账号:skywalking 密码:skywalking
skywalking架构原理
Skywalking是一种分布式追踪系统,它的原理是在应用程序中嵌入Skywalking Agent,Agent在运行时会自动注入并收集上下文数据,然后将这些数据发送到Skywalking Collector。Collector接收到数据后会将其存储起来,并生成相应的调用链、度量和报告等信息,供开发人员或运维人员进行监控和分析。Skywalking还支持多种语言和框架,可与常见的云原生工具集集成,如Kubernetes、Istio等。
Skywalking中有多个角色:
Skywalking Agent:嵌入在应用程序中的组件,负责收集和注入上下文数据Skywalking Collector:接收从 Agent 发送的数据并存储起来,生成调用链、度量和报告等信息Skywalking Web UI:提供一个用户友好的 Web 界面,以显示应用程序的监控数据和分析结果Skywalking OAP Server:可选组件,用于扩展 Collector 的功能并与其他数据源集成数据库:Skywalking 还需要使用一个数据库来保存其元数据和报表数据集成的组件:Skywalking 还可以与常见的云原生工具集进行集成,如 Kubernetes、Istio等
Skywalking采用分布式追踪技术,其底层原理主要涉及数据收集、传输和存储,以及调用链的构建和服务性能度量。
Skywalking Agent:Skywalking Agent嵌入在应用程序中,可以自动收集和注入上下文数据数据传输:Skywalking Agent将收集到的数据通过HTTP、gRPC等协议发送到Skywalking Collector中。Collector接收到数据后进行处理存储,并通过Web UI提供用户可视化展示Trace ID:Skywalking采用唯一的Trace ID标识一次调用链,整个调用链的所有节点都使用相同的Trace IDSpan:表示一次服务调用单元,包含一个开始时间和结束时间,每个Span都有属于自己的Trace IDTrace Segment:一个完整的调用链称为Trace Segment,包含多个Span的集合。Trace Segment会在整个调用链结束后发送到 Collector进行存储和归档Metrics:Skywalking还支持对服务性能指标的监控和度量,例如延迟、吞吐量等
Windos环境下的安装
确认环境
在开始安装SkyWalking之前,请确认系统中已安装Java 8或更高版本
java -version
下载SkyWalking Apm与Agent
下载地址:https://skywalking.apache.org/downloads/
注意:
应该在skywalking9版本
以后将agent进行了单独拆分,因此若要使用9版本以后的,需要下载apm和agent两个压缩包。具体以官方为准。
Apm下载
wget https://www.apache.org/dyn/closer.cgi/skywalking/9.4.0/apache-skywalking-apm-9.4.0.tar.gzwget https://archive.apache.org/dist/skywalking/9.2.0/apache-skywalking-apm-9.2.0.tar.gz
Agent下载
wget https://www.apache.org/dyn/closer.cgi/skywalking/java-agent/8.15.0/apache-skywalking-java-agent-8.15.0.tgzwget 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的配置在刚开始使用时,着重关注以下几个文件:
skywalking-apm/config/application.ymlskywalking-apm/webapp/webapp.ymlskywalking-java-agent/config/agent.config
application.yml
application.yml
关注以下几个点:
cluster:Skywalking的集群配置core:Skywalking的核心配置storage:Skywalking的数据存储方式
webapp.yml
webapp.yml
文件是针对Skywalking-Webapp服务,即管理平台页面做配置
server: port: 8080spring: 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://: # - uri: http://: mvc: throw-exception-if-no-handler-found: true web: resources: add-mappings: truemanagement: server: base-path: /manage
agent.config
Agent配置参数,以java-agent
对应的配置文件参数说明,以下是一些常见参数
# 在skywalking上显示的服务名,一个服务一个名称,会在界面的拓补图中显示agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}# agent的命名空间agent.namespace=${SW_AGENT_NAMESPACE:}# 每三秒追踪链采样数量,负数表示尽可能的多采集,默认为-1agent.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}# 日志级别,默认为INFOlogging.level=${SW_LOGGING_LEVEL:INFO}# mysql插件配置# 配置追踪sql参数,这样可以在sql错误的时候查看是否是参数所引起的plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS:false}
程序接入SkyWalking实现监控
配置参数说明
# 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 -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
存储
storage: selector: ${SW_STORAGE:mysql}
2.配置MySQL的连接信息
修改MySQL连接信息,注意:需要创建相应数据库,如创建swtest数据库
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
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.sh
、webappService.sh
、startup.sh
等脚本来启动。
Docker部署
安装elasticsearch
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
docker run --name skywalking-oap --restart always -d -p 11800:11800 -p 12800:12800 apache/skywalking-oap-server:9.2.0
使用ES作为存储
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
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
文件
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
命令一键启动:
docker-compose up -d