SkyWalking链路追踪 Docker环境搭建与使用

背景

随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。
我们思考下这些问题:

1:一个请求经过了这些服务后其中出现了一个调用失败的问题,如何定位问题发生的地方?
2:如何计算每个节点访问流量?
3:流量波动的时候,增加哪些节点集群服务?

这些问题要想得到解决,一定是有数据支撑,绝不是靠开发人员或者运维人员的直觉。为了解决分布式应用、微服务系统面临的这些挑战,APM系统(Application Performance Management,即应用性能管理)应运而生。

分布式追踪系统的原理

分布式追踪系统大体分为三个部分,数据采集、数据持久化、数据展示
数据采集是指在代码中埋点,设置请求中要上报的阶段,以及设置当前记录的阶段隶属于哪个上级阶段。
数据持久化则是指将上报的数据落盘存储,
数据展示则是前端查询与之关联的请求阶段,并在界面上呈现。
Trace
一个 Trace 代表一个事务、请求或是流程在分布式系统中的执行过程。
OpenTracing 中的一条 Trace调用链,由多个 Span 组成,一个 Span 代表系统中具有开始时间和执行时长的逻辑单元,Span 一般会有一个名称,一条 Trace中 Span 是首尾连接的。
Span
Span 代表系统中具有开始时间和执行时长的逻辑单元,Span 之间通过嵌套或者顺序排列建立逻辑因果关系。

Skywalking介绍

2015年由个人吴晟(华为开发者)主导开源,作者是华为开发云监控产品经理,主导监控产品的规划、技术路线及相关研发工作,也是OpenTracing分布式追踪标准组织成员 ,该项目 2017年加入Apache孵化器,是一个分布式系统的应用程序性能监控工具(APM),专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

Skywalking是一个可观测性分析平台和应用性能管理系统,它也是基于OpenTracing规范、开源的AMP系统。Skywalking提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

官方站点:http://skywalking.apache.org/
GitHub项目地址:https://github.com/apache/skywalking

我们在学习Skywalking之前,可以先访问官方提供的控制台演示
演示地址: http://demo.skywalking.apache.org/
账号:skywalking 密码:skywalking
在这里插入图片描述

SkyWalking 核心功能

指标分析:服务,实例,端点指标分析
问题分析:在运行时分析代码,找到问题的根本原因
服务拓扑:提供服务的拓扑图分析
依赖分析:服务实例和端点依赖性分析
服务检测:检测慢速的服务和端点
性能优化:根据服务监控的结果提供性能优化的思路
链路追踪:分布式跟踪和上下文传播
数据库监控:数据库访问指标监控统计,检测慢速数据库访问语句(包括SQL语句)
服务告警:服务告警功能
日志监控:日志功能

名词解释:
服务(service):业务资源应用系统
端点(endpoint):应用系统对外暴露的功能接口
实例(instance):物理机

Skywalking架构图:

在这里插入图片描述
skyWalking整体可分为:客户端,服务端
客户端:agent组件
基于探针技术采集服务相关信息(包括跟踪数据和统计数据),然后将采集到的数据上报给skywalking的数据收集器
服务端:又分为OAP,Storage,WebUI
OAP:observability analysis platform可观测性分析平台,负责接收客户端上报的数据,对数据进行分析,聚合,计算后将数据进行存储,并且还会提供一些查询API进行数据的查询,这个模块其实就是我们所说的链路追踪系统的Collector收集器
Storage:skyWalking的存储介质,默认是采用H2,同时支持许多其他的存储介质,比如:ElastaticSearch,mysql等
WebUI:提供一些图形化界面展示对应的跟踪数据,指标数据等等

SkyWalking环境搭建

官方下载:http://skywalking.apache.org/downloads/
在这里插入图片描述
Skywalking数据存储方式有2种,分别为H2(内存)和elasticsearch,如果数据量比较大,建议使用后者,工作中也建议使用后者。
Skywalking自身提供了UI管理控制台,我们安装的组件:

1:elasticsearch,建议使用elasticsearch7.x
2:elasticsearch-hq,elasticsearch的管理工具,更方便管理elasticsearch
3:Skywalking
4:Skywalking-UI

elasticsearch安装

1)系统资源配置修改
elasticsearch占用系统资源比较大,我们需要修改下系统资源配置,这样才能
很好的运行elasticsearch,修改虚拟机配置, vi/etc/security/limits.conf ,追加内容:
soft nofile 65536
hard nofile 6553

修改 vi /etc/sysctl.conf ,追加内容 :
vm.max_map_count=655360
让配置立即生效:
/sbin/sysctl -p

2)安装elasticsearch
建议安装:elasticsearch7.x,我们这里选择7.6.2,并且采用容器的安装方式,安装如下:

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 --
restart=always -e "discovery.type=single-node" -e
ES_JAVA_OPTS="-Xms84m -Xmx512m" -d elasticsearch:7.6.2

3)elasticsearch跨域配置
elasticsearch默认是没有开启跨域,我们需要配置跨域,并配置集群节点名字:

#进入容器
docker exec -it elasticsearch /bin/bash

修改容器中 /usr/share/elasticsearch/config/elasticsearch.yml 文件,添加配置如下:

cluster.name: "elasticsearch"
http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1

参数说明:

cluster.name:集群服务名字
http.cors.enabled:开启跨域
http.cors.allow-origin: 允许跨域域名,*代表所有域名
network.host: 外部访问的IP
discovery.zen.minimum_master_nodes: 最小主节点个数

安装完成后,重启容器 docker restart elasticsearch ,再访问http://192.168.200.129:9200/ 效果如下:
在这里插入图片描述
安装 ElasticSearch管理界面elasticsearch-hq

docker run -d --name elastic-hq -p 5000:5000 --restart always
elastichq/elasticsearch-hq

在这里插入图片描述

Skywalking安装

Skywalking的安装我们也采用Docker安装方式,同时我们需要为Skywalking指定存储服务:

#安装Skywalking
docker run --name skywalking -d -p 1234:1234 -p 11800:11800 -
p 12800:12800 --restart always --link
elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch7 -e
SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
apache/skywalking-oap-server

参数说明:

--link elasticsearch:elasticsearch:存储服务使用elasticsearch
-e SW_STORAGE=elasticsearch7:存储服务elasticsearch的版本
-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200:存储服务
elasticsearch的链接地址

接下来安装Skywalking-UI,需要指定Skywalking服务名字:

docker run --name skywalking-ui -d -p 8080:8080 --link
skywalking:skywalking -e SW_OAP_ADDRESS=skywalking:12800 --
restart always apache/skywalking-ui

在这里插入图片描述

docker-compose部署

创建docker-compose.yml并配置如下

version: '3.3'
services:
  elasticsearch:
    image: elasticsearch:7.6.2
    container_name: elasticsearch
    restart: always
    privileged: true
    hostname: elasticsearch
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    networks:
      - skywalking
    ulimits:
      memlock:
        soft: -1
        hard: -1
  elasticsearch-hq:
    image: elastichq/elasticsearch-hq
    container_name: elasticsearch-hq
    restart: always
    privileged: true
    hostname: elasticsearch-hq
    ports:
      - 5000:5000
    environment:
      - TZ=Asia/Shanghai
    networks:
      - skywalking
  oap:
    image: apache/skywalking-oap-server:8.7.0-es7
    container_name: oap
    hostname: oap
    privileged: true
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    environment:
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      TZ: Asia/Shanghai
    volumes:
      - ./config/alarm-settings.yml:/skywalking/config/alarm-settings.yml
    networks:
      - skywalking
  ui:
    image: apache/skywalking-ui:8.7.0
    container_name: ui
    privileged: true
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8080:8080
    environment:
      SW_OAP_ADDRESS: oap:12800
      TZ: Asia/Shanghai
    networks:
      - skywalking

networks:
  skywalking:
    driver: bridge

通过命令一键启动:

docker-compose up -d

启动成功后访问skywalking的webui页面:http://192.168.200.129:8080/

Skywalking应用

skywalking-collector:链路数据归集器,数据可以落地ElasticSearch/H2
skywalking-ui:web可视化平台,用来展示落地的数据
skywalking-agent:探针,用来收集和发送数据到归集器

agent下载

Skywalking-agent,它简称探针,用来收集和发送数据到归集器,我们先来学习下探针使用,探针对应的jar包在Skywalking源码中,我们需要先下载源码。
Skywalking源码下载地址: https://archive.apache.org/dist/skywalking/
在这里插入图片描述
agent目录结构如下:
在这里插入图片描述

agent应用

项目使用agent,如果是开发环境,可以使用IDEA集成,如果是生产环境,需要将项目打包上传到服务器。为了使用agent,我们同时需要将下载的 apacheskywalking-apm-bin 文件包上传到服务器上去。不过无论是开发环境还是生产环境使用agent,对项目都是无侵入式的。
应用名配置
我们需要用到 agent ,此时需要将 agent/config/agent.config 配置文件拷贝到每个需要集成Skywalking工程的resource目录下,
并修改其中的agent.service_name

IDEA集成使用agent

在运行的程序配置 jvm参数:
-javaagent:C:\developer\skywalking\apache-skywalking-apm\bin\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=test

生产环境使用agent

生产环境使用,因此我们需要将agent和每个项目的jar包上传到服务器上,上传 apache-skywalking-apm-bin 至/usr/local/server/skywalking ,再将 工程 中的项目打包,并分别上传到服务器上,如下三个工程:

hailtaxi-order-1.0-SNAPSHOT.jar
hailtaxi-gateway-1.0-SNAPSHOT.jar
hailtaxi-driver-1.0-SNAPSHOT.jar

1)启动hailtaxi-gateway

java -javaagent:/usr/local/server/skywalking/apacheskywalking-apm-bin/agent/skywalking-agent.jar 
-Dskywalking.agent.service_name=hailtaxi-gateway -jar
hailtaxi-gateway-1.0-SNAPSHOT.jar &

2)启动hailtaxi-driver

java -javaagent:/usr/local/server/skywalking/apacheskywalking-apm-bin/agent/skywalking-agent.jar
 -Dskywalking.agent.service_name=hailtaxi-driver -jar hailtaxidriver-1.0-SNAPSHOT.jar &

其他的类似

  • 14
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘右今

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值