Great question. We support average of averages by storing the intermediate state of the aggregate (for average that's the sum and count) so we could cleanly re-aggregate.
Eventually, we'll be able to incrementally update the aggregate if we backfill even if the raw data is no longer available. That's not implemented yet though, so backfill only updates the aggregate if the raw data is still around by re-computing the intermediate state of the aggregate off the raw data for affected buckets. For most cases that isn't actually an issue since most people have a longer data retention period than backfill horizon.
I believe the state-of-the-art for plain-old Prometheus data retention is https://thanos.io/ — my understanding is that it's a Prometheus remote storage integration (https://prometheus.io/docs/prometheus/latest/storage/#remote...) that archives time-series data from Prometheus into an object-store, and then fetches/streams chunks back out from said object-store to serve requests.
You could use it locally on your NAS, by running a Minio instance on there. But IMHO there wouldn't be much point in doing that, over just keeping all the data in Prometheus's own internal storage.
So far from what I've read Prometheus isn't built for that. It stores all its data in RAM and asking it to store any more leads to running out of memory quickly. What have I missed?
Promscale does both data storage and analysis/rollups. It's like Thanos in that you can use it as a remote storage backend. It has the additional functionality of then aggregating/analyzing the data in SQL.
If RRD wasn't so terrible there wouldn't have been a myriad of replacements.
Beyond NoSQL: Using RRD to store temporal data - https://news.ycombinator.com/item?id=2742486 - July 2011 (18 comments)
I found a few other tiny threads asking about replacements, and that was it.
The downsampling feature at first glance seems to serve a different use case than Prometheus was built for, which I think is observability and alerting for a relatively short time period. For systems that need to work with years of data it totally makes sense, but I don't think Prometheus is used in those cases.
Since this feature has been built for a reason however, I could be wrong
Of the various tools that expose the remote read/write APIs, I like the looks of Promscale/TimescaleDB the most so far, but other options like Thanos might make more sense if you need to collect metrics from a bunch of Prometheuses. That said, maybe you can still use Promscale/TimescaleDB with Thanos as the storage backend, I can't recall the details on its requirements though, so it might not be suitable for that case. For my own use cases though, Promscale is a great solution.
Thanks for the positive feedback!
Is there anything in particular you are missing in Promscale to be used as a backend for multiple Prometheus instances?
We added support for multi-tenancy a couple of months ago (https://blog.timescale.com/blog/simplified-prometheus-monito...)
And thanks to a community contribution by 2nick on github Promscale can be integrated with Thanos :) (https://github.com/timescale/promscale/pull/664)
Thank you for noticing :-)
This is really a testament to all of the amazing products, new features, R&D, and overall work that the team has been shipping.
We are firing on all cylinders. Move fast without breaking things :-)
If this looks like fun to anyone - we're hiring!
Come and help us build the next great database company:
https://www.timescale.com/careers
Promscale roles are listed in the "Observability" section.