-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Current state and future of Graphite (let's discuss) #2418
Comments
I think it would be nice to have something that works easilly for smalls installs but still can be extended for big installs. Ideally with the same components.
Which is why I'm a bit afraid about that... Plus it makes it harder to share code between graphite and carbon. But considering the workforce that we have I do not have better suggestions.
I'm all in to simplify graphite-web. It's nice to keep a minimialistic console view to debug it though but I don't think dashboards are super useful these days. |
Having worked with both Graphite and Prometheus in production lately, I
have some pretty strong feelings about what a next generation Graphite
stack would look like. Unfortunately I don't think any of this is an
evolution of the existing stack.
Jason
…On Sun, Jan 27, 2019 at 11:02 AM Corentin Chary ***@***.***> wrote:
- Target small to medium installations (big installs can be covered by
Metrictank, Biggraphite, and Clickhouse).
I think it would be nice to have something that works easilly for smalls
installs but still can be extended for big installs. Ideally with the same
components.
- Officially deprecate python carbon daemon and replace it with
go-carbon <https://github.com/lomik/go-carbon>. Please note, that
go-carbon is a separate project with own maintainers, not sure should
we use it as is and contribute to its development or fork it.
Which is why I'm a bit afraid about that... Plus it makes it harder to
share code between graphite and carbon. But considering the workforce that
we have I do not have better suggestions.
- Get rid of Django - it was (and still) a constant source of
incompatibilities and installation issues. (OTOH - will we have the same
issues with e.g. Flask then? Or maybe we just strictly should use LTS
versions?)
- Get rid of state in graphite-web - or make it at optional, at least
(i.e. separate rendering and dashboards/tree-view, as was done in
graphite-api).
I'm all in to simplify graphite-web. It's nice to keep a minimialistic
console view to debug it though but I don't think dashboards are super
useful these days.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2418 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAeLApJHQCRw9wrBv3bmNYBV3CKSDNjPks5vHc2SgaJpZM4aUsjj>
.
--
Jason Dixon
http://obfuscurity.com/
https://twitter.com/obfuscurity
|
@obfuscurity : I'm not sure that we need to go that path either, just thinking out loud here. |
Ok, let me rephase it. "Target small to medium installations as we doing now", because for big installations whisper is not a best option IMO. But current implementation (or go-graphite) can be scaled to thousands of servers, Booking.com doing that - but if you planning something big right now I do not think yoiu should choose whisper.
Indeed. I do not like loosing control over own code. But we can always fork.
IMO sharing nothing can be good in that case. We have quite big amount of code duplication in current implementation. |
I don't really want to elaborate at length because it's always theoretical
until someone scratches that itch and code magically appears. :-P
Let's just say that I feel pretty strongly that one of Graphite's biggest
weaknesses is around metrics naming discipline and the lack of
auth{entication,authorization} around metrics ingestion. If that is
addressed properly, it would also conceivably lessen the
importance/necessity of metrics node manipulation in chained queries.
Jason
…On Sun, Jan 27, 2019 at 11:23 AM Denis Zhdanov ***@***.***> wrote:
@obfuscurity <https://github.com/obfuscurity> : I'm not sure that we need
to go that path either, just thinking out loud here. Maybe you can share
your thoughts, Jason?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2418 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAeLAoT5t8ScUUEd1aVgwCuDwsbV73s3ks5vHdJ4gaJpZM4aUsjj>
.
--
Jason Dixon
http://obfuscurity.com/
https://twitter.com/obfuscurity
|
I've got a lot of ideas but it all depends on people having time to implement them, which I don't think anyone has, therefore I don't think it makes much sense to write them all down. This brings me to the point of how to get Graphite more appealing to contribute to for new developers. I think making it easier to install would help. I still sometimes struggle to get a dev environment working on a clean linux install, and I've been using this for over 6 years. I can imagine it turns potential contributors off. Other thing is that there is a lot of old ugly code... I'm not in favour of any big revolutionary changes, Graphite's strongest point imo is that "it just works" and has a large user base. Whisper has it's downsides, but it is simple and it is still the only database backend which I have seen work stable in large installations. Only feature I was missing was automatic rebuilding of failed cluster nodes (but that would probably make it complex and less stable). |
Agreed, easy deployment and sandboxing is a given for me. Getting started
with Prometheus is trivial. However it does have a lot of
operational/ease-of-use trade-offs later on, which I think is where
Graphite shines by comparison.
Jason
…On Sun, Jan 27, 2019 at 12:16 PM Piotr Popieluch ***@***.***> wrote:
I've got a lot of ideas but it all depends on people having time to
implement them, which I don't think anyone has, therefore I don't think it
makes much sense to write them all down.
This brings me to the point of how to get Graphite more appealing to
contribute to for new developers. I think making it easier to install would
help. I still sometimes struggle to get a dev environment working on a
clean linux install, and I've been using this for over 6 years. I can
imagine it turns potential contributors off. Other thing is that there is a
lot of old ugly code...
I'm not in favour of any big revolutionary changes, Graphite's strongest
point imo is that "it just works" and has a large user base.
Whisper has it's downsides, but it is simple and it is still the only
database backend which I have seen work stable in large installations. Only
feature I was missing was automatic rebuilding of failed cluster nodes (but
that would probably make it complex and less stable).
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2418 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAeLArZWFLxIPhe6rTANqqh7L0NHN8EWks5vHd8KgaJpZM4aUsjj>
.
--
Jason Dixon
http://obfuscurity.com/
https://twitter.com/obfuscurity
|
Well, agreed. But please note that even in current state Graphite is technically ready for OpenMertrics support. OTOH, Openmetrics doesn't have anything about auth part either... |
I personally care less about any standardization and am thinking about this
purely in terms of user experience and system ownership. Yes, OpenMetrics
certainly overlaps in many regards but I don't frame the conversation
around a standard.
Jason
…On Sun, Jan 27, 2019 at 2:05 PM Denis Zhdanov ***@***.***> wrote:
@obfuscurity <https://github.com/obfuscurity> :
Let's just say that I feel pretty strongly that one of Graphite's biggest
weaknesses is around metrics naming discipline and the lack of
auth{entication,authorization} around metrics ingestion.
Well, agreed. But please note that even in current state Graphite is
technically ready for OpenMertrics
<https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format>
support. OTOH, Openmetrics doesn't have anything about auth part either...
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2418 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAeLAlwbCKxh-CbVycIIozdJ2xoDgE8yks5vHfh2gaJpZM4aUsjj>
.
--
Jason Dixon
http://obfuscurity.com/
https://twitter.com/obfuscurity
|
Yep, I just mean OpenMetrics will help with naming metrics discipline - not as a standard, but as a different way of naming metrics. |
I've been thinking along the same lines @deniszh and had some good discussions with @Dieterbe, I just wish I had more time to dedicate to the project. The biggest thing I'd add to your list would be focusing on ease of installation and sensible defaults, I know @piotr1212 has been doing some work in that direction and ditching django would also help in that area. @lomik I'd love to hear your thoughts/suggestions/reaction to the idea of adopting go-carbon as the official daemon |
P.S. I'm actually glad to see we don't all agree on all of these items but
that we're inclusive of differing opinions.
P.P.S. Nice to be in a place (Obs @ Fastly) where I can be involved in
these sorts of discussions again. :)
Jason
…On Sun, Jan 27, 2019 at 7:54 PM Dan Cech ***@***.***> wrote:
I've been thinking along the same lines @deniszh
<https://github.com/deniszh> and had some good discussions with @Dieterbe
<https://github.com/Dieterbe>, I just wish I had more time to dedicate to
the project. The biggest thing I'd add to your list would be focusing on
ease of installation and sensible defaults, I know @piotr1212
<https://github.com/piotr1212> has been doing some work in that direction
and ditching django would also help in that area.
@lomik <https://github.com/lomik> I'd love to hear your
thoughts/suggestions/reaction to the idea of adopting go-carbon as the
official daemon
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#2418 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAeLApOtMwnnyVLgGBM4Yn6Q_NgeEIQAks5vHkpLgaJpZM4aUsjj>
.
--
Jason Dixon
http://obfuscurity.com/
https://twitter.com/obfuscurity
|
Just want to give my opinion as a happy-ish user of the graphite/carbon stack. I started using Graphite about 1.5 years ago and it is one of the first projects that I got indepth expirience with. |
I don't mind. It is hard for me to support it since I already migrated all my own installations to the clickhouse stack. But you need to do something with built in
|
I think I'm a relative outsider since I never had commit access, but my thoughts: on "many different implementations"I suspect that a decent amount of people that have found out about graphite, get overwhelmed because the ecosystem is so complicated. so many projects with similar names (BTW I have contributed to this problem with graphite-ng). I suspect it scares them off. (It would be nice to get more insights into whether this is merely a perceived concern or real, but not sure how. inquiries suffer from survivor bias). This notion that "the official graphite stuff is merely a reference implementation":
I do agree it makes sense to keep evolving the python+whisper stack - a stack optimized for small/medium scale - in a non-breaking way. And it also makes sense for a few projects to exist targeting large scale (e.g. metrictank, clickhouse, etc), though code reuse is always a worthwhile persuit go-carbon part of official stack?re "go-carbon is a separate project with own maintainers". Who maintains it now, if lomik left it? Do the goals of the project align with the goals of the official graphite-project? In the pursuit of simplifying stuff, just bringing the project under the graphite umbrella seems to make more sense. go vs pythonI liked your blog post, Denis, and you point out Go scales easier vertically than python (basically goroutines vs threads), but let's also be clear that Go seems to generally perform better (do more with fewer resources). This has been shown in charts in various projects (go-carbon, carbonapi, etc), and it seems to be a very useful property with installations pushing the limits of what a "medium size installation" is. committee / governanceI liked the idea of a very informal governance committee. I see it as a good way to be able to resolve difficult project decisions, such as the ones being discussed now. (and let's be frank, some of this stuff has been discussed for years) statsdstatsd suffers from an even worse form of the ecosystem chaos problem I mentioned above for graphite, in addition to be unmaintained. But almost always, statsd goes hand in hand with graphite. other new feature idea to make graphite more relevant againfirst class support for units (track units along with timeseries, change unit strings when processed with functions, provide units in render responses so dashboards like grafana can automatically put right unit on axis labels etc) other
|
Hello @Dieterbe,
Well, that's true - but why should we care and promote 3rd party implementations if it's not officially supported and not part of a project, right? Booking was using python stuff some time ago, they completely migrated to Go stack not that long time ago.
He didn't leave - just not using it in prod anymore. He's still accepting patches and making releases.
There's no official goal exist on go-carbon page. But I can assume it has the same goal as "go-graphite" project - reimplement Graphite in Go. And that's why I'm still not convinced should we accept "go-carbon" in python Graphite.
That's another source of my hesitation. It can read whisper files and compatible with schema and aggregation files, but:
Also, have some additional features:
So, if we want to adopt it we should do something with relaying - i.e. officially accept carbon-relay-ng. But I still think that's another reason to do that in "go-graphite" and not an official project.
Good idea
Also agreed. We can just add support of TYPE from Openmetric format.
Well, exactly that. IMO all existing implementations are buggy and/or slow - python, carbon-c-relay and graphite-relay-ng (didn't try aggregations in NG personally, just word-of-mouths).
I'm not aware of any downsides, but TBH I didn't check its implementation thoroughly. That's old repo, before merging code to go-carbon - https://github.com/grobian/carbonserver |
Reimplement in go is not a goal, but a means to achieve it. This is why I did not transfer go-carbon to go-graphite project. Main goals was:
At the moment I think that all these goals have been achieved. And I have no new goals. |
Carbonserver has nothing to do with clusters. It just returning metrics based on a query. |
Most of statsd implementations can't provide you a redundant distributed aggregations, the only one I know which give a such promise is https://github.com/avito-tech/bioyino Another pain point is a lack of delivery acknowledgement in relay protocol. I would rather replace it with GRPC/HTTP/whatever and provide a backward compatibility on a client-facing side. |
Bioyino is a great project, but not all users are in Booking.com or Avito scale, i.e. targeting distributed aggregations as a hard requirement, IMHO. |
carbonserver appeared as a attempt to implement a subset of graphite-web that's enough to server as a CLUSTER_SERVER for graphite-web. With time it evolved and also have a binary protobuf-based protocol to return those metrics. However it lacks TagDB support, however there were some attempts to implement it here: https://github.com/go-graphite/go-carbon/tree/carbonserver-tags and here go-graphite/go-carbon#1 (maybe it's worth to revive and finish them).
There is a Protobuf + GRPC support for CLUSTER_SERVER-style communication inside carbonserver (but it doesn't support tags as of now). There is also a true carbonlink-style API with the same purpose: |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
BTW, I still have some proposition about Graphite future, let's un-stale this issue for now. |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
OK, I just released docker image v1.1.7-3 with experimental support of go-carbon. Theoretically, go-carbon almost reached parity by features of python version (except e.g. aggregation and filtering), but absense of good alternative relay worrying me more. |
As far as I understand, go-carbon with carbonserver enabled still do not have any support for tags (you can write tagged metrics, but you can't read them through carbonserver, only directly + carboncache). |
@deniszh, We are currently working on the new relay, check it out: https://github.com/bookingcom/nanotube |
That's true, indeed. But I'm still not sure should use |
Thanks, I'm aware of nanotube, pretty good project! |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
Hello!
I want to discuss the current state of Graphite project, how we can proceed further and how we can coordinate our efforts. Please note, that Graphite is open-source project driving by the community, and I'm only one of its formal co-maintainers, so, I'm not BDFL here and just giving you my opinion here. I'm calling other maintainers, contributors and companies to provide own view and contribute and discuss ideas here.
The current state of Graphite and its ecosystem.
Because of the big size of projects' review, I put it aside - in a separate post, please check it out if interested. I'll put only my outcome here - how I mentioned many times before, IMO Graphite is not only a project currently, but more like the whole ecosystem of projects, developed at a different time by different developers for different purposes. Not all of these projects are compatible with all features of the original project, but a user can (and should) pick up that or another implementation considering own use case, requirements, and implementation.
Graphite 2.0
I think that Graphite already reached status of mature project now, and theoretically we can left it as is and not do much. But if we want to push it further - what we should/can do in Graphite 2.0?
IMO we should:
go-carbon
is a separate project with own maintainers, not sure should we use it as is and contribute to its development or fork it.But plan above is not that smooth, though
go-carbon
has no support of blacklisting too.OTOH: if it was not developed for that long time, probably it's not that much needed and limited support in carbon-c-relay or carbon-relay-ng is enough?
carbonserver
completely?About decision making
I'm not sure that we have some formal structure or committee behind Graphite. It's a quite small project, with many developers and maintainers, which coming and going, implementing some specific feature, interested only in some part of the project etc.
IMO we do not need even a have a formal vote on that discussion. If we have no dedicated person who will implement something - our votes mean nothing. I think we're a small group and we'll be able to reach some consensus on a plan - but proper implementation plan is much more important IMO.
Please treat text above only as my personal viewpoint, and reveal your own ideas.
/cc @DanCech @piotr1212 @iksaif @cbowman0 @Dieterbe @obfuscurity @cdavis @mleinart @brutasse @tmm1 @gwaldo @esc @SEJeff @jssjr @bitprophet
The text was updated successfully, but these errors were encountered: