当前位置: 首页 > news >正文

从零到一:SkyWalking 9.x 与 Elasticsearch 8.x 生产环境部署实战

1. 环境准备与组件下载

在开始部署之前,我们需要确保服务器环境满足基本要求。我推荐使用CentOS 7或Ubuntu 20.04 LTS这类稳定的Linux发行版,实测下来这两个系统对SkyWalking和Elasticsearch的兼容性最好。服务器配置方面,生产环境建议至少4核CPU、8GB内存和100GB存储空间,特别是Elasticsearch对内存需求较高。

先安装必要的依赖项:

# CentOS系统 sudo yum install -y java-11-openjdk-devel wget unzip # Ubuntu系统 sudo apt-get update sudo apt-get install -y openjdk-11-jdk wget unzip

验证Java环境是否安装成功:

java -version # 应该显示类似:openjdk version "11.0.12"

接下来下载所需组件。这里有个坑我踩过:不同版本组合可能存在兼容性问题。经过多次测试,我确认以下组合最稳定:

  • SkyWalking 9.5.0
  • Elasticsearch 8.5.3

下载地址(建议使用官方镜像):

wget https://archive.apache.org/dist/skywalking/9.5.0/apache-skywalking-apm-9.5.0.tar.gz wget https://archive.apache.org/dist/skywalking/9.5.0/apache-skywalking-java-agent-9.5.0.tgz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-linux-x86_64.tar.gz

2. Elasticsearch 8.x 部署实战

2.1 安装与基础配置

解压文件到指定目录:

mkdir -p /opt/elasticsearch tar -xzf elasticsearch-8.5.3-linux-x86_64.tar.gz -C /opt/elasticsearch

创建专用用户(Elasticsearch不允许用root运行):

useradd -M -s /bin/false elasticsearch chown -R elasticsearch:elasticsearch /opt/elasticsearch

修改关键配置(/opt/elasticsearch/elasticsearch-8.5.3/config/elasticsearch.yml):

cluster.name: skywalking-cluster node.name: node-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 discovery.type: single-node xpack.security.enabled: false # 生产环境建议开启,这里为简化先关闭

2.2 系统调优与启动

调整系统限制(/etc/security/limits.conf):

elasticsearch soft nofile 65535 elasticsearch hard nofile 65535 elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited

配置systemd服务(/usr/lib/systemd/system/elasticsearch.service):

[Unit] Description=Elasticsearch After=network.target [Service] User=elasticsearch Group=elasticsearch Environment="ES_HOME=/opt/elasticsearch/elasticsearch-8.5.3" Environment="ES_PATH_CONF=/opt/elasticsearch/elasticsearch-8.5.3/config" ExecStart=/opt/elasticsearch/elasticsearch-8.5.3/bin/elasticsearch LimitNOFILE=65535 LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target

启动服务并验证:

systemctl daemon-reload systemctl start elasticsearch systemctl enable elasticsearch # 验证是否运行成功 curl -X GET "localhost:9200/" # 应该返回包含"you Know, for Search"的JSON

3. SkyWalking 9.x 核心组件部署

3.1 OAP服务配置

解压SkyWalking安装包:

mkdir -p /opt/skywalking tar -xzf apache-skywalking-apm-9.5.0.tar.gz -C /opt/skywalking

关键配置修改(/opt/skywalking/apache-skywalking-apm-bin/config/application.yml):

storage: selector: ${SW_STORAGE:elasticsearch} elasticsearch: namespace: ${SW_NAMESPACE:"sw_index"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} user: ${SW_ES_USER:""} password: ${SW_ES_PASSWORD:""} dayStep: ${SW_STORAGE_DAY_STEP:1} # 存储索引按天分割 indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # 分片数 indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # 副本数

3.2 Web UI配置

修改Web应用端口(/opt/skywalking/apache-skywalking-apm-bin/webapp/webapp.yml):

server: port: 12880 collector: path: /graphql ribbon: ReadTimeout: 10000 listOfServers: 127.0.0.1:12800

3.3 服务启动与管理

创建启动脚本(/opt/skywalking/start_sw.sh):

#!/bin/bash # 启动OAP服务 nohup /opt/skywalking/apache-skywalking-apm-bin/bin/oapService.sh > /dev/null 2>&1 & # 启动Web UI nohup /opt/skywalking/apache-skywalking-apm-bin/bin/webappService.sh > /dev/null 2>&1 &

设置开机自启(/etc/systemd/system/skywalking.service):

[Unit] Description=SkyWalking Service After=network.target elasticsearch.service [Service] Type=forking ExecStart=/opt/skywalking/start_sw.sh ExecStop=/bin/kill -TERM $MAINPID [Install] WantedBy=multi-user.target

验证服务状态:

# 检查OAP日志 tail -f /opt/skywalking/apache-skywalking-apm-bin/logs/skywalking-oap-server.log # 应该看到"Storage ElasticSearch client is connected" # 访问Web UI curl -I http://localhost:12880 # 应返回HTTP 200

4. 探针配置与实战技巧

4.1 Java Agent部署

解压探针包:

tar -xzf apache-skywalking-java-agent-9.5.0.tgz -C /opt/skywalking

典型Java应用启动参数示例:

java -javaagent:/opt/skywalking/skywalking-agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=your_service_name \ -Dskywalking.collector.backend_service=localhost:11800 \ -jar your_application.jar

4.2 高级配置技巧

探针配置文件(/opt/skywalking/skywalking-agent/config/agent.config)关键参数:

# 服务名称 agent.service_name=${SW_AGENT_NAME:Your_Application} # 采样率(生产环境建议0.1-0.3) agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1} # 忽略特定请求 agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.png,.css,.js,.gif} # 跨进程传播配置 agent.cross_process_propagation=${SW_AGENT_CROSS_PROCESS:true}

4.3 常见问题排查

如果遇到数据不显示问题,按以下步骤检查:

  1. 确认OAP服务日志没有错误
  2. 检查Elasticsearch索引是否创建成功
    curl -X GET "localhost:9200/_cat/indices?v"
  3. 验证探针连接状态
    netstat -tulnp | grep 11800
  4. 调整日志级别(/opt/skywalking/apache-skywalking-apm-bin/config/log4j2.xml)
    <Root level="DEBUG"/>

5. 生产环境优化建议

5.1 性能调优参数

Elasticsearch优化(config/jvm.options):

-Xms4g # 初始堆内存 -Xmx4g # 最大堆内存(不超过物理内存50%) -XX:+UseG1GC

SkyWalking OAP内存调整(bin/oapService.sh):

export JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC"

5.2 安全配置

启用Elasticsearch安全特性:

xpack.security.enabled: true xpack.security.transport.ssl.enabled: true

生成密码并配置SkyWalking:

# 生成密码 /opt/elasticsearch/elasticsearch-8.5.3/bin/elasticsearch-reset-password -u elastic # 修改SkyWalking配置 storage: elasticsearch: user: elastic password: your_strong_password

5.3 监控与维护

设置定期清理任务(crontab -e):

# 每天凌晨清理7天前索引 0 0 * * * curl -X DELETE "http://localhost:9200/sw_index-$(date -d '-7 days' +'%Y%m%d')"

配置告警规则(/opt/skywalking/apache-skywalking-apm-bin/config/alarm-settings.yml):

rules: service_resp_time_rule: metrics-name: service_resp_time op: ">" threshold: 1000 period: 10 count: 3 silence-period: 5 message: Response time of {name} is more than 1s

实际部署中我发现,SkyWalking 9.x与Elasticsearch 8.x的组合在稳定性上有显著提升,但版本匹配非常关键。曾经因为混用8.x和9.x组件导致数据不一致问题,花费了大量时间排查。建议严格按照本文推荐的版本组合部署,可以避免90%的兼容性问题。

http://www.jsqmd.com/news/1096525/

相关文章:

  • 七人拼团小程序:社交电商新玩法
  • 基因编辑产业化:从科研探索到临床应用,重构生命健康产业底层逻辑
  • 抖音内容自动化采集工具深度解析:架构设计与实战应用
  • 构建企业级权限管理平台:ZR.Admin.NET跨平台RBAC解决方案实战指南
  • 运营商 GenAI 数据安全赛道厂商分层与核心能力对比研究
  • HarmonyOS7 RenderSlot 为什么越用越香?可插拔组件设计一次讲明白
  • COMSOL后处理实战:精准提取动态接触面积
  • 算法:删除有序数组的重复项
  • Web身份验证漏洞攻防实战:从暴力破解到MFA绕过的全面防御指南
  • 从CT灰度到力学模型:Mimics中股骨多材料属性赋予的完整实践
  • STM32F407ZET6 SysTick延时:从寄存器配置到传感器精准触发的实战解析
  • 抖音直播录制神器:3步快速部署40+平台自动录制完整指南
  • VMware运维工具箱:从RVTools到PowerCLI的实战利器盘点
  • TinyML 推理引擎:从模型量化到 MCU 级部署的极致内存优化
  • 你玩的游戏,可能正在帮外国军队扫描你的国家
  • 【万字文档+源码】基于springboot+vue茶叶商城管理系统-可用于毕设-课程设计-练手学习-学习资料分享
  • Delphi 实战:从阻塞到流式,解锁OpenAI API异步调用与实时响应
  • 英雄联盟Akari助手:3分钟快速上手的游戏效率工具终极指南
  • 一行命令让 AI Agent 看遍全网:Agent-Reach 全平台数据源扩展实战
  • 从 1 台到 10 台:无人售货柜的规模化复制
  • Windows 11 系统盘越用越小怎么办?存储感知 DISM Compact OS 等专属工具详解
  • 论文AI写作软件推荐哪个好?2026年度榜单
  • WWW 2024 | 图嵌入新范式:从LINE到大规模动态网络的表示学习
  • 在Java中,如何使用break和continue关键字来控制循环?
  • 记录redis学习
  • 别再硬编码密钥了!Spring Boot项目实战:用配置文件安全管理AES256加解密密钥
  • 大模型 AGI 开发模式:从概念到落地的系统性技术解构
  • STC16F40K128单片机驱动4路红外循迹模块实战指南
  • HarmonyOS7 泛型组件怎么写才不废?TypeScript 类型安全通用列表实战
  • 终极指南:如何用Python免费下载B站大会员4K高清视频