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,切勿尝试,如想尝试,请限度容器内存应用。
参考文档
- Skywalking 官网
- Skywalking 我的项目 README 文档 v8.4.0
分享并记录所学所见