1. 首页 > IT综合教程 > 正文

369. SkyWalking APM监控培训

一、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!

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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息