Apache SkyWalking 完整使用手册

Apache SkyWalking 完整使用手册

📋 项目概览

Apache SkyWalking 是一个开源的应用性能监控(APM)系统,专门为微服务、云原生和容器化架构设计。它提供了全面的分布式追踪、指标收集和日志分析能力。

✨ 核心功能特色

  • • 🔍 分布式追踪 - 服务、服务实例、端点级别的指标分析

  • • 🎯 根因分析 - 基于代码级分析和eBPF技术的性能诊断

  • • 🗺️ 服务拓扑图 - 实时服务依赖关系可视化

  • • 📊 性能指标监控 - 数据库访问、消息队列性能监控

  • • 🌐 多语言支持 - Java、.NET、Node.js、PHP、Python、Go等

  • • 🐳 云原生友好 - 完美支持Kubernetes、Docker部署

  • • 📈 告警系统 - 智能告警和通知机制

🚀 快速入门指南

环境要求

  • Java 8+ (用于后端服务)

  • 内存: 建议4GB+

  • 存储: 20GB+ 可用空间

  • 网络: 支持8080、11800、12800端口

安装部署

方法一:Docker快速部署(推荐新手)
go 复制代码
# 下载SkyWalking镜像
docker pull apache/skywalking-oap-server:8.16.0
docker pull apache/skywalking-ui:8.16.0

# 启动OAP服务
docker run -d --name oap \
  -p 11800:11800 \
  -p 12800:12800 \
  apache/skywalking-oap-server:8.16.0

# 启动UI界面
docker run -d --name ui \
  -p 8080:8080 \
  -e SW_OAP_ADDRESS=http://oap:12800 \
  apache/skywalking-ui:8.16.0
方法二:二进制包部署
go 复制代码
# 下载最新版本
wget https://skywalking.apache.org/downloads/

# 解压
tar -xzf apache-skywalking-apm-8.16.0.tar.gz

# 启动OAP服务
cd apache-skywalking-apm-bin/
bin/startup.sh

访问界面

安装完成后,通过以下地址访问:

🎯 应用监控接入

Java应用监控

1. Agent配置
go 复制代码
# 下载Java Agent
wget https://skywalking.apache.org/downloads/

# 解压到指定目录
tar -xzf skywalking-agent.tar.gz
2. 应用启动配置
go 复制代码
# 方式一:命令行参数
java -javaagent:/path/to/skywalking-agent.jar \
     -Dskywalking.agent.service_name=your-service-name \
     -Dskywalking.collector.backend_service=localhost:11800 \
     -jar your-application.jar

# 方式二:环境变量
export SW_AGENT_NAME=your-service-name
export SW_AGENT_COLLECTOR_BACKEND_SERVICE=localhost:11800
java -javaagent:/path/to/skywalking-agent.jar -jar your-application.jar
3. 高级配置
go 复制代码
# agent.config
agent.service_name=user-service
agent.namespace=production
agent.instance_name=user-service-instance-1
collector.backend_service=localhost:11800
logging.level=INFO
logging.file_name=/var/log/skywalking/skywalking-api.log

其他语言接入

Go应用
go 复制代码
import "github.com/apache/skywalking-go"

// 初始化追踪器
tracer, err := skywalking.NewTracer("your-service-name")
if err != nil {
    log.Fatal(err)
}

// 创建span
span, ctx := tracer.CreateLocalSpan(context.Background())
span.SetOperationName("business-operation")
span.End()
Python应用
go 复制代码
from skywalking import agent, config

# 配置agent
config.agent_protocol='grpc'
config.agent_authentication=''
config.agent_name='python-service'
config.agent_instance_name='python-instance-1'
config.agent_server='localhost:11800'

# 启动监控
agent.start()

# 创建span
@trace('operation-name')
defyour_function():
    pass

📊 监控界面使用

1. 服务拓扑图

  • 功能: 实时展示服务间的调用关系

  • 查看路径: 仪表板 → 拓扑图

  • 关键指标:

    • • 调用次数

    • • 平均响应时间

    • • 错误率

    • • 吞吐量

2. 服务性能分析

  • 端点监控: 查看具体接口性能

  • 实例监控: 多实例负载对比

  • 调用链追踪: 详细的请求执行路径

3. 告警配置

go 复制代码
# alarm-settings.yml
rules:
# 响应时间告警
service_resp_time_rule:
    metrics-name:service_resp_time
    threshold:1000
    op:">"
    period:10
    count:3
    silence-period:5
    
# 错误率告警  
service_error_rate_rule:
    metrics-name:service_error_rate
    threshold:10
    op:">"
    period:10
    count:2
    silence-period: 3

🔧 高级配置

存储配置

Elasticsearch存储
go 复制代码
# application.yml
storage:
selector:${SW_STORAGE:elasticsearch}
elasticsearch:
    nameSpace:${SW_NAMESPACE:""}
    clusterNodes:${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
    protocol:${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
    indexShardsNumber:${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
    indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
MySQL存储
go 复制代码
storage:
  selector: ${SW_STORAGE:mysql}
  mysql:
    properties:
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}

告警通知配置

Webhook通知
go 复制代码
webhooks:
  - ${SW_WEBHOOK_URLS:http://your-webhook-url}
邮件通知
go 复制代码
email:
  # SMTP服务器配置
host:${SW_ALARM_EMAIL_HOST:smtp.gmail.com}
port:${SW_ALARM_EMAIL_PORT:587}
username:${SW_ALARM_EMAIL_USERNAME:your-email@gmail.com}
password:${SW_ALARM_EMAIL_PASSWORD:your-password}
recipients: ${SW_ALARM_EMAIL_RECIPIENTS:admin@example.com}

📈 性能优化建议

1. 采样率配置

go 复制代码
# 采样率配置,生产环境建议10-20%
sampling:
  percentage: ${SW_AGENT_SAMPLE:0.1}

2. 缓存配置

go 复制代码
core:
  default:
    # 配置缓存大小
    cache:
      record_data_max_size: ${SW_CORE_CACHE_RECORD_DATA_MAX_SIZE:2000}
      record_expire_time: ${SW_CORE_CACHE_RECORD_EXPIRE_TIME:120}

3. JVM参数优化

go 复制代码
# OAP服务器JVM优化
JAVA_OPTS="-Xms2g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

🚨 常见问题解决

1. Agent连接失败

问题: 应用启动后SkyWalking UI看不到数据

解决方案:

go 复制代码
# 检查网络连通性
telnet localhost 11800

# 验证agent配置
java -javaagent:/path/to/skywalking-agent.jar \
     -Dskywalking.agent.logging.level=DEBUG \
     -Dskywalking.collector.backend_service=localhost:11800 \
     -jar your-app.jar

2. 内存不足

问题: OAP服务频繁OOM

解决方案:

go 复制代码
# 增加堆内存
export JAVA_OPTS="-Xms1g -Xmx2g"

# 或调整配置降低内存占用
core:
  default:
    top_n_report_period: ${SW_CORE_TOPN_REPORT_PERIOD:10}  # 降低报告频率

3. 数据查询慢

问题: UI界面响应缓慢

解决方案:

  • • 检查存储索引是否需要优化

  • • 调整查询时间范围

  • • 增加OAP服务器资源

🎯 最佳实践

1. 服务命名规范

go 复制代码
# 推荐命名格式
-Dskywalking.agent.service_name=env-project-module-service
# 示例
-Dskywalking.agent.service_name=prod-payment-order-service

2. 标签使用

go 复制代码
// 添加自定义标签
ActiveSpan.tag("user.id", "12345");
ActiveSpan.tag("business.type", "payment");

3. 监控分层

  • 应用层: 业务逻辑监控

  • 中间件层: 数据库、缓存、消息队列

  • 基础设施层: JVM、容器、网络

4. 告警策略

  • 分级告警: Critical、Warning、Info三级

  • 避免告警风暴: 设置合理的静默期

  • 告警收敛: 相关告警合并处理

📚 学习资源


💡 温馨提示: 本手册基于Apache SkyWalking最新版本编写,建议根据实际版本调整配置。如遇到问题,欢迎查阅官方文档或向社区求助。

🌟 点赞收藏,关注我们获取更多技术干货!

相关推荐
前端玖耀里1 天前
Spring Boot 3 集成 Apache Calcite:多数据源查询的终极解决方案
spring boot·后端·apache
你才是臭弟弟3 天前
Apache Flink+Apache Iceberg(协作关系)
大数据·flink·apache
SelectDB技术团队4 天前
构建 AI 数据基座:思必驰基于 Apache Doris 的海量多模态数据集管理实践
人工智能·apache·知识图谱
你才是臭弟弟4 天前
Apache Iceberg+Apache Flink(安装流程)
大数据·flink·apache
你才是臭弟弟4 天前
Apache Iceberg核心特征
大数据·apache
沉默-_-5 天前
微信小程序页面配置详解
学习·微信小程序·apache·微信开发者工具
SeaTunnel5 天前
Apache SeaTunnel MySQL CDC 支持按时间启动吗?
大数据·数据库·mysql·开源·apache·seatunnel
我爱娃哈哈6 天前
SpringBoot + SkyWalking + Prometheus:微服务全链路监控与性能压测闭环方案
spring boot·prometheus·skywalking
weixin_462446236 天前
Java 使用 Apache Batik 将 SVG 转换为 PNG(指定宽高)
java·apache·svg转png