Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目

1、什么是Skywalking

Skywalking是一个可观察性分析平台和应用性能管理系统,分布式系统的应用性能监视工具,专门为微服务,云原生和基于容器(Docker,Kubernetes,Mesos)的体系结构而设计。

跟踪,指标和日志记录多合一解决方案。

支持Java、.NET Core、PHP、NodeJS、Golang、Lua、C++代理

支持Istio + Envoy Service Mesh

轻量级: 没有大数据栈、采用不同的规模

模块化:存储可插拔、群集协调器可插拔、支持pull/push

由国内开源爱好者吴晟(原OneAPM工程师,目前在华为)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。

2、Skywalking功能优点

  • 服务、服务实例、端点度量分析

  • 根本原因分析。在运行时分析代码

  • 业务拓扑图分析

  • 服务、服务实例和端点依赖关系分析

  • 检测到缓慢的服务和端点

  • 性能优化

  • 分布式跟踪和上下文传播

  • 数据库访问指标。检测慢速数据库访问语句(包括SQL语句)

  • 报警:报警HTTP/gRPC转发器、Slack 通知、丁丁通知、微信通知、原始度量数据导出器

  • 浏览器性能监控

  • 基础设施(虚拟机,网络,磁盘等)监控

  • 跨度量、跟踪和日志的协作

3、技术架构

  • 流程图(我感觉官网的流程图好像 Recelver 单词错了receiver)
  • 架构图
    Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第1张图片
  • Agent(代理) :负责从应用中,无侵入式的收集,并通过HTTP或者gRPC方式发送数据到SkyWalking OAP 服务器;
  • SkyWalking OAP :负责接收Agent发送的Tracing数据信息,然后进行分析(Analysis Core),存储到外部存储器(Storage),最终提供查询(Query)功能;
  • Storage:Tracing数据存储,目前支持ES、MySQL、Sharding Sphere、TiDB、H2等多种存储器,SkyWalking开发团队自己的生产环境采用ES为主;
  • SkyWalking UI:负责提供控台,查看链路等等;

官网地址

配置信息可以查看官方代码

4、docker部署skywalking数据存储es

如果不持久化数据,默认存储到H2数据库,重启数据丢失

skywalking-oap-server镜像地址根据es自行选择:

  • docker pull apache/skywalking-oap-server:8.4.0-es7
  • docker pull apache/skywalking-oap-server:8.4.0-es6

skywalking-ui镜像地址:docker pull apache/skywalking-ui:8.4.0

4.1、执行docker 部署

  • skywalking-oap-server 启动命令 link后更换你的es容器名

    docker run --name oap --restart always -p 1234:1234 -p 11800:11800 -p 12800:12800 -d --link es:es -e SW_STORAGE=elasticsearch7 -e SW_STORAGE_ES_CLUSTER_NODES=es:9200 apache/skywalking-oap-server:8.4.0-es7

    更多配置信息可以参考如下或官网查看或者启动成功到容器中查看vi /skywalking/config/application.yml

      elasticsearch7:
        nameSpace: ${SW_NAMESPACE:""}
        clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
        protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
        trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
        trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
        dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.
        indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes
        indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes
        # Super data set has been defined in the codes, such as trace segments.The following 3 config would be improve es performance when storage super size data in es.
        superDatasetDayStep: ${SW_SUPERDATASET_STORAGE_DAY_STEP:-1} # Represent the number of days in the super size dataset record index, the default value is the same as dayStep when the value is less than 0
        superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} #  This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin and Jaeger traces.
        superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0.
        user: ${SW_ES_USER:""}
        password: ${SW_ES_PASSWORD:""}
        secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.
        bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the async bulk record data every ${SW_STORAGE_ES_BULK_ACTIONS} requests
        syncBulkActions: ${SW_STORAGE_ES_SYNC_BULK_ACTIONS:50000} # Execute the sync bulk metrics data every ${SW_STORAGE_ES_SYNC_BULK_ACTIONS} 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}
        profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
        oapAnalyzer: ${SW_STORAGE_ES_OAP_ANALYZER:"{\"analyzer\":{\"oap_analyzer\":{\"type\":\"stop\"}}}"} # the oap analyzer.
        oapLogAnalyzer: ${SW_STORAGE_ES_OAP_LOG_ANALYZER:"{\"analyzer\":{\"oap_log_analyzer\":{\"type\":\"standard\"}}}"} # the oap log analyzer. It could be customized by the ES analyzer configuration to support more language log formats, such as Chinese log, Japanese log and etc.
        advanced: ${SW_STORAGE_ES_ADVANCED:""}
    
  • skywalking-ui 启动命令 link后更换你的skywalking-oap-server容器名

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

成功后可以查看es中默认创建了很多索引
Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第2张图片

Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第3张图片

5、启动java 项目测试

Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第4张图片

5.1、linux 下载skywalking-agent.jar

下载地址

wget https://mirrors.bfsu.edu.cn/apache/skywalking/8.4.0/apache-skywalking-apm-es7-8.4.0.tar.gz

tar -zxvf apache-skywalking-apm-es7-8.4.0.tar.gz

Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第5张图片

5.2、Skywalking测试项目采集数据

  • java 项目启动
    #!/bin/sh
    # SkyWalking Agent配置
     #Agent名字,一般使用
    export SW_AGENT_NAME=travel-post-it-web-api`spring.application.name` 
    #配置 Collector 地址。
    export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.22.133:11800 
    #配置链路的最大Span数量,默认为 300。
    export SW_AGENT_SPAN_LIMIT=2000 
    # agent 包地址
    export JAVA_AGENT=-javaagent:/home/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar
    # 启动jar
    java $JAVA_AGENT -jar travel-post-it-web-api-1.0.0.jar 
    
    
  • 请求项目接口,查看Skywalking控制台是否有数据显示
    Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第6张图片

6、SkyWalking中三个概念

  • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载,在使用Agent时,可以定义服务的名字,我们可以看到 Spring Boot 应用服务为 “demo”,就是我们在环境变量 SW_AGENT_NAME 中所定义的;
  • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例, 一个服务实例实际就是操作系统上的一个真实进程;
    这里我们可以看到 Spring Boot 应用的服务为 {agent_name}-pid:{pid}@{hostname},由 Agent 自动生成;
  • 端点(Endpoint) :对于特定服务所接收的请求路径, 如HTTP的URI路径和gRPC服务的类名 + 方法签名;
    我们可以看到 Spring Boot 应用的一个端点,为API接口 /test1;

7、IDEA中配置Skywalking

Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第7张图片

  • -javaagent:D:\tool\Skywalking\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar

  • SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.22.133:11800;SW_AGENT_NAME=demo-idea

Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第8张图片
在拓扑图中能看到用户某个时间区间内访问了几个服务
Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第9张图片

8、注意问题

  • 如果发现请求项目接口skywalking中无数据
    • 数据是异步的,访问完项目后,可能需要等几秒才能看到跟踪数据;
    • 检查SW_AGENT_COLLECTOR_BACKEND_SERVICES地址是否正确
    • 检查skywalking控制台中时区和系统中时区
      Skywalking分布式链路跟踪(一)原理、docker搭建oap-ES7.x存储、配置java测试项目_第10张图片
  • telnet测试下skywalking-oap-server是否通

你可能感兴趣的:(#,SkyWalking,微服务,Skywalking,docker,apm-es7)