skywalking之服务器部署

一只会飞的鱼儿 3小时前 ⋅ 10 阅读
ad

在服务器上部署 Apache SkyWalking APM 9.5.0 是一个系统性的过程,下面我为你梳理了详细的步骤和关键配置要点。你可以根据这个指南,结合服务器的实际环境进行操作。

部署前准备

  1. ​环境要求​​:确保服务器已安装 ​​JDK 11 或更高版本​​。这是 SkyWalking 9.5.0 稳定运行的前提
     
  2. ​获取安装包​​:从 Apache 官网下载 SkyWalking 9.5.0 的发行版
    1. 你可以使用 wget命令直接下载到服务器:
解压安装包​​:使用以下命令解压:
tar -zxvf apache-skywalking-apm-9.5.0.tar.gz
cd apache-skywalking-apm-9.5.0

配置后端存储(OAP Server)

SkyWalking 的后端(OAP Server)负责处理数据,你需要为其配置一个数据库。对于生产环境,强烈建议使用 ​​Elasticsearch​​ 或 ​​MySQL​​ 替代默认的 H2 内存数据库
编辑配置文件 config/application.yml,修改 storage部分。以下是以 Elasticsearch 7.x 为例的配置
storage:
  selector: ${SW_STORAGE:elasticsearch}  # 存储选择器,使用elasticsearch
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}         # ES索引的命名空间,默认为空
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}  # ES集群节点地址
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}              # 协议
    user: ${SW_ES_USER:""}                # ES用户名(若设置了安全认证)
    password: ${SW_ES_PASSWORD:""}        # ES密码
    # 其他参数通常可保持默认
如果你的 Elasticsearch 集群配置了安全认证,请务必填写正确的 user和 password
mysql配置:
 storage:
  selector: ${SW_STORAGE:mysql}  # 存储选择器,使用
 mysql:
    properties:
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true&allowMultiQueries=true"}
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
      dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
      dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
      dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
      dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
    metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
    maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
    asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}

配置用户界面(UI)

Web 管理界面的配置位于webapp/application.yml。主要确认其指向正确的 OAP Server 地址和端口

serverPort: ${SW_SERVER_PORT:-8080}

# Comma seperated list of OAP addresses.
oapServices: ${SW_OAP_ADDRESS:-http://localhost:12800}

zipkinServices: ${SW_ZIPKIN_ADDRESS:-http://localhost:9412}

启动服务

配置完成后,可以启动 SkyWalking 服务。
  • ​一键启动(推荐用于首次测试)​​:执行 bin目录下的启动脚本,它会同时启动 OAP Server 和 UI。
    ./bin/startup.sh
  • ​分别启动​​:如果需要单独控制,可以分别启动。
    • 启动 OAP Server:
      ./bin/oapService.sh start
    • 启动 Web UI:
       
      ./bin/webappService.sh start # 或者 ./bin/uiService.sh start[3](@ref)
启动成功后,你可以通过 jps命令查看是否存在名为 "OAPServerStartUp" 的 Java 进程来验证 OAP Server 是否成功启动。
yulei@MacBook-Pro-2 skywalking % jps -l
64982 org.apache.skywalking.oap.server.webapp.ApplicationStartUp
18906 webfunny_manage-2.0.jar
61515 org.apache.skywalking.oap.server.starter.OAPServerStartUp

接入应用监控(Java Agent)

要让你的 Java 应用被监控,需要在启动应用时通过 -javaagent参数挂载 SkyWalking Agent。
 
java -javaagent="/path/to/skywalking-agent/skywalking-agent.jar" \ -Dskywalking.agent.service_name=your-application-name \ # 在UI上显示的服务名 -Dskywalking.collector.backend_service=your_oap_server_ip:11800 \ # OAP Server的gRPC地址 -jar your-application.jar
 
其中,/path/to/skywalking-agent/是解压包中 skywalking-agent目录的绝对路径。OAP Server 默认的 gRPC API 端口是 11800
 
验证部署
完成所有步骤后,打开浏览器,访问 http://your_server_ip:8080。如果一切正常,将看到 SkyWalking 的监控仪表盘。首次访问时,可以尝试触发一些被监控应用的请求,稍等片刻便能在 UI 上看到监控数据。
希望这份详细的指南能帮助你顺利完成部署!如果在具体配置过程中遇到问题,比如存储连接或启动报错,可以随时追问。

遇到问题:

oap.log:
错误: 找不到或无法加载主类 org.apache.skywalking.oap.server.starter.OAPServerStartUp
原因: java.lang.ClassNotFoundException: org.apache.skywalking.oap.server.starter.OAPServerStartUp

解决方案​

​1. 检查是否已编译​

SkyWalking 的二进制包需要先编译才能运行。确保你已经执行了编译步骤:
 
# 进入 SkyWalking 根目录 cd apache-skywalking-apm-9.5.0 # 执行编译(使用 Maven) mvn clean package -DskipTests # 或者使用官方提供的二进制包(推荐) wget https://archive.apache.org/dist/skywalking/9.5.0/apache-skywalking-apm-9.5.0.tar.gz tar -xzf apache-skywalking-apm-9.5.0.tar.gz cd apache-skywalking-apm-9.5.0
注意​​:如果下载的是 Source Code(源码包),必须先用 mvn clean package编译。如果是 Binary(二进制包),则可以直接运行。

​2. 检查 oap-libs是否存在​

主类 OAPServerStartUp应该在 oap-server/server-starter/target/oap-libs目录下。如果没有这个目录,说明编译失败或文件损坏:
 
ls -l oap-server/server-starter/target/oap-libs/
  • ​如果目录不存在​​,重新编译:
    mvn clean package -DskipTests
  • ​如果目录存在但报错​​,可能是 CLASSPATH问题,手动指定类路径:
    java -cp "oap-server/server-starter/target/oap-libs/*" org.apache.skywalking.oap.server.starter.OAPServerStartUp

​3. 检查 JDK 版本​

SkyWalking 9.5.0 需要 ​​JDK 11+​​,确保你的环境变量正确:
java -version
  • ​如果版本低于 11​​,请升级 JDK:
    # Ubuntu/Debian sudo apt install openjdk-11-jdk # CentOS/RHEL sudo yum install java-11-openjdk
     
  • ​如果安装了多个 JDK​​,切换版本:
     
    sudo update-alternatives --config java

​4. 检查启动脚本 oapService.sh

如果 oapService.sh脚本损坏,可以手动启动:
 
cd oap-server/server-starter/target java -Dlog4j.configurationFile=../../../../config/log4j2.xml \ -Dskywalking.log.dir=../../../../logs \ -cp "oap-libs/*" \ org.apache.skywalking.oap.server.starter.OAPServerStartUp
注意​​:-Dlog4j.configurationFile和 -Dskywalking.log.dir是日志配置,确保路径正确。

​5. 检查文件权限​

如果文件权限不足,可能导致无法读取类文件:
 
# 确保所有文件可读 chmod -R +r apache-skywalking-apm-9.5.0 # 确保脚本可执行 chmod +x bin/*.sh

​6. 使用 Docker 快速启动(备用方案)​

如果仍然无法解决,可以使用 Docker 快速启动 OAP Server:
 
docker run --name skywalking-oap \ -p 11800:11800 -p 12800:12800 \ -e SW_STORAGE=elasticsearch \ -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 \ apache/skywalking-oap-server:9.5.0
注意​​:需要先运行 Elasticsearch。

​验证是否修复​

  1. ​检查日志​​:
    tail -f logs/oap.log
    • 如果看到 OAP starts up in stand alone mode,说明启动成功。
    • 如果仍有错误,请提供日志内容。
  2. ​检查进程​​:
    ps aux | grep OAPServerStartUp
  3. ​检查端口​​:
     
    netstat -tulnp | grep 12800

在服务器上部署 ​​Apache SkyWalking APM 9.5.0​​ 时,​​必须​​ 修改以下配置文件中的 localhost和 127.0.0.1,否则 ​​OAP Server 和 Web UI 可能无法正常通信​​,导致监控数据无法显示。

config/application.yml(OAP Server 配置)​

默认配置中,OAP Server 监听的是 127.0.0.1,这意味着 ​​只有本机可以访问​​。在服务器部署时,需要改为 0.0.0.0或 ​​服务器内网 IP​​,否则其他机器(包括 Web UI)无法连接。
​修改点:​
 
core: default: restHost: 0.0.0.0 # 修改为 0.0.0.0 或服务器内网 IP restPort: 12800 # REST API 端口(默认 12800) gRPCHost: 0.0.0.0 # gRPC 端口(默认 11800) gRPCPort: 11800

2. webapp/webapp.yml(Web UI 配置)​

Web UI 默认连接的是 127.0.0.1:12800,这意味着它 ​​只会尝试连接本地的 OAP Server​​。在服务器部署时,必须改为 ​​OAP Server 的实际 IP 或域名​​。
​修改点:​
 
server: port: 8080 # Web UI 端口(默认 8080) oap: host: 192.168.1.100 # 改为 OAP Server 的 IP 或域名 port: 12800 # 必须和 OAP Server 的 restPort 一致

​如果看到 OAP starts up in stand alone mode,说明启动成功。

总结​

问题
解决方案
​未编译​
执行 mvn clean package -DskipTests
​JDK 版本低​
升级到 JDK 11+
oap-libs缺失​
重新编译或检查 CLASSPATH
​启动脚本损坏​
手动运行 java -cp "oap-libs/*" OAPServerStartUp
​文件权限问题​
chmod -R +r赋予读取权限
​快速启动(Docker)​
docker run apache/skywalking-oap-server:9.5.0

备注:

如果 ​​8080 端口没有对外开放​​,外部用户将无法访问 SkyWalking Web UI。以下是解决方案:

解决方案 1:开放 8080 端口​

​1. 检查防火墙状态​

 
# CentOS/RHEL sudo firewall-cmd --state sudo systemctl status firewalld # Ubuntu/Debian sudo ufw status
 
 
  • ​如果防火墙开启​​,放行 8080 端口:
     
    # CentOS/RHEL sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload # Ubuntu/Debian sudo ufw allow 8080/tcp sudo ufw reload
     
     

​2. 检查服务器安全组(云服务器)​

  • ​阿里云/腾讯云/AWS​​:进入控制台 → 安全组规则 → 添加 ​​入方向规则​​,放行 8080 端口。

​3. 验证端口是否开放​

 
# 本地测试 curl http://服务器IP:8080 # 远程测试(从另一台机器) telnet 服务器IP 8080
 
 
  • ​如果返回 Connected​,说明端口已开放。
  • ​如果返回 Connection refused​,检查 SkyWalking UI 是否运行:
     
    netstat -tulnp | grep 8080
     
     

​ 解决方案 2:使用 Nginx 反向代理(推荐)​

如果不想直接暴露 8080 端口,可以用 ​​Nginx 反向代理​​,并通过 HTTPS 访问。

​1. 安装 Nginx​

 
# Ubuntu/Debian sudo apt install nginx # CentOS/RHEL sudo yum install nginx
 
 

​2. 配置 Nginx​

编辑 /etc/nginx/conf.d/skywalking.conf
 
server { listen 80; server_name skywalking.yourdomain.com; # 改为你的域名 location / { proxy_pass http://127.0.0.1:8080; # 转发到本机 8080 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
 
 

​3. 重启 Nginx​

 
sudo nginx -t # 测试配置 sudo systemctl restart nginx
 
 

​4. 用域名访问​

 
http://skywalking.yourdomain.com
 
 

​5. (可选)启用 HTTPS​

使用 Let's Encrypt 免费证书:
 
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d skywalking.yourdomain.com
 
 
访问:
 
https://skywalking.yourdomain.com
 
 

 解决方案 3:修改 SkyWalking UI 端口​

如果 8080 端口被占用,可以改用其他端口(如 8090)。

​1. 修改 webapp/webapp.yml

 
server: port: 8090 # 改为其他端口
 
 

​2. 重启 Web UI​

 
./bin/webappService.sh restart
 
 

​3. 访问新端口​

 
http://服务器IP:8090
 
 

​解决方案 4:SSH 端口转发(临时测试)​

如果不想开放端口,可以用 ​​SSH 隧道​​ 临时访问:

​1. 本地执行​

 
ssh -L 8080:localhost:8080 用户名@服务器IP
 
 

​2. 浏览器访问​

 
http://localhost:8080
 
 

​最终推荐方案​

方案
适用场景
安全性
备注
​开放 8080 端口​
测试环境
 低
最简单,但不安全
​Nginx 反向代理​
生产环境
推荐 + HTTPS
​修改 UI 端口​
端口冲突
避免端口占用
​SSH 隧道​
临时调试
无需开放端口
​生产环境建议使用 Nginx 反向代理 + HTTPS​​,避免直接暴露 8080 端口。

​常见问题​

​Q1: 为什么 curl http://127.0.0.1:8080能访问,但外网不行?​

  • ​原因​​:服务器防火墙或安全组未放行 8080 端口。
  • ​解决​​:按 ​​方案1​​ 开放端口。

​Q2: Nginx 代理后访问 502 Bad Gateway​

  • ​原因​​:SkyWalking UI 未运行或 Nginx 配置错误。
  • ​解决​​:
     
    # 检查 UI 是否运行 ps aux | grep skywalking # 检查 Nginx 日志 tail -f /var/log/nginx/error.log
     
     

​Q3: 如何让 SkyWalking UI 开机自启?​

 
# 编辑 /etc/rc.local sudo vi /etc/rc.local # 添加以下内容(路径改为你的 SkyWalking 目录) cd /opt/apache-skywalking-apm-9.5.0 ./bin/startup.sh
 
 

按照上述方案操作后,SkyWalking Web UI 应该可以正常访问。如果仍有问题,请提供 ​​Nginx 日志​​ 或 ​​防火墙状态​​,我可以进一步帮你排查!

关于Webfunny

Webfunny专注于前端监控系统,前端埋点系统的研发。 致力于帮助开发者快速定位问题,帮助企业用数据驱动业务,实现业务数据的快速增长。支持H5/Web/PC前端、微信小程序、支付宝小程序、UniApp和Taro等跨平台框架。实时监控前端网页、前端数据分析、错误统计分析监控和BUG预警,第一时间报警,快速修复BUG!支持私有化部署,Docker容器化部署,可支持千万级PV的日活量!

  点赞 0   收藏 0
  • 一只会飞的鱼儿
    共发布58篇文章 获得8个收藏
全部评论: 0