SkyWalking is an Application Performance Monitoring(APM) system which based on distributed tracing. It is one of the most promising projects incubating under the roof of Apache Software Foundation.
The first SkyWalking release was in December 2015. Current latest stable version is 5.0.0-GA, and 6.0 Alpha is already around the corner.
SkyWalking is a modular system based on OpenTracing. It endorses CNCF principles and designed to handle complex microservice-based architectures. Best suited for containerised environments running on Docker/Kubernetes.
SkyWalking developed by Chinese open source community and often overlooked by western companies. Whilst in China it is becoming one of the most popular open-source APMs on the market.
What makes SW so attractive?
The OpenTracing's definition of Distributed Tracing - is a method used to profile and monitor applications, especially those built using a microservices architecture. Distributed tracing helps pinpoint where failures occur and what causes poor performance.
The killer feature of SkyWalking is auto instrumentation of java applications. SkyWalking runs as a java agent and adds tracing functionality to your applications without single line of code.
This makes it very attractive for use with legacy applications. The on-boarding cost becomes very low. And it's very easy to take it for a spin without going to deep into tracing concepts.
The overhead of running the agent is around 10% CPU for 5000+(!!!) metrics per second. (https://skywalkingtest.github.io/Agent-Benchmarks/). In real life scenarios this number will be even smaller.
Besides java, there are also community developed instrumentation agents available for .NET and NodeJS. If you have any of those in your stack – it worth to give it a go.
Support of OpenTracing API allows you to use SW for wide spectre of applications and languages. You can choose to use HTTP or gRPC protocol to send traces. Support for tracing formats like Zipking or Jager are incubating features and could be added in the future releases.
The full list of supported middleware is also quite impressive. With support of the most popular technologies SW will meet needs of most enterprises:
- HTTP servers (SpringBoot, Jetty, Tomcat)
- Databases (Mysql, Postgres)
- Queues (Kaafka, ActiveMQ)
- NoSQL (Mongo, Elasticsearh and Redis).
But wait, there's more!
Other features like dynamic relationship graphs, dependency trees and JVM metrics are very nice addition to a tracing APM product.
Typical Skywalking deployments consist of 4 main parts:
This can be the native Skywalking java agent for Java apps, one of the community agents(.NET Core and Node.js) or one of many other language libraries via OpenTracing API.
It’s a central component which collect metrics from the Clients and stores them in the Storage Backend. It supports auto discovery via own Naming service and can run as a cluster if deployed with Zookeeper.
Agent can send metrics only to a single collector and switch to the next one if it becomes unavailiable.
Collectors can accept metrics from Agents via gRPC or HTTP and supports SSL for both protocols.
Skywalking management and query interface. It has tracing search interface and some other very useful dashboards. They show relationships between microservices and "slow" calls per application.
The web interface offers a basic authentication mechanism, with users being stored in a local config file. Integration to external Auth providers is still in the desired feature list.
The WebUI quite tightly coupled with Collector(All UI querys go via the collector), in the SkyWalking roadmap it is planned to fuse them together eventually.
Main storage mechanism for the project is Elasticsearch, but there are also support for Mysql and H2 for preview.
taking SkyWalking for a spin
...to be continued