Comments (4)
I am undecided on the topic of global registries. Not offering it within open-metrics-client
thus far has been by design.
On the one hand I do understand that offering a global metrics registry within open-metrics-client
directly simplifies instrumentation across ones application.
On the other hand:
- I consider global variables in general and a global metric registry in specific error prone. The implicit side effect of registering metrics with a global registry might catch folks by surprise, e.g. when importing an external library for the sake of a single helper function.
- Instead of
open-metrics-client
offering a global registry, users can define their own within their binary.
My proposition moving forward: Instead of adding a global registry to open-metrics-client
, add an example showcasing how users can define it themselves, including a disclaimer on how they might be shooting themselves in the foot.
from client_rust.
Hi! I think making an example of global registries would be a great solution. I'd love to switch over to this library but I'm a bit reluctant to sit down and do the work of figuring out a global registry myself. Has anyone done this yet? I'd happily contribute examples or even an explainer post on my Rust programming blog. I just haven't sat down yet to figure out how to implement a global registry.
from client_rust.
From my reading of the client library doco, there appears to be a requirement for a global registry (default collector registry): https://prometheus.io/docs/instrumenting/writing_clientlibs/#metrics
I would suppose that having a global registry is no different to having a global memory allocator.
Taking this further, having static/compile time registration could also make sense. The client library doco also appears to encourage this in the same section referenced above, albeit static, not const.
from client_rust.
I actually think this is a non-issue. You don't need a global registry, you need global metrics. Your individual metrics can be global, and accessible by both your registry and your normal code. The registry can read them and serve them without being global!
See my example here. Here I have a local registry, which is owned by the HTTP server which serves metrics. But my counter is in a lazy_static
block, and can be read by both the registry and my normal business logic code.
from client_rust.
Related Issues (20)
- Allow flattening of a struct through derive(EncodeLabelSet) at any position HOT 2
- Make `Descriptor::new` `const` HOT 1
- feat: derive register logic on struct of metrics
- Allow multiple labels in sub_registry_with_label method HOT 2
- Allow root registry creation with prefix AND label(s) HOT 1
- Implement native histograms HOT 1
- Escaping? HOT 3
- Public encoding functions? HOT 4
- Encoder without EOF HOT 5
- Custom Collector with `sub_registry_with_prefix` outputs name multiple times HOT 3
- Abstract key lookup into a trait for Family::get_or_create HOT 4
- Allow iterating the metrics on an registry HOT 1
- Allow construct a histogram family with a closure HOT 2
- mips: EncodeCounterValue implementation missing for u32?
- Histogram with empty family labels creates unparseable metrics output HOT 1
- text::DescriptorEncoder writes incorrect metric names HOT 2
- UTF-8: Implement support in Rust client library
- Implement Atomic for usize HOT 2
- Counter `HELP` and `TYPE` lack `_total` suffix HOT 5
- Provide a way to prevent unbounded metric growth HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from client_rust.