Commit Graph

38 Commits

Author SHA1 Message Date
Fabian Reinartz b2b3dad248 Add YAML parsing for LabelName 2015-05-20 16:13:32 +02:00
beorn7 41ecb6c6b2 Improve the Metric.Equal and Metric.Before methods. 2015-05-06 11:42:41 +02:00
beorn7 0e0e6bff80 Rework the signature aka fingerprint functions.
Move everything over to a more expensive but less collision-prone way.
However, keep the old fingerprinting under the name "FastFingerprint"
to be used in the storage layer (where we need collision detection
anyway).
2015-05-05 18:02:21 +02:00
Fabian Reinartz 05b08108b4 Add metrics path label. 2015-04-28 23:22:11 +02:00
Fabian Reinartz 642f761a3c Replace hidden label prefix with meta prefix. 2015-04-22 12:29:58 +02:00
Fabian Reinartz 37a1f3ea97 Add constants for instance/address labels and hidden prefix. 2015-04-21 13:16:09 +02:00
Julius Volz a68f44ff35 Fix pointer receiver in COWMetric.Set(). 2015-03-10 20:21:25 +01:00
beorn7 cbe221c969 Switch to sync.Pool.
sync.Pool is after all faster than the home-made free list. Especially
under contention. To prove that, this commit also adds a benchmark for
concurrent fingerprint calculation.

Benchmark results:
(Run with -cpu=1,2,4. x-y -> x goroutines with GOMAXPROCS=y.)

benchmark                                     old ns/op     new ns/op     delta
BenchmarkMetricToFingerprintTripleConc4-4     320           138           -56.88%
BenchmarkMetricToFingerprintTripleConc8-4     314           141           -55.10%
BenchmarkMetricToFingerprintTripleConc4-2     344           264           -23.26%
BenchmarkMetricToFingerprintTripleConc2-4     331           256           -22.66%
BenchmarkMetricToFingerprintTripleConc8-2     338           263           -22.19%
BenchmarkMetricToFingerprintTripleConc1-4     599           505           -15.69%
BenchmarkMetricToFingerprintTripleConc4       553           493           -10.85%
BenchmarkMetricToFingerprintTripleConc2-2     327           292           -10.70%
BenchmarkMetricToFingerprintTripleConc8       554           496           -10.47%
BenchmarkMetricToFingerprintTripleConc2       555           501           -9.73%
BenchmarkMetricToFingerprintTripleConc1       554           509           -8.12%
BenchmarkMetricToFingerprintTripleConc1-2     551           513           -6.90%
2015-03-04 12:35:06 +01:00
beorn7 af21d456db Unify fingerprinting aka signature calculation.
This fixes https://github.com/prometheus/client_golang/issues/74 .

IT CHANGES THE FINGERPRINTING AND THEREFORE INVALIDATES EACH AND EVERY
PERSISTED FINGERPRINT (I.E. YOU HAVE TO WIPE THE STORAGE TO USE THIS).

This commit removes the LabelValuesToSignature function as it is used
nowhere (and broken in the way it is implemented right now).

Also, remove one more golint warning.
2015-03-03 17:55:37 +01:00
beorn7 b1e7299877 Turned "le" and "quantile" label names into constants. 2015-02-19 15:54:26 +01:00
beorn7 a9bdd32c71 Reduce allocations during fingerprinting.
Also, add a test to expose
https://github.com/prometheus/client_golang/issues/74 .

benchmark           old ns/op     new ns/op     delta
BenchmarkMetric     7034          6272          -10.83%

benchmark           old allocs     new allocs     delta
BenchmarkMetric     52             32             -38.46%

benchmark           old bytes     new bytes     delta
BenchmarkMetric     1976          1800          -8.91%
2015-02-12 15:28:31 +01:00
beorn7 7d560564f9 Remove obsolete comment and add Earliest and Latest timestamp.
The latter is to eradicate the various MaxInt64 and MinInt64 in the
codebase.
2015-02-11 17:34:59 +01:00
Bjoern Rabenstein d7f8eb1083 Change "Prometheus Team" to "The Prometheus Authors". 2015-02-02 15:14:36 +01:00
Julius Volz 4a842c5da0 Better sample value string formatting.
This forces a float format without exponent that uses the minimum number
of digits necessary to display a given sample value.
2015-01-25 23:52:46 +01:00
Bjoern Rabenstein 05059724f8 Remove the partition of summaries by HTTP status code and method.
Summaries as implemented cannot be aggregated in a meaningful
way. Partitoning them by status code and method only made sense if we
were interested in the individual latency and size of e.g. GET request
that result in status 503. In general, that's not the case. Most of
the time, the user will be interested in the latency and size of _all_
HTTP requests.

(With future changes to client_golang, we will consider making the
HTTP instrumentation configurable, e.g. to handle the case where the
user is only interested in the latency of successful requests.)
2015-01-13 14:57:37 +01:00
Julius Volz 0bb9a56250 Remove extraction result type, simplify code. 2014-12-31 13:53:17 +01:00
Julius Volz c7779ab9ec Add COWMetric and do some code cleanups. 2014-12-12 20:57:05 +01:00
Bjoern Rabenstein 115bde9c47 Delete MustLoadFromString, as nobody needs it.
Change-Id: Ib95c316857ffdd36d973c0e8701967de99d78b13
2014-11-27 19:32:42 +01:00
Bjoern Rabenstein bfd70e3280 Make LoadFromString not panic but return an error instead.
Change-Id: I9f52fe807c8e9771a530f90ede8bd46fcdb467ae
2014-11-27 19:29:17 +01:00
Julius Volz 87a585def8 Adjust various things required for the new storage backend.
- Change Fingerprints to be simple uint64s.
- Deal sensibly with missing metric names.
- Enable finer-grained time resolution.

Merge this concurrently with the merge of the new storage backend into
prometheus/prometheus.

Change-Id: Idd82f137aa0c4286df422c53ce3c62e0de285360
2014-11-24 19:56:40 +01:00
Bjoern Rabenstein 998774096c Make the collectorID independent of the desc order.
This is actually the intended behavior, and (as a nice side effect)
makes things cheaper to calculate.

Also, introduce a separator character to avoid hash collisions
(like label values {"ab","c"} vs {"a", "bc"}).

Apply the same principles to signature.go.

Change-Id: I607db544f278ed89684fe5fa11abdbc3e03d3061
2014-06-26 15:50:11 +02: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 e5dc0421cd Move signature.go and related tests to the model package.
The LabelsToSignature function is now used outside of the prometheus
package, too. Leaving it in the prometheuos package is misleading
design and will lead to circulat import chains soon.

Change-Id: If1ca442d4023b33b138cf79fee68e82ff2a355be
2014-04-25 20:48:16 +02:00
Julius Volz 7524a7a115 Fix test fingerprints after metric name label change.
Change-Id: I9d927ca2bbb7424c4caaeef918971134e3d61acb
2014-03-19 14:17:33 +01:00
Julius Volz f91d98c93e Fix Samples.Less() sorting method.
Change-Id: I337b7e6452674360f43f268c85fe7f31dee18044
2014-03-14 16:51:52 +01: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 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
Julius Volz 9b9a115f95 Add method to merge a LabelSet into a Metric with collision avoidance.
Colliding labels can happen e.g. when an exporter job is scraped and already
includes "job" labels for its samples in /metrics. In this case, a
collisionPrefix of "exporter_" is added to the colliding target labels, but the
specifics (the collision prefix) are managed by Prometheus, not the client
library.
2013-08-12 15:46:42 +02:00
Matt T. Proud 88e73cf99c Merge pull request #25 from prometheus/refactor/ingestion/signatures
Update the Consumer Signature
2013-08-12 04:10:18 -07:00
Matt T. Proud 90425cb55b Add formal fingerprint sets for intersection ops. 2013-08-12 11:32:21 +02:00
Matt T. Proud 65a55bbf4e Replace Process consumer channel with Ingester. 2013-08-12 11:29:41 +02:00
Matt T. Proud 6da8b95237 Fix: Include forgotten LabelSet.MergeFromMetric. 2013-06-23 14:42:10 +02:00
Matt T. Proud 5cadb31d7c Fix: Canned label const types.
We had a syntax error whereby canned label names were not LabelName.
2013-06-22 13:28:25 +02:00
Matt T. Proud 6b26678f98 Fix: Metric sorting comparators.
There was an oversight that resulted in indefinite recursion.
2013-06-22 13:28:15 +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