GithubHelp home page GithubHelp logo

metrics's Introduction

metrics

conduct-badge license-badge discord-badge last-commit-badge contributors-badge

The Metrics project: a metrics ecosystem for Rust.

code of conduct

NOTE: All conversations and contributions to this project shall adhere to the Code of Conduct.

what's it all about?

Running applications in production can be hard when you don't have insight into what the application is doing. We're lucky to have so many good system monitoring programs and services to show us how our servers are performing, but we still have to do the work of instrumenting our applications to gain deep insight into their behavior and performance.

Metrics makes it easy to instrument your application to provide real-time insight into what's happening. It provides a number of practical features that make it easy for library and application authors to start collecting and exporting metrics from their codebase.

why would I collect metrics?

Some of the most common scenarios for collecting metrics from an application:

  • see how many times a codepath was hit
  • track the time it takes for a piece of code to execute
  • expose internal counters and values in a standardized way

Importantly, this works for both library authors and application authors. If the libraries you use are instrumented, you unlock the power of being able to collect those metrics in your application for free, without any extra configuration. Everyone wins, and learns more about their application performance at the end of the day.

project goals

Firstly, we want to establish standardized interfaces by which everyone can interoperate: this is the goal of the metrics and metrics-core crates.

metrics provides macros similar to log, which are essentially zero cost and invisible when not in use, but automatically funnel their data when a user opts in and installs a metrics recorder. This allows library authors to instrument their libraries without needing to care which metrics system end users will be utilizing.

metrics-core provides foundational traits for core components of the metrics ecosystem, primarily the output side. There are a large number of output formats and transports that application authors may consider or want to use. By focusing on the API boundary between the systems that collect metrics and the systems they're exported to, these pieces can be easily swapped around depending on the needs of the end user.

Secondly, we want to provide a best-in-class reference runtime: this is the goal of the metrics-runtime crate.

Unfortunately, a great interface is no good without a suitable implementation, and we want to make sure that for users looking to instrument their applications for the first time, that they have a batteries-included option that gets them off to the races quickly. The metrics-runtime crate provides a best-in-class implementation of a metrics collection system, including support for the core metric types -- counters, gauges, and histograms -- as well as support for important features such as scoping, labels, flexible approaches to recording, and more.

On top of that, collecting metrics isn't terribly useful unless you can export those values, and so metrics-runtime pulls in a small set of default observers and exporters to allow users to quickly set up their application to be observable by their existing downstream metrics aggregation/storage.

project layout

The Metrics project provides a number of crates for both library and application authors.

If you're a library author, you'll only care about using [metrics] to instrument your library. If you're an application author, you'll primarily care about [metrics-runtime], but you may also want to use [metrics] to make instrumenting your own code even easier.

Overall, this repository is home to the following crates:

contributing

We're always looking for users who have thoughts on how to make metrics better, or users with interesting use cases. Of course, we're also happy to accept code contrbutions for outstanding feature requests! ๐Ÿ˜€

We'd love to chat about any of the above, or anything else, really! You can find us over on Gitter.

metrics's People

Contributors

tobz avatar jean-airoldie avatar jeromegn avatar bstrie avatar dfoxfranke avatar seeekr avatar kdar avatar tomgillen avatar samrg472 avatar svartalf avatar

Watchers

James Cloos avatar  avatar

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.