美文网首页APM
SkyWalking之一入门

SkyWalking之一入门

作者: Java及SpringBoot | 来源:发表于2020-03-06 15:50 被阅读0次

    个人专题目录


    SkyWalking入门

    1. Skywalking概述

    根据官方的解释,Skywalking是一个可观测性分析平台(Observability Analysis Platform简称OAP)
    和应用性能管理系统(Application Performance Management简称APM)。

    提供分布式链路追踪、服务网格(Service Mesh)遥测分析、度量(Metric)聚合和可视化一体化解决方案。

    下面是Skywalking的几大特点:

    • 多语言自动探针,Java,.NET Core和Node.JS。
    • 多种监控手段,语言探针和service mesh。
    • 轻量高效。不需要额外搭建大数据平台。
    • 模块化架构。UI、存储、集群管理多种机制可选。
    • 支持告警。
    • 优秀的可视化效果。
    skywalking架构

    Skywalking提供Tracing和Metrics数据的获取和聚合。

    Metric的特点是,它是可累加的:他们具有原子性,每个都是一个逻辑计量单元,或者一个时间段内的柱状图。 例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统
    计; 输入HTTP请求的数量可以被定义为一个计数器,用于简单累加; 请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。

    Tracing的最大特点就是,它在单次请求的范围内,处理信息。 任何的数据、元数据信息都被绑定
    到系统中的单个事务上。 例如:一次调用远程服务的RPC执行过程;一次实际的SQL查询语句;
    一次HTTP请求的业务性ID。

    总结,Metric主要用来进行数据的统计,比如HTTP请求数的计算。Tracing主要包含了某一次请求的链路数据。

    详细的内容可以查看Skywalking开发者吴晟翻译的文章,Metrics, tracing 和 logging 的关系 :

    http://blog.oneapm.com/apm-tech/811.html

    整体架构包含如下三个组成部分:

    1. 探针(agent)负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的
      服务器上,以方便数据的获取。

    2. 可观测性分析平台OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使
      用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如
      Elasticsearch、MySQL数据库、H2数据库等。同时OAP还使用查询引擎(Query Core)提供HTTP查
      询接口。

    3. Skywalking提供单独的UI进行数据的查看,此时UI会调用OAP提供的接口,获取对应的数据然后
      进行展示。

    2. Skywalking优势

    Skywalking相比较其他的分布式链路监控工具,具有以下特点:

    • 社区相当活跃。Skywalking已经进入apache孵化,目前的start数已经超过11K,最新版本6.5.0已
      经发布。开发者是国人,可以直接和项目发起人交流进行问题的解决。
    • Skywalking支持Java,.NET Core和Node.JS语言。相对于其他平台:比如Pinpoint支持Java和
      PHP,具有较大的优势。
    • 探针无侵入性。对比CAT具有倾入性的探针,优势较大。不修改原有项目一行代码就可以进行集
      成。
    • 针性能优秀。有网友对Pinpoint和Skywalking进行过测试,由于Pinpoint收集的数据过多,所以对性能损耗较大,而Skywalking探针性能十分出色。
    • 支持组件较多。特别是对Rpc框架的支持,这是其他框架所不具备的。Skywalking对Dubbo、
      gRpc等有原生的支持,甚至连小众的motan和sofarpc都支持。

    3. Skywalking主要概念介绍

    • 服务(Service),一个独立的应用(Application)
    • 端点(Endpoint),应用对外提供的接口
    • 实例(Instance),相同服务部署的节点就是实例,同一服务可以部署多个。

    4. 环境搭建

    搭建Skywalking的可观测性分析平台OAP环境。Skywalking默认使用H2
    内存中进行数据的存储,我们可以替换存储源为ElasticSearch保证其查询的高效及可用性。

    具体的安装步骤可以在Skywalking的官方github上找到:

    https://github.com/apache/skywalking/blob/master/docs/en/setup/README.md

    4.1 创建目录

    mkdir /usr/local/skywalking
    

    4.2 下载安装包

    将elasticsearch和skywalking安装包上传到虚拟机/usr/local/skywalking目录下

    elasticsearch-6.4.0.tar.gz ---elasticsearch 6.4的安装包,Skywalking对es版本号有一定要求,最
    好使用6.3.2以上版本,如果是7.x版本需要额外进行配置。

    apache-skywalking-apm-6.5.0.tar.gz ---Skywalking最新的安装包

    4.3 安装elasticsearch

    tar -zxvf ./elasticsearch-6.4.0.tar.gz
    

    修改Linux系统的限制配置,将文件创建数修改为65536个。

    1. 修改系统中允许应用最多创建多少文件等的限制权限。Linux默认来说,一般限制应用最多
      创建的文件是65535个。但是ES至少需要65536的文件创建数的权限。
    2. 修改系统中允许用户启动的进程开启多少个线程。默认的Linux限制root用户开启的进程可
      以开启任意数量的线程,其他用户开启的进程可以开启1024个线程。必须修改限制数为
      4096+。因为ES至少需要4096的线程池预备。
    vi /etc/security/limits.conf
    #新增如下内容在limits.conf文件中
    es soft nofile 65536
    es hard nofile 65536
    es soft nproc 4096
    es hard nproc 4096
    

    修改系统控制权限,ElasticSearch需要开辟一个65536字节以上空间的虚拟内存。Linux默认不允许任何用户和应用程序直接开辟这么大的虚拟内存。

    vi /etc/sysctl.conf
    #新增如下内容在sysctl.conf文件中,当前用户拥有的内存权限大小
    vm.max_map_count=262144
    #让系统控制权限配置生效
    sysctl -p
    

    建一个用户, 用于ElasticSearch启动。

    ES在5.x版本之后,强制要求在linux中不能使用root用户启动ES进程。所以必须使用其他用户启
    动ES进程才可以。

    #创建用户
    useradd es
    #修改上述用户的密码
    passwd es
    #修改elasicsearch目录的拥有者
    chown -R es elasticsearch-6.4.0
    

    使用es用户启动elasticsearch

    #切换用户
    su es
    #到ElasticSearch的bin目录下
    cd bin/
    #后台启动
    ./elasticsearch -d
    

    默认ElasticSearch是不支持跨域访问的,所以在不修改配置文件的情况下我们只能从虚拟机内部进行访
    问测试ElasticSearch是否安装成功,使用curl命令访问9200端口:

    curl http://localhost:9200
    

    4.4 安装Skywalking

    • 安装Backend后端服务
    • 安装UI

    首先切回到root用户,切换到目录下,解压Skywalking压缩包。

    #切换到root用户
    su root
    #切换到skywalking目录
    cd /usr/local/skywalking
    #解压压缩包
    tar -zxvf apache-skywalking-apm-6.4.0.tar.gz
    

    修改Skywalking存储的数据源配置:

    cd apache-skywalking-apm-bin
    vi config/application.yml
    

    主要配置SkyWakling集群方式、数据存储,配置文件内容如下;

     # 配置skywalking集群
    cluster:
    # 这里采用zk,需要注意的是,在skywalking6.5版本中要求zk版本也必须大于3.5
    zookeeper:
      namespace: skywalking_brief
      # zk集群以","进行分割
      hostPort: 192.168.1.180:2283
      # 配置重试次数以及重试间隔
      baseSleepTimeMs: 3000
      maxRetries: 5
    # 核心配置
    core:
      default:
        role: ${SW_CORE_ROLE:Mixed}
        # backend配置,如果是Mixed或者Receiver类型,那么下面的配置将会生效,服务启动之后将会作为collector收集agent发送过来的链路数据
        restHost: ${SW_CORE_REST_HOST:0.0.0.0}
        restPort: ${SW_CORE_REST_PORT:12800}
        restContextPath: ${SW_CORE_CONTEXT_PATH: /}
        # gRPC配置
        gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
        gRPCPort: ${SW_CORE_GRPC_PORT:11800}
        downsampling:
          - Hour
          - Day
          - Month
        # 是否允许删除度量数据
        enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR: true}
        # datakeeper删除数据执行间隔,单位为分钟
        dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD: 5}
        # 单位是分钟
        recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90}
        minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90}
        hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36}
        dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45}
        monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18}
        enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION: true}
        # 配置数据存储方式,默认为H2,这里修改为宿主机上的ES
    storage:
      elasticsearch:
         namespace: elasticsearch
         #es地址,多master之间以","分割
         clusterNodes: 192.168.1.151:9800
         protocol: http
         # 配置index
         # index分片,es中默认为5,在skywalking中默认为2
         indexShardsNumber: 2
         # 分片备份数量,默认为0
         indexReplicasNumber: 0
         recordDataTTL: 7
         otherMetricsDataTTL: 45
         monthMetricsDataTTL: 18
         # 批量操作配置
         bulkActions: 2000          # 每2000个请求执行一次bulk操作
         flushsInterval: 5          # 每5s执行一次bulk操作,skywalking将会在至少一个条件满足的时候执行bulk操作
         concurrentRequests: 2
         resultWindowMaxSize: 10000
         metadataQueryMaxSize: 5000
         segmentQueryMaxSize: 200
    receiver-sharing-server:
      default:
    receiver-register:
      default: 
    receiver-trace:
      default:
        bufferPath: ${SW_RECEIVER_BUFFER_PATH:../trace-buffer/}
        # 单位为MB
        bufferOffsetMaxFileSize: ${SW_RECEIVER_BUFFER_OFFSET_MAX_FILE_SIZE: 100}
    bufferDataMaxFileSize: ${SW_RECEIVER_BUFFER_DATA_MAX_FILE_SIZE: 500}
       bufferFileCleanWhenRestart: ${SW_RECEIVER_BUFFER_FILE_CLEAN_WHEN_RESTART:false}
       # 实际采样率=1/10000 * sampleRate,默认为全采样
       sampleRate: ${SW_TRACE_SAMPLE_RATE: 10000}
    receiver-jvm:
      default: 
    receiver-clr:
      default: 
    # service-mesh是6.0.0之后添加的新功能
    service-mesh:
      default:
        bufferPath: ${SW_SERVICE_MESH_BUFFER_PATH:../mesh-buffer/}
        bufferOffsetMaxFileSize: ${SW_SERVICE_MESH_OFFSET_MAX_FILE_SIZE: 100}
        bufferDataMaxFileSize: ${SW_SERVICE_MESH_BUFFER_DATA_MAX_FILE_SIZE: 500}
        bufferFileCleanWhenRestart: ${SW_SERVICE_MESH_BUFFER_FILE_CLEAN_WHEN_RESTART: false}
    istio-telemetry:
      default:
    envoy-metric:
      default:
    query:
      graphql:
      path: ${SW_QUERY_GRAPHQL_PATH:/graphql}
    # 告警配置的具体配置在同级目录下的alarm-settings.xml中
    alarm:
      default:
    telemetry:
      none:
    # 配置webapp服务的注册中心
    configuration:
      none:
    

    注:一般情况下,只需要配置cluster和storage部分,其它部分保持默认即可。

    可以看到默认配置中,使用了H2作为数据源。将其全部注释。

    # h2:
    # driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
    # url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
    # user: ${SW_STORAGE_H2_USER:sa}
    # metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
    # mysql:
    # metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
    

    将ElasticSearch对应的配置取消注释:

    storage:
      elasticsearch:
        nameSpace: ${SW_NAMESPACE:""}
        clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
        protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
        trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
        trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
        user: ${SW_ES_USER:""}
        password: ${SW_ES_PASSWORD:""}
        indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
        indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
        # Those data TTL settings will override the same settings in core module.
        recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
        otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
        monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is
    month
    # # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docsbulk-
    processor.html
        bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every
    1000 requests
        flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10
    seconds whatever the number of requests
        concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of
    concurrent requests
        metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
        segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
    

    运行SkyWalking服务端

    # 首先打开collector的监听端口
    sudo firewall-cmd --zone=public --add-port=11800/tcp --permanent
    # 然后打开webapp的服务端口
    sudo firewall-cmd --zone=public --add-port=8888/tcp --permanent
    # 然后重启防火墙
    sudo systemctl restart firewalld
    

    默认使用了localhost下的ES,所以我们可以不做任何处理,直接进行使用。启动OAP程序:

    bin/oapService.sh
    

    这样安装Backend后端服务就已经完毕了,接下来我们安装UI。先来看一下UI的配置文件:

    cat webapp/webapp.yml
    
    #默认启动端口
    server:
        port: 8080
    # 配置collector地址以及路径 
    collector:
        # 和前面的config/application.yml中的query.path相对应
        path: /graphql
        ribbon:
            ReadTimeout: 10000
            #OAP服务,如果有多个用逗号隔开
            listOfServers: 127.0.0.1:12800
    

    目前的默认配置不用修改就可以使用,启动UI程序:

    /bin/webappService.sh
    

    然后我们就可以通过浏览器访问Skywalking的可视化页面了,访问地址:http://虚拟机IP地址:8080,查看安装是否成功。

    /bin/startup.sh可以同时启动backend和ui,后续可以执行该文件进行重启。

    相关文章

      网友评论

        本文标题:SkyWalking之一入门

        本文链接:https://www.haomeiwen.com/subject/smoirhtx.html