Spiga

微服务架构(七):链路监控

2018-04-09 11:32:52

什么是链路监控

APM

什么是链路

在分布式系统中,完成一个功能 ,需要涉及到许多服务协作,连接这些服务的请求组合起来就是链路,

例如:就好比一台自行车,我想让自行车跑起来,必须使用链条,那么这个链条就是链路。

什么是链路监控

就是用来记录服务之间的请求过程,就是链路监控

为什么要使用链路监控

见图,微服务不使用链路监控

  1. 微服务系统正常运行,时间正常情况下,不需要使用监控中心

  2. 在微服务调用过程中比较耗时情况

    2.1 如何知道是什么地方导致耗时,无法排查是哪一个节点出现了问题

  3. 在微服务调用过程中,涉及到哪些微服务情况

    3.1 无法知道微服务的调用过程。

在这两个问题的情况下,所以我们需要使用知道微服务之间的调用过程和每一个微服务掉调用过程所需要的时间。

根据场景中出现的问题,来引出链路监控

那么如何解决这两种问题呢,所以出现了链路监控

链路监控框架

Cat :大众点评开发,基于java的实时应用监控平台,包括实时应用监控,业务是监控

Zipkin :java 开发Zipkin是Twitter开源的调用链分析工具,目前基于springcloud sleuth得到了广泛的使用,特点是轻量,使用部署简单 :代码嵌入性强,基于中间件实现,

Pinpoint:java开发 Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入

SkyWalking:java 开发 SkyWalking是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache孵化器。全链路追踪,配置极其简单。没有任何代码入侵。

Naver的Pinpoint、Apache的HTrace、阿里的鹰眼Tracing、京东的Hydra、新浪的Watchman,美团点评的CAT,skywalking等。

根据优点和缺点(也是框架内部的一些配置和对比)进行比较得出结论

  1. 两方面考虑 结合框架特点,结合业务场景特点

所以我们选择SkyWalking

微服务系统中如何使用SkyWalking

SkyWalking概念

Skywalking Agent: SkyWalking客户端,用来发送链路数据到Collecter

SkyWalking Collecter:对于链路数据进行分析,处理,然后存储到storage

Skywalking Storage:对于分析的链路结果数据进行存储

SkyWalking UI:展示链路数据,方便监控

如何使用SkyWalking

条件

  1. JDK1.8
  2. Elasticsearch 6.6.0
  3. SkyWalking
  4. SkyAPM-dotnet
  5. api网关

步骤

  1. JDK 1.8操作

    1.1 jdk1.8下载

  2. Elasticsearch 6.6.0操作

    2.1 Elasticsearch 6.6.0下载

    下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-6-0

    2.2 Elasticsearch 6.6.0配置

    解压后,在elasticsearch-6.6.0/config目录下,在elasticsearch.yml内配置

network.host: 0.0.0.0
增加
thread_pool.bulk.queue_size: 1000

2.3 Elasticsearch 6.6.0启动

解压后,在elasticsearch-6.6.0/bin目录下,双击启动

elasticsearch.bat

2.4 Elasticsearch 6.6.0访问

输入访问地址:http://localhost:9200,显示页面,安装成功

  1. SkyWalking操作

    3.1 SkyWalking 下载

    下载地址:http://skywalking.apache.org/downloads/

    3.2 SkyWalking 配置

    解压后,在apache-skywalking-apm-bin/config目录下,在application.yml内配置

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-docs-bulk-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
    resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
    metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
    segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
#  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}

3.3 SkyWalking-webapp配置

切换到apache-skywalking-apm-bin/webapp目录,在webapp.yml配置

server:
port: 8081

3.4 SkyWalking 启动

解压后,在apache-skywalking-apm-bin/bin目录下,双击启动

输入地址进行访问:http://localhost:8081,响应结果,安装成功

  1. SkyAPM-dotnet操作

    4.1 SkyAPM-dotnet下载

    源码地址:https://github.com/SkyAPM/SkyAPM-dotnet#examples

  2. Api网关

    5.1 Api网关安装

    在Gateway项目中,Nuget安装

Nuget SkyAPM.Agent.AspNetCore
Nuget System.Data.SqlClient

5.2 Api网关配置

5.2.1 在Gateway项目中,创建skyapm.json

{
 "SkyWalking": {
   "ServiceName": "AggregateService",
   "Transport": {
     "gRPC": {
       "Servers": "localhost:11800"
     }
   }
 }
}

5.2.3 在Gateway项目launchSettings.json文件中

"environmentVariables": {
        "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
      }

5.2.4 启动Gateway进行访问

5.2.5 打开链路监控中心可以查看监控信息