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+(推荐)、BanyanDBH2(默认,仅测试)。
  • 系统: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

七、常见问题排查

  1. OAP启动失败

    • 检查JDK版本(必须11+)
    • 存储配置错误:确认ES集群可达,clusterNodes配置正确
    • 端口占用:lsof -i:11800 杀死占用进程
  2. UI无法连接OAP

    • 确认OAP的12800端口正常监听
    • 检查webapp.ymloap.address配置正确
  3. 应用无数据上报

    • 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  # 拉取间隔(秒)

五、补充生产运维要点

  1. 防火墙放行端口
    • 9200(ES)、11800(OAP-gRPC)、12800(OAP-HTTP)、8080(UI)
  2. ES 优化
    • 单机 ES 务必设置 discovery.type=single-node
    • 系统调大 vm.max_map_count=262144
  3. OAP 堆内存
    编辑 bin/oapService.sh,修改 JVM 参数:
    SW_JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC"
    
  4. 集群扩展
    多节点 OAP 集群,在 application.yml 中将 cluster.selector 改为 nacos/zookeeper 并配置对应地址即可。
posted @ 2026-05-26 14:31  蓝迷梦  阅读(48)  评论(0)    收藏  举报