一、SkyWalking概述
Apache SkyWalking是开源的APM(应用性能监控)系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
学习交流加群风哥微信: itpux-com
1.1 SkyWalking核心特性
- 分布式追踪:全链路调用追踪
- 服务拓扑:自动生成服务依赖图
- 性能指标:服务、端点、实例多维度监控
- 告警机制:灵活的告警规则配置
1.2 SkyWalking架构
SkyWalking架构组件:
┌─────────────────────────────────────────┐
│ SkyWalking UI │
│ (可视化界面) │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ OAP Server │
│ - 数据聚合处理 │
│ - 告警规则评估 │
│ - 数据存储 │
└─────────────────────────────────────────┘
│
┌─────────┼─────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Agent │ │ Agent │ │ Agent │
│ (Java) │ │ (Go/PHP) │ │ (Python) │
│ 字节码注入 │ │ SDK探针 │ │ SDK探针 │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Storage Backend │
│ Elasticsearch / MySQL / TiDB │
└─────────────────────────────────────────┘
二、SkyWalking安装部署
2.1 安装OAP Server
# 下载SkyWalking
wget https://archive.apache.org/dist/skywalking/9.7.0/apache-skywalking-apm-9.7.0.tar.gz
# 解压安装
tar -xzf apache-skywalking-apm-9.7.0.tar.gz -C /opt/
ln -s /opt/apache-skywalking-apm-bin /opt/skywalking
# 配置存储(Elasticsearch)
# 编辑 config/application.yml
storage:
selector: ${SW_STORAGE:elasticsearch}
elasticsearch:
nameSpace: ${SW_NAMESPACE:""}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:fgedudb:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
# 启动OAP Server
/opt/skywalking/bin/oapService.sh start
# 查看日志
tail -f /opt/skywalking/logs/oap.log
# 输出示例
SkyWalking OAP started successfully!
SkyWalking OAP started successfully!
2.2 启动Web UI
# 启动Web UI
/opt/skywalking/bin/webappService.sh start
# 访问Web UI
# http://fgedudb:8080
# 默认端口:8080
# 查看日志
tail -f /opt/skywalking/logs/webapp.log
# 配置UI端口
# 编辑 webapp/webapp.yml
server:
port: 8080
collector:
path: /graphql
ribbon:
listOfServers: 127.0.0.1:12800
三、Java Agent配置
3.1 Agent安装
# Agent位于SkyWalking安装目录
# /opt/skywalking/agent/
# 配置Agent
# 编辑 agent/config/agent.config
agent.service_name=${SW_AGENT_NAME:my-service}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
agent.instance_properties_json=${SW_AGENT_INSTANCE_PROPERTIES_JSON:}
# Java应用启动配置
java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=my-app \
-Dskywalking.collector.backend_service=192.168.1.100:11800 \
-jar my-application.jar
# Spring Boot应用
java -javaagent:/opt/skywalking/agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=springboot-app \
-jar springboot-app.jar
# Tomcat应用
# 编辑 bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/skywalking/agent/skywalking-agent.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dskywalking.agent.service_name=tomcat-app"
3.2 Agent高级配置
# agent/config/agent.config
# 服务名称
agent.service_name=my-service
# 后端地址
collector.backend_service=127.0.0.1:11800
# 采样率(10000 = 100%)
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:1}
# 忽略路径
agent.ignore_path=${SW_IGNORE_PATH:/health,/metrics}
# 日志级别
logging.level=${SW_LOGGING_LEVEL:INFO}
# 最大缓存大小
buffer.channel_size=${SW_BUFFER_CHANNEL_SIZE:5}
# 插件配置
plugin.mount=${SW_MOUNT_PLUGINS:}
plugin.exclude=${SW_EXCLUDE_PLUGINS:}
四、服务监控
4.1 服务概览
# Web UI查看服务
# 1. 访问 http://fgedudb:8080
# 2. 选择"服务"菜单
# 3. 查看服务列表
# 服务指标说明
- 服务可用性(SLA)
- 平均响应时间
- 吞吐量(CPM)
- 错误率
# 服务实例
- 实例列表
- 实例性能指标
- JVM监控(Java应用)
4.2 端点监控
# 端点指标
- 端点响应时间
- 端点吞吐量
- 端点错误率
# 查看端点拓扑
# 1. 选择服务
# 2. 点击"端点"标签
# 3. 查看端点列表
# 端点追踪
# 1. 点击端点名称
# 2. 查看追踪列表
# 3. 分析慢调用
五、分布式追踪
5.1 追踪分析
# 查看追踪
# 1. 选择"追踪"菜单
# 2. 设置查询条件
# 3. 查看追踪列表
# 追踪信息
- Trace ID
- 服务名称
- 端点名称
- 响应时间
- 状态码
# 追踪详情
# 1. 点击追踪记录
# 2. 查看调用链
# 3. 分析每个Span
# Span信息
- 操作名称
- 开始时间
- 持续时间
- 组件类型
- Tags
- Logs
5.2 调用链分析
# 调用链可视化
# 查看服务间调用关系
# 分析调用耗时分布
# 性能瓶颈定位
# 1. 找到耗时最长的Span
# 2. 分析Span Tags
# 3. 查看SQL执行时间
# 错误追踪
# 1. 筛选错误状态
# 2. 查看错误堆栈
# 3. 分析错误原因
# 跨服务追踪
# 追踪请求在多个服务间的流转
# 分析服务依赖关系
六、服务拓扑
6.1 拓扑图
# 查看服务拓扑
# 1. 选择"拓扑"菜单
# 2. 查看服务依赖关系图
# 拓扑图元素
- 服务节点
- 调用关系线
- 流量指示
- 健康状态
# 拓扑分析
# 1. 识别关键服务
# 2. 发现服务依赖
# 3. 定位故障节点
# 服务筛选
# 按服务名称筛选
# 按时间范围筛选
七、告警配置
7.1 告警规则
# 编辑告警规则
# 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: "服务 {name} 响应时间超过1000ms"
# 服务错误率告警
service_error_rate_rule:
metrics-name: service_error_rate
op: ">"
threshold: 1
period: 10
count: 3
silence-period: 5
message: "服务 {name} 错误率超过1%"
# 服务可用性告警
service_sla_rule:
metrics-name: service_sla
op: "<"
threshold: 95
period: 10
count: 3
silence-period: 5
message: "服务 {name} 可用性低于95%"
# 告警参数说明
# metrics-name: 指标名称
# op: 比较操作符
# threshold: 阈值
# period: 统计周期(分钟)
# count: 触发次数
# silence-period: 静默周期(分钟)
7.2 告警通知
# 配置Webhook通知
# config/alarm-settings.yml
webhooks:
- http://192.168.1.100:8080/alarm/webhook
# Webhook请求格式
{
"scopeId": 1,
"scope": "SERVICE",
"name": "my-service",
"id0": "123",
"id1": "",
"ruleName": "service_resp_time_rule",
"alarmMessage": "服务 my-service 响应时间超过1000ms",
"startTime": 1704067200000
}
# 配置钉钉通知
dingtalks:
- url: https://oapi.dingtalk.com/robot/send?access_token=xxx
secret: xxx
# 配置微信通知
wechats:
- url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx
八、自定义插件
8.1 插件开发
// 自定义插件示例
// 定义插件类
public class CustomPlugin implements ClassEnhancePluginDefine {
@Override
protected ClassMatch enhanceClass() {
return byName("com.example.MyService");
}
@Override
public InstanceMethodsInterceptPoint[] getInstanceMethodsInterceptPoints() {
return new InstanceMethodsInterceptPoint[] {
new InstanceMethodsInterceptPoint() {
@Override
public ElementMatcher getMethodsMatcher() {
return named("process");
}
@Override
public String getMethodsInterceptor() {
return "com.example.CustomInterceptor";
}
}
};
}
}
// 定义拦截器
public class CustomInterceptor implements InstanceMethodsAroundInterceptor {
@Override
public void beforeMethod(EnhancedInstance objInst,
Method method,
Object[] allArguments,
Class>[] argumentsTypes,
MethodInterceptResult result) {
AbstractSpan span = ContextManager.createLocalSpan("Custom:process");
span.setComponent(ComponentsDefine.CUSTOM);
}
@Override
public Object afterMethod(EnhancedInstance objInst,
Method method,
Object[] allArguments,
Class>[] argumentsTypes,
Object ret) {
ContextManager.stopSpan();
return ret;
}
}
九、运维命令
9.1 常用管理命令
# 启动OAP
/opt/skywalking/bin/oapService.sh start
# 启动Web UI
/opt/skywalking/bin/webappService.sh start
# 启动所有服务
/opt/skywalking/bin/startup.sh
# 停止服务
/opt/skywalking/bin/oapService.sh stop
/opt/skywalking/bin/webappService.sh stop
# 查看日志
tail -f /opt/skywalking/logs/oap.log
tail -f /opt/skywalking/logs/webapp.log
# 查看进程
ps -ef | grep skywalking
# 检查端口
netstat -tlnp | grep 11800
netstat -tlnp | grep 12800
netstat -tlnp | grep 8080
十、最佳实践
| 配置项 | 建议值 | 说明 |
|---|---|---|
| 采样率 | 根据流量调整 | 高流量降低采样 |
| 存储周期 | 7-30天 | 根据需求调整 |
| 告警阈值 | 根据业务设定 | 避免误报 |
| Agent版本 | 与OAP版本一致 | 兼容性 |
注意事项:
- Agent版本需与OAP版本匹配
- 合理设置采样率避免性能影响
- 定期清理历史数据
- 监控ES存储空间
十一、总结
SkyWalking是功能强大的APM监控系统。通过本培训文档,您应该掌握了:
- SkyWalking架构和核心概念
- OAP Server和Web UI部署
- Java Agent配置
- 服务监控和分布式追踪
- 告警规则配置
- 自定义插件开发
IT运维培训文档系列 | 第369篇 | SkyWalking APM监控培训
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
