On 14/06/2022 18:32, Jeremy Collette wrote:
Hello,

We have written a custom exporter that exposes metrics with explicit timestamps, which Prometheus periodically scrapes. In the case where Prometheus becomes temporarily unavailable, these metric samples will be cached in the exporter until they are scraped, causing affected metrics to age.

I understand that if a metric is older than a certain threshold, it will be rejected by Prometheus with the message: "Error on ingesting samples that are too old or are too far into the future".

I'm trying to understand if there are any guarantees surrounding the ingestion of historical metrics. Is there some metric sample age that is guaranteed to be recent enough to be ingested? For example, are samples with timestamps within the last hour always going to be considered recent? Within the last five minutes?

According to this previous thread: Error on ingesting samples that are too old <https://groups.google.com/g/prometheus-users/c/rKJYm6naEow/m/zylud_J4AAAJ>, MR seems to indicate that metrics as old as 1 second can be dropped due to being too old. Is this interpretation correct? If so, is there any way to ensure metrics with timestamps won't be dropped for being too old?

The use of timestamps in metrics is not something that should be used except in some very specific cases. The main use case for adding a timestamp is when you are scraping metrics into Prometheus that have been sourced from another existing metrics system (for example things like the Cloudwatch Exporter). You also mention something about your exporter caching things until they are scraped, which also sounds like something that is not advisable. The action of the exporter shouldn't really be changing depending on the requests being received (or not received).

An exporter is expected to return the various metrics that reflect "now", in the same way that a directly instrumented application would be expected to return the current state of the metrics being maintained in memory. For a simple exporter the normal mechanism is for a request to be received which then triggers some mechanism to generate the metrics. For example with something like the MySQL Exporter a request would trigger a query on the connected database which then returns various information that is converted into Prometheus metrics and returned. In some situations the process to fetch information from the underlying system can be quite resource intensive or slow. In that case a common design is to decouple the information fetching process from the request handling process. One example is to perform the information fetching process on a periodic timer, with the information fetched then stored in memory. The request process then reads and returns that information - returning the same values for every request until the next cycle of the information fetching process. In none of these standard scenarios would you expect timestamps to be attached to the returned metrics.

It would be good to hear a bit more about what you are trying to do, as it is highly likely that the use of timestamps in your use case is probably not the right option and they should just be dropped.

--
Stuart Clark

--
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to prometheus-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/007cf462-d87e-d4c7-316e-4007567c74a1%40Jahingo.com.

Reply via email to