SkyWalking【一、部署和配置】
一、部署
skywalking-apm-x.y.z.tar.gz → 这是 服务端(OAP+UI)
目录是 bin/、config/(OAP 的 config)、webapp/
├── bin/ # 启动脚本(startup.sh/oapService.sh/webappService.sh)
├── config/ # OAP配置(application.yml/alarm-settings.yml)
├── oap-libs/ # OAP依赖包
├── webapp/ # UI资源+webapp.yml
└── agent/ # Java探针(skywalking-agent.jar)
skywalking-java-agent-x.y.z.tar.gz → 这才是 客户端探针(Java Agent)
skywalking-java-agent/
├── skywalking-agent.jar
├── config/
│ └── agent.config
├── plugins/
└── logs/
一、核心组件与环境要求
1. 核心组件
- OAP Server:数据收集、分析、存储(核心),默认端口 11800(gRPC)、12800(HTTP)。
- UI:可视化控制台,默认端口 8080。
- Agent:应用探针(Java/Go/Node.js等),上报链路数据至OAP。
2. 环境要求
- JDK:11/17/21(OAP依赖)。
- 内存:≥4GB(生产建议8GB+)。
- 存储:支持 Elasticsearch7+(推荐)、BanyanDB、H2(默认,仅测试)。
- 系统:Linux(推荐)、Windows、macOS。
二、二进制包部署(Linux为例)
1. 下载与解压
# 下载(以9.7.0为例)
wget https://archive.apache.org/dist/skywalking/9.7.0/apache-skywalking-apm-9.7.0.tar.gz
# 解压
tar -zxvf apache-skywalking-apm-9.7.0.tar.gz
cd apache-skywalking-apm-9.7.0
2. 目录结构
├── bin/ # 启动脚本(startup.sh/oapService.sh/webappService.sh)
├── config/ # OAP配置(application.yml/alarm-settings.yml)
├── oap-libs/ # OAP依赖包
├── webapp/ # UI资源+webapp.yml
└── agent/ # Java探针(skywalking-agent.jar)
三、核心配置详解(config/application.yml)
1. 基础配置
# 集群节点名
cluster:
selector: ${SW_CLUSTER:standalone} # 单机:standalone;集群:zookeeper/nacos等
# 存储配置(关键!默认H2仅测试)
storage:
selector: ${SW_STORAGE:h2} # 改为elasticsearch7
elasticsearch7:
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200} # ES地址
indexShardsNumber: 2 # 分片数
indexReplicasNumber: 0 # 副本数(单机ES设0)
recordDataTTL: 7 # 链路数据保留7天
metricsDataTTL: 30 # 指标数据保留30天
# OAP端口(默认)
core:
gRPCPort: 11800
restPort: 12800
2. UI配置(webapp/webapp.yml)
server:
port: 8080 # UI访问端口
collector:
path: /
oap:
address: 127.0.0.1:12800 # 连接OAP的HTTP端口
四、启动方式
1. 一键启动(OAP+UI,推荐)
# Linux/Mac
./bin/startup.sh
# Windows(cmd)
bin\startup.bat
2. 分开启动(便于日志排查)
# 1. 启动OAP
./bin/oapService.sh
# 日志:logs/oap.log
# 2. 启动UI
./bin/webappService.sh
# 日志:logs/webapp.log
3. 启动验证
- 查看进程:
ps -ef | grep skywalking - 端口监听:
netstat -tuln | grep 11800/12800/8080 - 访问UI:浏览器打开
http://localhost:8080
五、Docker部署(快速生产)
1. Docker Compose(推荐)
version: '3'
services:
elasticsearch:
image: elasticsearch:7.17.0
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- esdata:/usr/share/elasticsearch/data
oap:
image: apache/skywalking-oap-server:9.7.0
depends_on:
- elasticsearch
ports:
- "11800:11800"
- "12800:12800"
environment:
SW_STORAGE: elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
TZ: Asia/Shanghai
ui:
image: apache/skywalking-ui:9.7.0
depends_on:
- oap
ports:
- "8080:8080"
environment:
SW_OAP_ADDRESS: http://oap:12800
TZ: Asia/Shanghai
volumes:
esdata:
2. 启动命令
docker-compose up -d
六、Java应用接入(Agent配置)
1. 探针核心配置(agent/config/agent.config)
# 应用服务名(UI显示)
agent.service_name=order-service
# OAP地址(gRPC端口11800)
collector.backend_service=127.0.0.1:11800
# 采样率(生产0.1~0.5,减少数据量)
agent.sample_rate=1.0
# 打印SQL参数
plugin.jdbc.trace_sql_parameters=true
2. 启动应用挂载探针
java -javaagent:/path/to/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-service \
-Dskywalking.collector.backend_service=127.0.0.1:11800 \
-Dskywalking.agent.ignore_suffix=.jpg,.jpeg,.png,.gif,.bmp,.ico,.css,.js,.html,.htm,.txt,.map \
-Dskywalking.agent.ignore_path=/actuator/*,/health,/ping \
-Dskywalking.agent.trace.ignore_correlation=false \
-jar order-service.jar
七、常见问题排查
-
OAP启动失败
- 检查JDK版本(必须11+)
- 存储配置错误:确认ES集群可达,
clusterNodes配置正确 - 端口占用:
lsof -i:11800杀死占用进程
-
UI无法连接OAP
- 确认OAP的12800端口正常监听
- 检查
webapp.yml中oap.address配置正确
-
应用无数据上报
- Agent版本与OAP一致(建议同版本)
- 应用启动参数
-javaagent路径正确 - 网络连通:应用服务器能ping通OAP的11800端口
八、生产环境建议
- 集群部署:OAP至少3节点,用Nacos/Zookeeper做集群协调
- 存储选型:生产用Elasticsearch集群(3+节点),避免H2
- 资源配置:OAP堆内存
-Xms4g -Xmx4g,ES堆内存不超过物理内存50% - 安全:开启OAP gRPC/HTTP的TLS加密,Agent配置证书
二、配置详情
一、生产版 docker-compose.yml(SkyWalking 9.7.0 + ES7.17 单机/测试集群)
适配生产基础环境,时区、内存、持久化、端口、参数均优化,直接复制使用。
version: '3.8'
services:
# 存储:Elasticsearch 7.17(SkyWalking 主流适配版本)
elasticsearch:
image: elasticsearch:7.17.0
container_name: skywalking-es
restart: always
ports:
- "9200:9200"
- "9300:9300"
environment:
- TZ=Asia/Shanghai
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=false
- xpack.monitoring.enabled=false
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65535
hard: 65535
volumes:
- ./es-data:/usr/share/elasticsearch/data
- ./es-logs:/usr/share/elasticsearch/logs
networks:
- sky-net
# SkyWalking OAP 服务端
skywalking-oap:
image: apache/skywalking-oap-server:9.7.0
container_name: skywalking-oap
restart: always
depends_on:
- elasticsearch
ports:
- "11800:11800" # Agent gRPC 上报端口
- "12800:12800" # UI HTTP 交互端口
environment:
- TZ=Asia/Shanghai
# 存储指定 ES7
- SW_STORAGE=elasticsearch7
- SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
# 数据过期时间:链路7天、指标30天、告警7天
- SW_RECORD_DATA_TTL=7
- SW_METRICS_DATA_TTL=30
- SW_ALARM_DATA_TTL=7
# 关闭不必要插件,减轻负载
- SW_ENABLE_PROMETHEUS_METRICS=false
- SW_ENABLE_ZIPKIN_TRACE=false
volumes:
- ./oap-logs:/skywalking/logs
networks:
- sky-net
# SkyWalking UI 控制台
skywalking-ui:
image: apache/skywalking-ui:9.7.0
container_name: skywalking-ui
restart: always
depends_on:
- skywalking-oap
ports:
- "8080:8080"
environment:
- TZ=Asia/Shanghai
- SW_OAP_ADDRESS=http://skywalking-oap:12800
networks:
- sky-net
networks:
sky-net:
driver: bridge
启动命令
# 后台启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止
docker-compose down
二、生产版 OAP 配置文件 application.yml
适用于二进制包部署(物理机/虚拟机),替换 config/application.yml 即可,已关闭测试组件、优化存储与性能。
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
cluster:
selector: ${SW_CLUSTER:standalone}
core:
default:
# gRPC 上报端口
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
# HTTP 端口(UI/外部调用)
restPort: ${SW_CORE_REST_PORT:12800}
gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
restHost: ${SW_CORE_REST_HOST:0.0.0.0}
# 最大并发线程数,生产根据服务器配置调整
maxConcurrentCalls: ${SW_CORE_MAX_CONCURRENT_CALLS:400}
storage:
selector: ${SW_STORAGE:elasticsearch7}
elasticsearch7:
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200}
# ES 索引分片&副本,单机副本设0,集群建议1
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:3}
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
# 数据保留时长(天)
recordDataTTL: ${SW_RECORD_DATA_TTL:7}
metricsDataTTL: ${SW_METRICS_DATA_TTL:30}
alarmDataTTL: ${SW_ALARM_DATA_TTL:7}
# ES 批量提交参数,优化写入性能
bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000}
bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20}
flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10}
concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}
# 告警配置引用外部文件
alarm:
default:
ruleFilePath: alarm-settings.yml
# 关闭无用接收器,减少资源占用
receiver-sharing-server:
selector: ${SW_RECEIVER_SHARING_SERVER:default}
receiver-register:
selector: ${SW_RECEIVER_REGISTER:default}
receiver-trace:
selector: ${SW_RECEIVER_TRACE:default}
receiver-log:
selector: ${SW_RECEIVER_LOG:default}
receiver-meter:
selector: ${SW_RECEIVER_METER:default}
# 关闭 Zipkin、Prometheus 等非必要插件
zipkin:
selector: ${SW_ZIPKIN:off}
prometheus-fetcher:
selector: ${SW_PROMETHEUS_FETCHER:off}
三、生产版 UI 配置 webapp.yml
替换 webapp/webapp.yml,适配生产环境:
server:
port: 8080
tomcat:
max-threads: 200
collector:
path: /
oap:
address: 127.0.0.1:12800
四、生产版 Java Agent 配置 agent.config
路径:agent/config/agent.config,业务应用探针标准配置:
# 应用名称(UI 展示,全局唯一)
agent.service_name=${SW_AGENT_NAME:your-service-name}
# OAP 服务地址 gRPC 端口
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
# 链路采样率:生产建议 0.1 ~ 0.3,降低压力;测试用 1.0
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
agent.sample_rate=${SW_AGENT_SAMPLE_RATE:0.2}
# 日志级别
logging.level=${SW_LOGGING_LEVEL:INFO}
# 显示 SQL 语句与参数
plugin.jdbc.trace_sql_parameters=true
# 忽略指定后缀的端点(如健康检查、监控接口)
agent.ignore_suffix=.jpg,.jpeg,.png,.gif,.bmp,.ico,.css,.js,.html,.htm,.txt,.map
agent.ignore_path=/actuator/*,/health,/ping
# 跨进程链路传播
agent.trace.ignore_correlation=false
Java 应用启动示例(生产标准写法)
nohup java -server -Xms2g -Xmx2g \
-javaagent:/usr/local/skywalking/agent/skywalking-agent.jar \
-jar /usr/local/app/demo.jar > app.log 2>&1 &
OAP 开启 Nacos 动态配置(application.yml)
configuration:
selector: nacos # 启用 nacos 作为配置中心
nacos:
serverAddr: 127.0.0.1
port: 8848
group: skywalking
namespace: ""
period: 60 # 拉取间隔(秒)
五、补充生产运维要点
- 防火墙放行端口
- 9200(ES)、11800(OAP-gRPC)、12800(OAP-HTTP)、8080(UI)
- ES 优化
- 单机 ES 务必设置
discovery.type=single-node - 系统调大
vm.max_map_count=262144
- 单机 ES 务必设置
- OAP 堆内存
编辑bin/oapService.sh,修改 JVM 参数:SW_JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC" - 集群扩展
多节点 OAP 集群,在application.yml中将cluster.selector改为nacos/zookeeper并配置对应地址即可。
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/20170243

浙公网安备 33010602011771号