Git Product home page Git Product logo

brownsys / tracing-framework Goto Github PK

View Code? Open in Web Editor NEW
85.0 9.0 22.0 5.03 MB

Projects related to end-to-end tracing and causal metadata propagation, such as X-Trace, Retro, and Pivot Tracing

Home Page: http://brownsys.github.io/tracing-framework

License: BSD 3-Clause "New" or "Revised" License

Java 66.66% AspectJ 3.23% C 0.10% Shell 0.05% Batchfile 0.02% HTML 4.35% JavaScript 19.09% CSS 0.80% Perl 2.06% Ruby 2.31% Scala 1.33%

tracing-framework's Introduction

Brown University Tracing Framework

Welcome to the Brown University Tracing Framework repository. This repository contains multiple projects from the Brown University systems research group, such as X-Trace, Retro, and Pivot Tracing.

Full documentation is available at http://brownsys.github.io/tracing-framework

Getting Started

Head over to the tutorials section to begin!

Projects Overview

The tracing framework comprises four main projects:

Tracing Plane is the underlying instrumentation library that the other projects are built on. The Tracing Plane provides a generic end-to-end metadata propagation primitive called Baggage, that lets you dynamically propagate key-value pairs along the execution path of a request. Baggage provides a primitive similar to thread local variables, but instead at the granularity of a request, as it traverses process, machine, and application boundaries.

Note: the Baggage implementation in this library is not the most recent implementation -- see https://github.com/JonathanMace/tracingplane for current work.

Pivot Tracing is a dynamic monitoring framework for distributed systems. Users can write high-level monitoring queries that are compiled down into instrumentation and automatically installed into live, running systems. Pivot Tracing uses the Tracing Plane's Baggage primitive for correlating statistics from multiple places in the system.

X-Trace is a distributed causal logging framework. Instead of logging to per-process and per-machine files, X-Trace collects logged messages centrally. X-Trace uses the Tracing Plane's Baggage primitive to pass identifiers through the system, enabling causally related logging statements to be tied together. X-Trace can automatically hook in to existing log4j/commons loggers.

Retro is a fine-grained resource consumption, attribution, and actuation library. Retro instruments both system- and application-level resources, such as disk, network, cpu, locks, and queues. Retro aggregates consumption statistics, broken down according to the high-level tenant consuming the resouce. Retro provides hooks for throttling the requests of individual tenants. Retro reports measurements globally, enabling centralized resource management policies that react to aggressive resource consumption by throttling the responsible tenants. Retro uses the Tracing Plane's Baggage primitive to propagate tenant identifiers.

Instrumented Systems

These projects are all instrumentation libraries. They are intended for use with a new or existing system. We also have some pre-instrumented forks of some well known systems:

Funding

This project is partially funded from a generous grant from the National Science Foundation, NSF CNS 1452712, "CAREER: Understanding the Performance of Distributed Systems through Causal Tracing".

[Note: we are currently porting instrumentation for these systems to the latest versions for release. Check back soon]

Note: This documentation is a work in progress. For questions, please use the pivot-tracing-users Google group.

tracing-framework's People

Contributors

jonathanmace avatar rfonseca avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tracing-framework's Issues

package com.google.protobuf.GeneratedMessageV3 does not exist

I clone https://github.com/brownsys/tracing-framework.git and run

mvn clean package install -DskipTests

It gives me error

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project pubsub: Compilation failure: Compilation failure: 
[ERROR] /home/qiqi/Microservice/pivot-tracing-framework/tracingplane/pubsub/target/generated-sources/edu/brown/cs/systems/pubsub/PubSubProtos.java:[1255,43] package com.google.protobuf.GeneratedMessageV3 does not exist
[ERROR] /home/qiqi/Microservice/pivot-tracing-framework/tracingplane/pubsub/target/generated-sources/edu/brown/cs/systems/pubsub/PubSubProtos.java:[1260,43] package com.google.protobuf.GeneratedMessageV3 does not exist

How do I fix it?

Refactor logging across projects to make consistent

Currently using a mix of sysout and log4j, with log4j configured in no consistent way. The result is that some people don't see expected output when they follow simple tutorial steps, because, for example, they have a log4j.properties somewhere on their classpath that is messing with the intended config.

Baggage technical report / paper

Baggage needs to be written up into a technical report or paper. Currently it is sort-of described in the Pivot Tracing paper, but the design has undergone some changes and improvements.

Retro refactoring

In general, it's cool and useful to be able to attach callbacks to resource consumption events.

Retro does this using aspects. It would be nice to refactor some of this code so that:

  1. Retro's callbacks aren't tied in to the instrumentation code (eg, have them explicitly attached), so that others can reuse the code
  2. Implement some sort of general way to define events, and then allow people to attach to them.

For example, the simplest use would be:

on("disk-read", myCallback);

For this to 'just work' would be marvellous. We're pretty much there -- we have the working code and instrumentation -- we just now need it to be organized in the right way.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.