weaveworks-experiments / Kspan

Licence: apache-2.0
Turning Kubernetes Events into spans

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Kspan

Applicationinsights Java
Application Insights for Java
Stars: ✭ 172 (-8.02%)
Mutual labels:  distributed-tracing, observability
Skywalking Docker
SkyWalking Docker file archive for all official releases
Stars: ✭ 206 (+10.16%)
Mutual labels:  distributed-tracing, observability
Applicationinsights Aspnetcore
ASP.NET Core web applications monitoring
Stars: ✭ 306 (+63.64%)
Mutual labels:  distributed-tracing, observability
skywalking-rust
Apache SkyWalking Rust Agent
Stars: ✭ 25 (-86.63%)
Mutual labels:  observability, distributed-tracing
Skyapm Dotnet
The .NET/.NET Core instrument agent for Apache SkyWalking
Stars: ✭ 1,268 (+578.07%)
Mutual labels:  distributed-tracing, observability
Skywalking
APM, Application Performance Monitoring System
Stars: ✭ 18,341 (+9708.02%)
Mutual labels:  distributed-tracing, observability
Skywalking Rocketbot Ui
SkyWalking RocketBot UI
Stars: ✭ 658 (+251.87%)
Mutual labels:  distributed-tracing, observability
skywalking-swck
Apache SkyWalking Cloud on Kubernetes
Stars: ✭ 62 (-66.84%)
Mutual labels:  observability, distributed-tracing
Skywalking Data Collect Protocol
Data Collect Protocols of Apache SkyWalking
Stars: ✭ 49 (-73.8%)
Mutual labels:  distributed-tracing, observability
Epsagon Go
Automated tracing library for Go 1.x ⚡️
Stars: ✭ 24 (-87.17%)
Mutual labels:  distributed-tracing, observability
skywalking-kong
Kong agent for Apache SkyWalking
Stars: ✭ 17 (-90.91%)
Mutual labels:  observability, distributed-tracing
Applicationinsights Dotnet Server
Microsoft Application Insights for .NET Web Applications
Stars: ✭ 130 (-30.48%)
Mutual labels:  distributed-tracing, observability
skywalking-nodejs
The NodeJS agent for Apache SkyWalking
Stars: ✭ 81 (-56.68%)
Mutual labels:  observability, distributed-tracing
Skywalking Kubernetes
Apache SkyWalking Kubernetes Deployment Helm Chart
Stars: ✭ 207 (+10.7%)
Mutual labels:  distributed-tracing, observability
gateway
A proxy to buffer and forward metrics, events, and traces.
Stars: ✭ 94 (-49.73%)
Mutual labels:  observability, distributed-tracing
Applicationinsights Dotnet
ApplicationInsights-dotnet
Stars: ✭ 367 (+96.26%)
Mutual labels:  distributed-tracing, observability
trouble-training
FullStack DDD/CQRS with GraphQL workshop including distributed tracing and monitoring. This shows the configuration from React frontend to .Net backend.
Stars: ✭ 271 (+44.92%)
Mutual labels:  observability, distributed-tracing
easeagent
An agent component for the Java system
Stars: ✭ 437 (+133.69%)
Mutual labels:  observability, distributed-tracing
Signoz
Open source Observability Platform. 👉 SigNoz helps developers find issues in their deployed applications & solve them quickly
Stars: ✭ 738 (+294.65%)
Mutual labels:  distributed-tracing, observability
Applicationinsights Go
Microsoft Application Insights SDK for Go
Stars: ✭ 113 (-39.57%)
Mutual labels:  distributed-tracing, observability

kspan - Turning Kubernetes Events into spans

This project is a Work In Progress, under active evolution.

Most Kubernetes components produce Events when something interesting happens. This program turns those Events into OpenTelemetry Spans, joining them up by causality and grouping them together into Traces.

Example: rollout of a Deployment of two Pods:

image

The picture was generated by kspan and Jaeger; it is a visualisation of the events generated from kubectl apply. kspan has identified five different sources of events, and has joined up the events for starting each Pod underneath the ReplicaSet scaling operation that created it.

We start with this concrete information:

  • Each Event has an Involved Object, e.g. when Kubelet sends a "Started" event, the Involved Object is a Pod.
  • Every Kubernetes object can have one or more Owner References. So for instance we can walk from the Pod up to a Deployment that caused it to be created.

Complications:

  • We cannot expect events to arrive in the ideal order; we need to delay handling some until their "parent" arrives to make sense.

Heuristics:

  • If we recently saw an event from an owner, that probably caused this event in the owned object. We set the child-of relationship on the new span.
  • A couple of specific events, from ReplicationSet and StatefulSet, are reported on the owner but make more sense as events on the sub-object they mention.
  • An event can be marked in its annotations as the start of a trace.
  • If we have walked the owner chain up to an object with no owner, no recent event, then start a new trace.
    • Trace ID is hashed from UID of this object + its generation

For future consideration:

  • We can match up resourceVersion between event and object.
    • do we need to?

To run Jaeger locally:

docker run -d --name jaeger -p 16686:16686 -p 55680:55680 jaegertracing/opentelemetry-all-in-one

Join in the fun!

If you have any questions about, or feedback on kspan:

Your feedback is always welcome!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].