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
访问界面
安装完成后,通过以下地址访问:
-
• Web UI: http://localhost:8080
-
• API端点: http://localhost:12800
🎯 应用监控接入
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三级
-
• 避免告警风暴: 设置合理的静默期
-
• 告警收敛: 相关告警合并处理
📚 学习资源
-
• GitHub仓库: https://github.com/apache/skywalking
-
• 社区支持: dev@skywalking.apache.org
-
• 演示环境: https://skywalking.apache.org/
💡 温馨提示: 本手册基于Apache SkyWalking最新版本编写,建议根据实际版本调整配置。如遇到问题,欢迎查阅官方文档或向社区求助。
🌟 点赞收藏,关注我们获取更多技术干货!