Commit Graph

20 Commits

Author SHA1 Message Date
Julius Volz 0bb9a56250 Remove extraction result type, simplify code. 2014-12-31 13:53:17 +01:00
Bjoern Rabenstein d0daf681d6 Make extraction honor ms-precision timestamps.
The test touched by this commit exposed the bug already.

Change-Id: I303131eab841ae0ea9b1a727230e68754a4cd8fe
2014-12-05 14:21:13 +01:00
Bjoern Rabenstein c53c07a719 Tolerate MetricFamily with unset type.
In that case, the default value is chosen (COUNTER for historical
reasons.)

Change-Id: I8f3384feee7f3bbaa837b216b0885ad238d1e0e5
2014-11-05 13:05:06 +01:00
Bjoern Rabenstein 5d40912fd2 Complete rewrite of the exposition library.
This rewrite had may backs and forths. In my git repository, it
consists of 35 commits which I cannot group or merge into reasonable
review buckets. Gerrit breaks fundamental git semantics, so I have to
squash the 35 commits into one for the review.

I'll push this not with refs/for/master, but with refs/for/next so
that we can transition after submission in a controlled fashion.

For the review, I recommend to start with looking at godoc and in
particular the many examples. After that, continue with a line-by-line
detailed review. (The big picture is hopefully as expected after
wrapping up the discussion earlier.)

Change-Id: Ib38cc46493a5139ca29d84020650929d94cac850
2014-06-17 14:08:22 +02:00
Bjoern Rabenstein 9da2fbcce3 Eliminate a number of style-guide violations.
Change-Id: Iedcd611e5c7ad24c84c004d8d6c551d1734e443c
2014-04-25 21:18:04 +02:00
Bjoern Rabenstein ad3452a46c Make Prometheus understand the new text format v0.0.4.
Change-Id: I42b834528c9c75d3d97443612bb05ce198ba4dc4
2014-04-22 18:28:15 +02:00
Bjoern Rabenstein 46fc7a3748 Support the new protobuf fields.
- Full support for UNTYPED type.

- Receptive support for timestamp_ms (i.e. the processor can process
  it, but the client library cannot yet create it - which is kind of
  intended as timestamps are meant for other things like federation,
  which will need separate support anyway).

Change-Id: I5913164a80089943d49ad58bf86e465a843ab82b
2014-04-22 15:11:34 +02:00
Julius Volz bb957bc145 Change internal metric name label to __name__.
This also adds a check that forbids any user-supplied metrics to start
with the reserved label name prefix "__".

Change-Id: I2fe94c740b685ad05c4c670613cf2af7b9e1c1c0
2014-03-14 12:28:25 +01:00
Julius Volz 197e83f47e Fix remaining tests to work with new Timestamp type.
Change-Id: Ib0fb4e0b714d723e08e83283fbe95233fd0f987a
2013-12-03 10:17:04 +01:00
Julius Volz 3ffd7c4a6c Add custom Timestamp type for sample times.
So far we've been using Go's native time.Time for anything related to sample
timestamps. Since the range of time.Time is much bigger than what we need, this
has created two problems:

- there could be time.Time values which were out of the range/precision of the
  time type that we persist to disk, therefore causing incorrectly ordered keys.
  One bug caused by this was:

  https://github.com/prometheus/prometheus/issues/367

  It would be good to use a timestamp type that's more closely aligned with
  what the underlying storage supports.

- sizeof(time.Time) is 192, while Prometheus should be ok with a single 64-bit
  Unix timestamp (possibly even a 32-bit one). Since we store samples in large
  numbers, this seriously affects memory usage. Furthermore, copying/working
  with the data will be faster if it's smaller.

*MEMORY USAGE RESULTS*
Initial memory usage comparisons for a running Prometheus with 1 timeseries and
100,000 samples show roughly a 13% decrease in total (VIRT) memory usage. In my
tests, this advantage for some reason decreased a bit the more samples the
timeseries had (to 5-7% for millions of samples). This I can't fully explain,
but perhaps garbage collection issues were involved.

*WHEN TO USE THE NEW TIMESTAMP TYPE*
The new clientmodel.Timestamp type should be used whenever time
calculations are either directly or indirectly related to sample
timestamps.

For example:
- the timestamp of a sample itself
- all kinds of watermarks
- anything that may become or is compared to a sample timestamp (like the timestamp
  passed into Target.Scrape()).

When to still use time.Time:
- for measuring durations/times not related to sample timestamps, like duration
  telemetry exporting, timers that indicate how frequently to execute some
  action, etc.

Change-Id: I253a467388774280c10400fda122369ff77c1730
2013-10-31 17:12:03 +01:00
Matt T. Proud 148fde894b Include summary sample sums and counts if present.
This commit finally unlocks the ability for the Prometheus client
users of the Summary metric type to automatically get total counts
and sums partitioned by labels.  It exposes them through two
synthetic variables, if the underlying data is present.

The following is the base case:

    foo_samples{quantile=0.5}  = <?>
    foo_samples{quantile=0.99} = <?>

The following results with this change:

    foo_samples{quantile=0.5}  = <?>
    foo_samples{quantile=0.99} = <?>
    foo_samples_sum            = <?>
    foo_samples_count          = <?>

Change-Id: I75b5ea0d8c851da8c0c82ed9c8ac0890e4238f87
2013-08-25 13:52:37 +02:00
Matt T. Proud 58af37fb72 Code Review: Get rid of cruft. 2013-08-12 12:59:57 +02:00
Matt T. Proud 89432f861e Remove base labels. 2013-08-12 11:29:41 +02:00
Matt T. Proud 65a55bbf4e Replace Process consumer channel with Ingester. 2013-08-12 11:29:41 +02:00
Matt T. Proud 4956aea5ac Protocol Buffer negotiation support in handler. 2013-07-01 17:14:58 +02:00
Matt T. Proud 35125cdac0 Implement Protocol Buffer Stream Decoding
This commit introduces protocol buffer telemetric stream decoding.
2013-06-26 18:19:50 +02:00
Matt T. Proud 03369306e0 Provide Discriminator For Protocol Buf. Streams
This commit introduces an incomplete processor that decodes varint
record length-delimited streams of io.prometheus.client.MetricFamily
Protocol Buffer messages.  The Go client presently does not support
generation of said messages, but this will unblock a number of Java
changes.
2013-06-26 13:25:10 +02:00
Julius Volz 2c8b7cc19b Update LabelSet and Metric String() methods from server. 2013-06-12 18:47:30 +02:00
Matt T. Proud f761854eff Code Review: Useless time and comment. 2013-06-11 12:42:31 +02:00
Matt T. Proud 10dae5d108 Include relevant server model artifacts.
This commit introduces all relevant server-side artifacts such that the
Result streams can be used by external parties for one-off tools and
such.  This will ultimately better enable us to support additional
wireformats with much more ease.
2013-06-11 11:45:21 +02:00