乐趣区

关于java:Skywalking01Skywalking介绍

Skywalking 介绍

Application performance monitor tool for distributed systems, especially designed for microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures.

SkyWalking is an Observability Analysis Platform and Application Performance Management system.

Tracing, Metrics and Logging all-in-one solution.

Java, .Net Core, PHP, NodeJS, Golang, LUA, C++ agents supported

Istio + Envoy Service Mesh supported

Skywalking 文档构造

  • Welcome
  • Concepts and Designs

    • What is SkyWalking?

      • Overview and Core concepts
      • Project Goals
    • Project Goals

      • Introduction
      • Service auto instrument agent
      • Manual instrument SDK
      • Service Mesh probe
    • Backend

      • Overview
      • Observability Analysis Language
      • Query in OAP
      • Meter Analysis Language
    • UI

      • Overview
  • Setup

    • Language agents in Service

      • Agents
      • Java agent

        • Supported middleware, framework and library
        • Agent Configuration Properties
        • Optional plugins
        • Bootstrap/JVM class plugin
        • Advanced reporters
        • Plugin development guide
        • Agent plugin tests and performance tests
      • Other language agents
    • Service Mesh

      • Observe Istio Control Plane
      • Observe Service Mesh
    • Proxy

      • Envoy Proxy

        • Send Envoy metrics to SkyWalking with / without Istio
    • Backend, UI and CLI setup document

      • Backend setup document

        • Configuration Vocabulary
        • Overriding settings
        • IP and port setting
        • Backend init mode startup
        • Cluster management
        • Deploy in kubernetes
        • Choose storage
        • Set receivers
        • Open fetchers
        • Trace sampling
        • Slow DB statement threshold
        • OAL scripts
        • Alarm
        • Advanced deployment options
        • Metrics exporter
        • Time To Live (TTL)
        • Dynamic Configuration
        • Uninstrumented Gateways
        • Apdex threshold
        • Service Grouping
        • Group Parameterized Endpoints
        • OpenTelemetry Metrics Analysis
        • Meter Analysis
        • Spring Sleuth Metrics Analysis
      • UI setup document
      • CLI setup document
  • UI Introduction
  • Contributing Guides

    • Contact us
    • Process to become official Apache SkyWalking Committer
    • Compiling Guide
    • Agent plugin development guide
  • Protocols

    • Query Protocol
  • FAQs

PS:附上一个 V8.0.0 中文文档

怎么读文档

Skywalking 官网文档的组织构造很清晰。读下 Welcome,就能大抵理解文档构造,而后选感兴趣的读。

Skywalking 我的项目构造

部署我的项目构造

.
├── bin # 执行文件
│   ├── oapService.bat
│   ├── oapServiceInit.bat
│   ├── oapServiceInit.sh # 启动 oap 并初始化,oap 集群中应用
│   ├── oapServiceNoInit.bat
│   ├── oapServiceNoInit.sh # 只启动 oap,oap 集群中应用
│   ├── oapService.sh # 启动 oap 并初始化
│   ├── startup.bat
│   ├── startup.sh # 启动 oap 并初始化,同时启动 ui
│   ├── webappService.bat
│   └── webappService.sh # 启动 ui
├── config # oap 配置文件
│   ├── alarm-settings-sample.yml
│   ├── alarm-settings.yml # 告警配置
│   ├── application.yml # oap 主配置文件
│   ├── component-libraries.yml
│   ├── endpoint-name-grouping.yml
│   ├── envoy-metrics-rules
│   │   └── envoy.yaml
│   ├── fetcher-prom-rules # Prometheus Fetcher 配置文件
│   │   └── self.yaml
│   ├── gateways.yml
│   ├── log4j2.xml
│   ├── metadata-service-mapping.yaml 
│   ├── meter-analyzer-config Meter # Receiver 配置文件
│   │   └── spring-sleuth.yaml
│   ├── oal # oal 配置文件
│   │   ├── browser.oal
│   │   ├── core.oal
│   │   ├── dotnet-agent.oal
│   │   └── java-agent.oal
│   ├── otel-oc-rules # OpenTelemetry receiver 规定
│   │   ├── istio-controlplane.yaml
│   │   ├── oap.yaml
│   │   └── vm.yaml
│   ├── service-apdex-threshold.yml # apdex 阈值配置
│   └── ui-initialized-templates # ui 配置模板
│       ├── apm.yml
│       ├── browser.yml
│       ├── database.yml
│       ├── istio-dp.yml
│       ├── istio.yml
│       ├── self-observability.yml
│       ├── spring-sleuth.yml
│       ├── topology-endpoint.yml
│       ├── topology-instance.yml
│       └── vm.yml
├── licenses # 证书
├── logs # 日志目录
├── oap-libs # 依赖库
├── tools # 开发运维工具
│   └── profile-exporter # 导出 trace 原始数据
│       ├── application.yml
│       ├── profile_exporter_log4j2.xml
│       └── profile_exporter.sh
└── webapp # ui 我的项目
│   ├── skywalking-webapp.jar
│   └── webapp.yml
├── LICENSE
├── NOTICE
└── README.txt

agent 目录构造

.
├── activations # 工具包,提供 日志打印 TID、跨线程传递 TID 等性能
│   ├── apm-toolkit-kafka-activation-8.4.0.jar
│   ├── apm-toolkit-log4j-1.x-activation-8.4.0.jar
│   ├── apm-toolkit-log4j-2.x-activation-8.4.0.jar
│   ├── apm-toolkit-logback-1.x-activation-8.4.0.jar
│   ├── apm-toolkit-logging-common-8.4.0.jar
│   ├── apm-toolkit-meter-activation-8.4.0.jar
│   ├── apm-toolkit-opentracing-activation-8.4.0.jar
│   └── apm-toolkit-trace-activation-8.4.0.jar
├── bootstrap-plugins # All bootstrap plugins are optional, due to unexpected risk.
│   ├── apm-jdk-http-plugin-8.4.0.jar
│   └── apm-jdk-threading-plugin-8.4.0.jar
├── config # agent 配置文件
│   └── agent.config
├── logs # 日志目录
├── optional-plugins # 可选插件
│   ├── apm-customize-enhance-plugin-8.4.0.jar
│   ├── apm-gson-2.x-plugin-8.4.0.jar
│   ├── apm-kotlin-coroutine-plugin-8.4.0.jar
│   ├── apm-quartz-scheduler-2.x-plugin-8.4.0.jar
│   ├── apm-spring-annotation-plugin-8.4.0.jar
│   ├── apm-spring-cloud-gateway-2.0.x-plugin-8.4.0.jar
│   ├── apm-spring-cloud-gateway-2.1.x-plugin-8.4.0.jar
│   ├── apm-spring-tx-plugin-8.4.0.jar
│   ├── apm-spring-webflux-5.x-plugin-8.4.0.jar
│   ├── apm-trace-ignore-plugin-8.4.0.jar
│   └── apm-zookeeper-3.4.x-plugin-8.4.0.jar
├── optional-reporter-plugins # 可选的 reporter 插件
│   └── kafka-reporter-plugin-8.4.0.jar
├── plugins # 插件目录,放在该目录下的插件才会失效
│   ├── apm-activemq-5.x-plugin-8.4.0.jar
│   ├── apm-armeria-0.84.x-plugin-8.4.0.jar
│   ├── apm-armeria-0.85.x-plugin-8.4.0.jar
│   ├── apm-asynchttpclient-2.x-plugin-8.4.0.jar
│   ├── apm-avro-plugin-8.4.0.jar
│   ├── apm-canal-1.x-plugin-8.4.0.jar
│   ├── apm-cassandra-java-driver-3.x-plugin-8.4.0.jar
│   ├── apm-cxf-3.x-plugin-8.4.0.jar
│   ├── apm-dubbo-2.7.x-plugin-8.4.0.jar
│   ├── apm-dubbo-plugin-8.4.0.jar
│   ├── apm-ehcache-2.x-plugin-8.4.0.jar
│   ├── apm-elastic-job-2.x-plugin-8.4.0.jar
│   ├── apm-elastic-job-3.x-plugin-8.4.0.jar
│   ├── apm-elasticsearch-5.x-plugin-8.4.0.jar
│   ├── apm-elasticsearch-6.x-plugin-8.4.0.jar
│   ├── apm-feign-default-http-9.x-plugin-8.4.0.jar
│   ├── apm-finagle-6.25.x-plugin-8.4.0.jar
│   ├── apm-grpc-1.x-plugin-8.4.0.jar
│   ├── apm-h2-1.x-plugin-8.4.0.jar
│   ├── apm-hbase-1.x-plugin-8.4.0.jar
│   ├── apm-httpasyncclient-4.x-plugin-8.4.0.jar
│   ├── apm-httpclient-3.x-plugin-8.4.0.jar
│   ├── apm-httpClient-4.x-plugin-8.4.0.jar
│   ├── apm-httpclient-commons-8.4.0.jar
│   ├── apm-hystrix-1.x-plugin-8.4.0.jar
│   ├── apm-influxdb-2.x-plugin-8.4.0.jar
│   ├── apm-jdbc-commons-8.4.0.jar
│   ├── apm-jedis-2.x-plugin-8.4.0.jar
│   ├── apm-jetty-client-9.0-plugin-8.4.0.jar
│   ├── apm-jetty-client-9.x-plugin-8.4.0.jar
│   ├── apm-jetty-server-9.x-plugin-8.4.0.jar
│   ├── apm-kafka-commons-8.4.0.jar
│   ├── apm-kafka-plugin-8.4.0.jar
│   ├── apm-lettuce-5.x-plugin-8.4.0.jar
│   ├── apm-light4j-plugin-8.4.0.jar
│   ├── apm-mariadb-2.x-plugin-8.4.0.jar
│   ├── apm-mongodb-2.x-plugin-8.4.0.jar
│   ├── apm-mongodb-3.x-plugin-8.4.0.jar
│   ├── apm-mongodb-4.x-plugin-8.4.0.jar
│   ├── apm-mssql-commons-8.4.0.jar
│   ├── apm-mssql-jdbc-plugin-8.4.0.jar
│   ├── apm-mssql-jtds-1.x-plugin-8.4.0.jar
│   ├── apm-mysql-5.x-plugin-8.4.0.jar
│   ├── apm-mysql-6.x-plugin-8.4.0.jar
│   ├── apm-mysql-8.x-plugin-8.4.0.jar
│   ├── apm-mysql-commons-8.4.0.jar
│   ├── apm-netty-socketio-plugin-8.4.0.jar
│   ├── apm-nutz-http-1.x-plugin-8.4.0.jar
│   ├── apm-nutz-mvc-annotation-1.x-plugin-8.4.0.jar
│   ├── apm-okhttp-3.x-plugin-8.4.0.jar
│   ├── apm-play-2.x-plugin-8.4.0.jar
│   ├── apm-postgresql-8.x-plugin-8.4.0.jar
│   ├── apm-pulsar-plugin-8.4.0.jar
│   ├── apm-quasar-plugin-8.4.0.jar
│   ├── apm-rabbitmq-5.x-plugin-8.4.0.jar
│   ├── apm-redisson-3.x-plugin-8.4.0.jar
│   ├── apm-resttemplate-4.3.x-plugin-8.4.0.jar
│   ├── apm-rocketmq-3.x-plugin-8.4.0.jar
│   ├── apm-rocketmq-4.x-plugin-8.4.0.jar
│   ├── apm-servicecomb-java-chassis-0.x-plugin-8.4.0.jar
│   ├── apm-servicecomb-java-chassis-1.x-plugin-8.4.0.jar
│   ├── apm-sharding-jdbc-1.5.x-plugin-8.4.0.jar
│   ├── apm-sharding-sphere-3.x-plugin-8.4.0.jar
│   ├── apm-shardingsphere-4.0.x-plugin-8.4.0.jar
│   ├── apm-sharding-sphere-4.1.0-plugin-8.4.0.jar
│   ├── apm-sharding-sphere-4.x-plugin-8.4.0.jar
│   ├── apm-sharding-sphere-4.x-rc3-plugin-8.4.0.jar
│   ├── apm-solrj-7.x-plugin-8.4.0.jar
│   ├── apm-spring-async-annotation-plugin-8.4.0.jar
│   ├── apm-spring-cloud-feign-1.x-plugin-8.4.0.jar
│   ├── apm-spring-cloud-feign-2.x-plugin-8.4.0.jar
│   ├── apm-spring-concurrent-util-4.x-plugin-8.4.0.jar
│   ├── apm-spring-core-patch-8.4.0.jar
│   ├── apm-spring-kafka-1.x-plugin-8.4.0.jar
│   ├── apm-spring-kafka-2.x-plugin-8.4.0.jar
│   ├── apm-springmvc-annotation-3.x-plugin-8.4.0.jar
│   ├── apm-springmvc-annotation-4.x-plugin-8.4.0.jar
│   ├── apm-springmvc-annotation-5.x-plugin-8.4.0.jar
│   ├── apm-springmvc-annotation-commons-8.4.0.jar
│   ├── apm-spring-scheduled-annotation-plugin-8.4.0.jar
│   ├── apm-spymemcached-2.x-plugin-8.4.0.jar
│   ├── apm-struts2-2.x-plugin-8.4.0.jar
│   ├── apm-undertow-2.x-plugin-8.4.0.jar
│   ├── apm-vertx-core-3.x-plugin-8.4.0.jar
│   ├── apm-xmemcached-2.x-plugin-8.4.0.jar
│   ├── apm-xxl-job-2.x-plugin-8.4.0.jar
│   ├── baidu-brpc-plugin-8.4.0.jar
│   ├── dbcp-2.x-plugin-8.4.0.jar
│   ├── dubbo-2.7.x-conflict-patch-8.4.0.jar
│   ├── dubbo-conflict-patch-8.4.0.jar
│   ├── graphql-12.x-plugin-8.4.0.jar
│   ├── graphql-8.x-plugin-8.4.0.jar
│   ├── graphql-9.x-plugin-8.4.0.jar
│   ├── motan-plugin-8.4.0.jar
│   ├── resteasy-server-3.x-plugin-8.4.0.jar
│   ├── sofa-rpc-plugin-8.4.0.jar
│   ├── spring-commons-8.4.0.jar
│   ├── spring-webflux-5.x-webclient-plugin-8.4.0.jar
│   ├── thrift-plugin-8.4.0.jar
│   └── tomcat-7.x-8.x-plugin-8.4.0.jar
└── skywalking-agent.jar # agent 入口 

源码我的项目构造

.
├── apm-application-toolkit # 工具包
│   ├── apm-toolkit-kafka
│   ├── apm-toolkit-log4j-1.x
│   ├── apm-toolkit-log4j-2.x
│   ├── apm-toolkit-logback-1.x
│   ├── apm-toolkit-meter
│   ├── apm-toolkit-micrometer-registry
│   ├── apm-toolkit-opentracing
│   └── apm-toolkit-trace
├── apm-checkstyle # checkstyle 配置目录
├── apm-commons # common 包相干
│   ├── apm-datacarrier
│   └── apm-util
├── apm-dist # 构建后生成的可执行我的项目目录
├── apm-dist-es7 # 构建后生成的可执行我的项目目录 base:es7
├── apm-protocol # 协定
│   └── apm-network
├── apm-sniffer # agent 相干
│   ├── apm-agent
│   ├── apm-agent-core
│   ├── apm-sdk-plugin
│   │   ├── activemq-5.x-plugin
│   │   ├── armeria-0.84.x-plugin
│   │   ├── armeria-0.85.x-plugin
│   │   ├── asynchttpclient-2.x-plugin
│   │   ├── avro-plugin
│   │   ├── baidu-brpc-plugin
│   │   ├── canal-1.x-plugin
│   │   ├── cassandra-java-driver-3.x-plugin
│   │   ├── cxf-3.x-plugin
│   │   ├── dbcp-2.x-plugin
│   │   ├── dubbo-2.7.x-conflict-patch
│   │   ├── dubbo-2.7.x-plugin
│   │   ├── dubbo-conflict-patch
│   │   ├── dubbo-plugin
│   │   ├── ehcache-2.x-plugin
│   │   ├── elastic-job-2.x-plugin
│   │   ├── elastic-job-3.x-plugin
│   │   ├── elasticsearch-5.x-plugin
│   │   ├── elasticsearch-6.x-plugin
│   │   ├── feign-default-http-9.x-plugin
│   │   ├── finagle-6.25.x-plugin
│   │   ├── graphql-plugin
│   │   │   ├── graphql-12.x-plugin
│   │   │   ├── graphql-8.x-plugin
│   │   │   └── graphql-9.x-plugin
│   │   ├── grpc-1.x-plugin
│   │   ├── h2-1.x-plugin
│   │   ├── hbase-1.x-plugin
│   │   ├── httpClient-4.x-plugin
│   │   ├── httpasyncclient-4.x-plugin
│   │   ├── httpclient-3.x-plugin
│   │   ├── httpclient-commons
│   │   ├── hystrix-1.x-plugin
│   │   ├── influxdb-2.x-plugin
│   │   ├── jdbc-commons
│   │   ├── jedis-2.x-plugin
│   │   ├── jetty-plugin
│   │   │   ├── jetty-client-9.0-plugin
│   │   │   ├── jetty-client-9.x-plugin
│   │   │   └── jetty-server-9.x-plugin
│   │   ├── kafka-commons
│   │   ├── kafka-plugin
│   │   ├── lettuce-5.x-plugin
│   │   ├── light4j-plugins
│   │   │   └── light4j-plugin
│   │   ├── mariadb-2.x-plugin
│   │   ├── mongodb-2.x-plugin
│   │   ├── mongodb-3.x-plugin
│   │   ├── mongodb-4.x-plugin
│   │   ├── motan-plugin
│   │   ├── mssql-commons
│   │   ├── mssql-jdbc-plugin
│   │   ├── mssql-jtds-1.x-plugin
│   │   ├── mysql-5.x-plugin
│   │   ├── mysql-6.x-plugin
│   │   ├── mysql-8.x-plugin
│   │   ├── mysql-common
│   │   ├── netty-socketio-plugin
│   │   ├── nutz-plugins
│   │   │   ├── http-1.x-plugin
│   │   │   └── mvc-annotation-1.x-plugin
│   │   ├── okhttp-3.x-plugin
│   │   ├── play-2.x-plugin
│   │   ├── postgresql-8.x-plugin
│   │   ├── pulsar-plugin
│   │   ├── quasar-plugin
│   │   ├── rabbitmq-5.x-plugin
│   │   ├── redisson-3.x-plugin
│   │   ├── resteasy-plugin
│   │   │   └── resteasy-server-3.x-plugin
│   │   ├── rocketMQ-3.x-plugin
│   │   ├── rocketMQ-4.x-plugin
│   │   ├── servicecomb-plugin
│   │   │   ├── servicecomb-java-chassis-0.x-plugin
│   │   │   └── servicecomb-java-chassis-1.x-plugin
│   │   ├── sharding-jdbc-1.5.x-plugin
│   │   ├── sharding-sphere-3.x-plugin
│   │   ├── sharding-sphere-4.0.x-plugin
│   │   ├── sharding-sphere-4.1.0-plugin
│   │   ├── sharding-sphere-4.x-RC3-plugin
│   │   ├── sharding-sphere-4.x-plugin
│   │   ├── sofarpc-plugin
│   │   ├── solrj-7.x-plugin
│   │   ├── spring-plugins
│   │   │   ├── async-annotation-plugin
│   │   │   ├── concurrent-util-4.x-plugin
│   │   │   ├── core-patch
│   │   │   ├── mvc-annotation-3.x-plugin
│   │   │   ├── mvc-annotation-4.x-plugin
│   │   │   ├── mvc-annotation-5.x-plugin
│   │   │   ├── mvc-annotation-commons
│   │   │   ├── resttemplate-4.x-plugin
│   │   │   ├── scheduled-annotation-plugin
│   │   │   ├── spring-cloud
│   │   │   │   ├── netflix-plugins
│   │   │   │   │   └── spring-cloud-feign-1.x-plugin
│   │   │   │   └── spring-cloud-feign-2.x-plugin
│   │   │   ├── spring-commons
│   │   │   ├── spring-kafka-1.x-plugin
│   │   │   ├── spring-kafka-2.x-plugin
│   │   │   └── spring-webflux-5.x-webclient-plugin
│   │   ├── spymemcached-2.x-plugin
│   │   ├── struts2-2.x-plugin
│   │   ├── thrift-plugin
│   │   ├── tomcat-7.x-8.x-plugin
│   │   ├── undertow-plugins
│   │   │   └── undertow-2.x-plugin
│   │   ├── vertx-plugins
│   │   │   └── vertx-core-3.x-plugin
│   │   ├── xmemcached-2.x-plugin
│   │   └── xxl-job-2.x-plugin
│   ├── apm-test-tools
│   ├── apm-toolkit-activation
│   │   ├── apm-toolkit-kafka-activation
│   │   ├── apm-toolkit-log4j-1.x-activation
│   │   ├── apm-toolkit-log4j-2.x-activation
│   │   ├── apm-toolkit-logback-1.x-activation
│   │   ├── apm-toolkit-logging-common
│   │   ├── apm-toolkit-meter-activation
│   │   ├── apm-toolkit-opentracing-activation
│   │   └── apm-toolkit-trace-activation
│   ├── bootstrap-plugins
│   │   ├── jdk-http-plugin
│   │   └── jdk-threading-plugin
│   ├── config
│   ├── optional-plugins
│   │   ├── customize-enhance-plugin
│   │   ├── gson-2.8.x-plugin
│   │   ├── kotlin-coroutine-plugin
│   │   ├── optional-spring-plugins
│   │   │   ├── optional-spring-cloud
│   │   │   │   ├── gateway-2.0.x-plugin
│   │   │   │   └── gateway-2.1.x-plugin
│   │   │   ├── spring-annotation-plugin
│   │   │   ├── spring-tx-plugin
│   │   │   └── spring-webflux-5.x-plugin
│   │   ├── quartz-scheduler-2.x-plugin
│   │   ├── trace-ignore-plugin
│   │   └── zookeeper-3.4.x-plugin
│   └── optional-reporter-plugins
│       └── kafka-reporter-plugin
├── apm-webapp # ui 我的项目后端
├── changes # change 日志目录
├── dist-material # 生成的可执行我的项目相干配置目录
│   ├── bin
│   └── release-docs
│       └── licenses
│           └── ui-licenses
├── docker # 生成 docker 镜像
│   ├── oap
│   └── ui
├── docs # 官网文档目录
├── licenses # 证书目录
├── oap-server # oap 服务相干
│   ├── analyzer # 分析器
│   │   ├── agent-analyzer
│   │   ├── log-analyzer
│   │   └── meter-analyzer
│   ├── exporter
│   ├── oal-grammar # oal 解释器
│   ├── oal-rt # oal 工具
│   ├── server-alarm-plugin # 告警插件
│   ├── server-bootstrap
│   ├── server-cluster-plugin # 集群插件
│   │   ├── cluster-consul-plugin
│   │   ├── cluster-etcd-plugin
│   │   ├── cluster-kubernetes-plugin
│   │   ├── cluster-nacos-plugin
│   │   ├── cluster-standalone-plugin
│   │   └── cluster-zookeeper-plugin
│   ├── server-configuration # 动静配置
│   │   ├── configuration-api
│   │   ├── configuration-apollo
│   │   ├── configuration-consul
│   │   ├── configuration-etcd
│   │   ├── configuration-k8s-configmap
│   │   ├── configuration-nacos
│   │   ├── configuration-zookeeper
│   │   └── grpc-configuration-sync
│   ├── server-core # 外围包
│   ├── server-fetcher-plugin # fetcher 插件
│   │   ├── kafka-fetcher-plugin
│   │   └── prometheus-fetcher-plugin
│   ├── server-health-checker # 衰弱监测
│   ├── server-library # 
│   │   ├── library-client
│   │   ├── library-module
│   │   ├── library-server
│   │   └── library-util
│   ├── server-query-plugin # 查问插件
│   │   └── query-graphql-plugin
│   ├── server-receiver-plugin # receiver 插件
│   │   ├── configuration-discovery-receiver-plugin
│   │   ├── envoy-metrics-receiver-plugin
│   │   ├── jaeger-receiver-plugin
│   │   ├── otel-receiver-plugin
│   │   ├── receiver-proto
│   │   ├── skywalking-browser-receiver-plugin
│   │   ├── skywalking-clr-receiver-plugin
│   │   ├── skywalking-jvm-receiver-plugin
│   │   ├── skywalking-log-recevier-plugin
│   │   ├── skywalking-management-receiver-plugin
│   │   ├── skywalking-mesh-receiver-plugin
│   │   ├── skywalking-meter-receiver-plugin
│   │   ├── skywalking-profile-receiver-plugin
│   │   ├── skywalking-sharing-server-plugin
│   │   ├── skywalking-trace-receiver-plugin
│   │   └── zipkin-receiver-plugin
│   ├── server-starter # 启动器
│   ├── server-starter-es7 # 启动器 es7
│   ├── server-storage-plugin # 存储插件
│   │   ├── storage-elasticsearch-plugin
│   │   ├── storage-elasticsearch7-plugin
│   │   ├── storage-influxdb-plugin
│   │   ├── storage-jaeger-plugin
│   │   ├── storage-jdbc-hikaricp-plugin
│   │   ├── storage-tidb-plugin
│   │   └── storage-zipkin-plugin
│   ├── server-telemetry # 遥测
│   │   ├── telemetry-api
│   │   └── telemetry-prometheus
│   ├── server-testing # 
│   └── server-tools # 服务工具
│       └── profile-exporter
│           ├── tool-profile-snapshot-bootstrap
│           ├── tool-profile-snapshot-exporter
│           ├── tool-profile-snapshot-exporter-es7
│           └── tool-profile-snapshot-server-mock
├── skywalking-ui # UI 前端
├── test # 集成测试
└── tools # 工具
│   ├── TLS
│   ├── coverage
│   ├── dependencies
│   ├── plugin
│   ├── profile-exporter
│   ├── releasing
│   └── select-group.py
├── CHANGES.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── HEADER
├── LICENSE
├── Makefile # 构建文件
├── NOTICE
├── README.md # README
├── codeStyle.xml
├── lombok.config
├── mvnw
├── mvnw.cmd
└── pom.xml

Skywalking 环境搭建

部署文件构造

.
├── docker-compose.yml # docker-compose 部署文件
├── es # es 集群目录
│   ├── es01
│   ├── es02
│   └── es03
├── kibana # kibana 配置目录
│   └── kibana.yml
├── mysql # mysql 存储目录
├── nacos # nacos 配置目录
│   ├── init.d
│   │   └── custom.properties
│   ├── nacos01
│   ├── nacos02
│   └── nacos03
├── prometheus # prometheus 配置目录
│   └── prometheus-cluster.yaml
├── skywalking # skywalking 配置目录
│   ├── oap # oap 服务配置
│   │   ├── oap01
│   │   │   └── config
│   │   └── oap02
│   │       └── config
│   └── ui # ui 服务配置
│       └── webapp.yml
└── startup.sh # docker-compose 脚本,提供易用性性能 

docker-compose.yaml

version: '3.5'

networks:
  skywalking_networks:
    ipam:
      config:
        - subnet: 192.168.200.0/24

# elastic search 参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.13/docker.html
# kibana 参考:https://www.elastic.co/guide/en/kibana/7.13/docker.html
# nacos 参考:https://github.com/nacos-group/nacos-docker/tree/2.0.1
# nacos prometheus grafana 监控参考:https://nacos.io/zh-cn/docs/monitor-guide.html
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ES_TAG}
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - cluster.max_shards_per_node=100000
      - thread_pool.write.queue_size=1000
      - cluster.routing.allocation.disk.threshold_enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - "./es/es01/data:/usr/share/elasticsearch/data"
    ports:
      - 9201:9200
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.10
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ES_TAG}
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - cluster.max_shards_per_node=100000
      - thread_pool.write.queue_size=1000
      - cluster.routing.allocation.disk.threshold_enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - "./es/es02/data:/usr/share/elasticsearch/data"
    ports:
      - 9202:9200
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.11
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ES_TAG}
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m"
      - cluster.max_shards_per_node=100000
      - thread_pool.write.queue_size=1000
      - cluster.routing.allocation.disk.threshold_enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes: 
      - "./es/es03/data:/usr/share/elasticsearch/data"
    ports:
      - 9203:9200
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.12
  kibana:
    image: docker.elastic.co/kibana/kibana:${ES_TAG}
    volumes:
      - "./kibana/kibana.yml:/usr/share/kibana/config/kibana.yml"
    ports:
      - 5601:5601
    depends_on:
      - es01
      - es02
      - es03
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.20
  nacos01:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos01
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.30
    volumes:
      - ./nacos/nacos01/logs:/home/nacos/logs
      - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    environment:
      - JVM_XMS=128m
      - JVM_XMX=512m
      - JVM_XMN=256m
      - JVM_MS=128m
      - JVM_MMS=256m
      - NACOS_SERVERS=192.168.200.30:8848 192.168.200.31:8848 192.168.200.32:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos_devtest
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    depends_on:
      - mysql
  nacos02:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos02
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.31
    volumes:
      - ./nacos/nacos02/logs:/home/nacos/logs
      - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8849:8848"
      - "9849:9848"
    environment:
      - JVM_XMS=128m
      - JVM_XMX=512m
      - JVM_XMN=256m
      - JVM_MS=128m
      - JVM_MMS=256m
      - NACOS_SERVERS=192.168.200.30:8848 192.168.200.31:8848 192.168.200.32:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos_devtest
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    depends_on:
      - mysql
  nacos03:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos03
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.32
    volumes:
      - ./nacos/nacos03/logs:/home/nacos/logs
      - ./nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8850:8848"
      - "9850:9848"
    environment:
      - JVM_XMS=128m
      - JVM_XMX=512m
      - JVM_XMN=256m
      - JVM_MS=128m
      - JVM_MMS=256m
      - NACOS_SERVERS=192.168.200.30:8848 192.168.200.31:8848 192.168.200.32:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos_devtest
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    depends_on:
      - mysql
  mysql:
    container_name: mysql
    image: nacos/nacos-mysql:5.7
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.40
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=nacos_devtest
      - MYSQL_USER=nacos
      - MYSQL_PASSWORD=nacos
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3307:3306"
  prometheus:
    container_name: prometheus
    image: prom/prometheus:${PROMETHEUS_VERSION}
    volumes:
      - ./prometheus/prometheus-cluster.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - nacos01
      - nacos02
      - nacos03
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.50
  grafana:
    container_name: grafana
    image: grafana/grafana:${GRAFANA_VERSION}
    ports:
      - 3000:3000
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.60
  skywalking-oap01:
    image: switchvov/skywalking-oap:${TAG}
    container_name: skywalking-oap01
    depends_on:
      - es01
      - es02
      - es03
      - nacos01
      - nacos02
      - nacos03
    volumes:
      - "./skywalking/oap/oap01/config:/skywalking/config"
    ports:
      - 11801:11800
      - 12801:12800
    environment:
      JAVA_OPTS: "-Xms256M -Xmx1024M"
      # es7 存储
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: es01:9200,es02:9200,es03:9200
      # 健康检查
      SW_HEALTH_CHECKER: default
      # telemetry 与 prometheus
      SW_TELEMETRY: prometheus
      # 须要更改 self->staticConfig->targets->url 为以后容器名
      # SW_PROMETHEUS_FETCHER: default
      TZ: Asia/Shanghai
      # 集群模式
      SW_CLUSTER: nacos
      SW_CLUSTER_NACOS_HOST_PORT: nacos01:8848,nacos02:8848,nacos03:8848
      SW_CLUSTER_NACOS_USERNAME: nacos
      SW_CLUSTER_NACOS_PASSWORD: nacos
      SW_CLUSTER_NACOS_INTERNAL_COM_HOST: 192.168.200.100
      SW_CLUSTER_NACOS_INTERNAL_COM_PORT: 11800
      # 动静配置
      SW_CONFIGURATION: nacos
      SW_CONFIG_NACOS_SERVER_ADDR: nacos01
      SW_CONFIG_NACOS_SERVER_PORT: 8848
      SW_CONFIG_NACOS_SERVER_GROUP: skywalking
      SW_CONFIG_NACOS_SERVER_NAMESPACE: skywalking
      SW_CONFIG_NACOS_USERNAME: nacos
      SW_CONFIG_NACOS_PASSWORD: nacos
    restart: on-failure
    healthcheck:
      test: ["CMD", "./bin/swctl", "ch"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.100
  skywalking-oap02:
    image: switchvov/skywalking-oap:${TAG}
    container_name: skywalking-oap02
    depends_on:
      - es01
      - es02
      - es03
      - nacos01
      - nacos02
      - nacos03
    volumes:
      - "./skywalking/oap/oap02/config:/skywalking/config"
    ports:
      - 11802:11800
      - 12802:12800
    environment:
      JAVA_OPTS: "-Xms256M -Xmx1024M"
      # es7 存储
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: es01:9200,es02:9200,es03:9200
      # 健康检查
      SW_HEALTH_CHECKER: default
      # telemetry 与 prometheus
      SW_TELEMETRY: prometheus
      # 须要更改 self->staticConfig->targets->url 为以后容器名
      # SW_PROMETHEUS_FETCHER: default
      TZ: Asia/Shanghai
      # 集群模式
      SW_CLUSTER: nacos
      SW_CLUSTER_NACOS_HOST_PORT: nacos01:8848,nacos02:8848,nacos03:8848
      SW_CLUSTER_NACOS_USERNAME: nacos
      SW_CLUSTER_NACOS_PASSWORD: nacos
      SW_CLUSTER_NACOS_INTERNAL_COM_HOST: 192.168.200.101
      SW_CLUSTER_NACOS_INTERNAL_COM_PORT: 11800
      # 动静配置
      SW_CONFIGURATION: nacos
      SW_CONFIG_NACOS_SERVER_ADDR: nacos01
      SW_CONFIG_NACOS_SERVER_PORT: 8848
      SW_CONFIG_NACOS_SERVER_GROUP: skywalking
      SW_CONFIG_NACOS_SERVER_NAMESPACE: skywalking
      SW_CONFIG_NACOS_USERNAME: nacos
      SW_CONFIG_NACOS_PASSWORD: nacos
    restart: on-failure
    healthcheck:
      test: ["CMD", "./bin/swctl", "ch"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.101
  skywalking-ui:
    image: switchvov/skywalking-ui:${TAG}
    container_name: skywalking-ui
    depends_on:
      - skywalking-oap01
      - skywalking-oap02
    ports:
      - 18080:8080
    volumes:
      - "./skywalking/ui/webapp.yml:/skywalking/webapp/webapp.yml"
    environment:
      SW_OAP_ADDRESS: skywalking-oap01:12800,skywalking-oap02:12800
    networks:
      skywalking_networks:
        ipv4_address: 192.168.200.110
    deploy:
      resources:
        limits:
          memory: 768M

部署文件:docker.zip

PS:可用内存未大于 11G,切勿尝试,如想尝试,请限度容器内存应用。

参考文档

  1. Skywalking 官网
  2. Skywalking 我的项目 README 文档 v8.4.0

分享并记录所学所见

退出移动版