-
Notifications
You must be signed in to change notification settings - Fork 203
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
Component #1823
Component #1823
Changes from 12 commits
a5cf26d
9e84aee
1cf1e7a
5c49e9e
02a41e0
8ab6a26
a638c1a
5abe271
2d0eb00
46e1764
1e12b5e
254dc4c
e06efff
992c703
0546707
e75e34f
0ea1f71
9a90c2b
f04edb4
0d99288
ed64bc3
98bc887
2e32ce6
e1aaa9f
38b15a1
6f9a820
c78ea1d
c6239d1
3bb04d4
6713554
d5568d9
d8cd012
42fbdd9
d5eb26e
0c9e755
ce0ecb0
872de53
0506c37
db5bd6a
3ee51b3
98872f8
bd2d083
b2d5cab
57d81b0
21952d8
5966b6d
561bfeb
9dc25f1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,237 @@ | ||||||
--- | ||||||
canonical: https://grafana.com/docs/alloy/latest/reference/components/prometheus/prometheus.remote.queue/ | ||||||
aliases: | ||||||
- ../prometheus.remote.queue/ # /docs/alloy/latest/reference/components/prometheus.remote.queue/ | ||||||
description: Learn about prometheus.remote.queue | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
title: prometheus.remote.queue | ||||||
--- | ||||||
|
||||||
# prometheus.remote.queue | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
`prometheus.remote.queue` collects metrics sent from other components into a | ||||||
Write-Ahead Log (WAL) and forwards them over the network to a series of | ||||||
user-supplied endpoints. Metrics are sent over the network using the | ||||||
[Prometheus Remote Write protocol][remote_write-spec]. | ||||||
|
||||||
Multiple `prometheus.remote.queue` components can be specified by giving them | ||||||
different labels. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
[remote_write-spec]: https://docs.google.com/document/d/1LPhVRSFkGNSuU1fBd81ulhsCPR4hkSZyyBj1SZ8fWOM/edit | ||||||
|
||||||
## Usage | ||||||
|
||||||
```alloy | ||||||
prometheus.remote.queue "LABEL" { | ||||||
endpoint { | ||||||
url = REMOTE_WRITE_URL | ||||||
|
||||||
... | ||||||
} | ||||||
|
||||||
... | ||||||
} | ||||||
``` | ||||||
|
||||||
## Arguments | ||||||
|
||||||
The following arguments are supported: | ||||||
|
||||||
Name | Type | Description | Default | Required | ||||||
---- | ---- | ----------- | ------- | -------- | ||||||
`ttl` | `time` | `duration` | How long the timestamp of a signal is valid for, before the signal is discarded. | `2h` | no | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
`max_signals_to_batch` | `uint` | The maximum number of signals before they are batched to disk. | `10,000` | no | ||||||
`batch_frequency` | `duration` | How often to batch signals to disk if `max_signals_to_batch` is not reached. | no | ||||||
|
||||||
|
||||||
## Blocks | ||||||
|
||||||
The following blocks are supported inside the definition of | ||||||
`prometheus.remote.queue`: | ||||||
|
||||||
Hierarchy | Block | Description | Required | ||||||
--------- | ----- | ----------- | -------- | ||||||
endpoint | [endpoint][] | Location to send metrics to. | no | ||||||
endpoint > basic_auth | [basic_auth][] | Configure basic_auth for authenticating to the endpoint. | no | ||||||
|
||||||
The `>` symbol indicates deeper levels of nesting. For example, `endpoint > | ||||||
basic_auth` refers to a `basic_auth` block defined inside an | ||||||
`endpoint` block. | ||||||
|
||||||
[endpoint]: #endpoint-block | ||||||
[basic_auth]: #basic_auth-block | ||||||
|
||||||
### endpoint block | ||||||
|
||||||
The `endpoint` block describes a single location to send metrics to. Multiple | ||||||
`endpoint` blocks can be provided to send metrics to multiple locations. | ||||||
|
||||||
The following arguments are supported: | ||||||
|
||||||
Name | Type | Description | Default | Required | ||||||
---- | ---- | ----------- | ------- | -------- | ||||||
`url` | `string` | Full URL to send metrics to. | | yes | ||||||
`name` | `string` | Optional name to identify the endpoint in metrics. | | no | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
`write_timeout` | `duration` | Timeout for requests made to the URL. | `"30s"` | no | ||||||
`retry_backoff` | `duration` | How often to wait between retries. | `1s` | no | ||||||
`max_retry_backoff_attempts` | Maximum number of retries before dropping the batch. | `1s` | no | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
`batch_count` | `uint` | How many series to queue in each queue. | `1,000` | no | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
`flush_frequency` | `duration` | How often to wait until sending if `batch_count` is not trigger. | `1s` | no | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
`queue_count` | `uint` | How many concurrent batches to write. | 10 | no | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
`external_labels` | `map(string)` | Labels to add to metrics sent over the network. | | no | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
not sure why external? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Its how remote write defines it, so its easier to grok. I dont have a strong preference though There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ok, I'll leave it up to you, hard to tell whether it's worth using better phrasing with a cost of potentially tripping some users who got used to old names |
||||||
|
||||||
### basic_auth block | ||||||
|
||||||
{{< docs/shared lookup="reference/components/basic-auth-block.md" source="alloy" version="<ALLOY_VERSION>" >}} | ||||||
|
||||||
|
||||||
## Exported fields | ||||||
|
||||||
The following fields are exported and can be referenced by other components: | ||||||
|
||||||
Name | Type | Description | ||||||
---- | ---- | ----------- | ||||||
`receiver` | `MetricsReceiver` | A value which other components can use to send metrics to. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
## Component health | ||||||
|
||||||
`prometheus.remote.queue` is only reported as unhealthy if given an invalid | ||||||
configuration. In those cases, exported fields are kept at their last healthy | ||||||
values. | ||||||
|
||||||
## Debug information | ||||||
|
||||||
`prometheus.remote_write` does not expose any component-specific debug | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
information. | ||||||
|
||||||
## Debug metrics | ||||||
|
||||||
The below metrics are provided for backwards compatibility, they behave generally the same but there are likely | ||||||
edge cases where they differ. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
* `prometheus_remote_write_wal_storage_created_series_total` (counter): Total number of created | ||||||
series appended to the WAL. | ||||||
* `prometheus_remote_write_wal_storage_removed_series_total` (counter): Total number of series | ||||||
removed from the WAL. | ||||||
* `prometheus_remote_write_wal_samples_appended_total` (counter): Total number of samples | ||||||
appended to the WAL. | ||||||
* `prometheus_remote_write_wal_exemplars_appended_total` (counter): Total number of exemplars | ||||||
appended to the WAL. | ||||||
* `prometheus_remote_storage_samples_total` (counter): Total number of samples | ||||||
sent to remote storage. | ||||||
* `prometheus_remote_storage_exemplars_total` (counter): Total number of | ||||||
exemplars sent to remote storage. | ||||||
* `prometheus_remote_storage_metadata_total` (counter): Total number of | ||||||
metadata entries sent to remote storage. | ||||||
* `prometheus_remote_storage_samples_failed_total` (counter): Total number of | ||||||
samples that failed to send to remote storage due to non-recoverable errors. | ||||||
* `prometheus_remote_storage_exemplars_failed_total` (counter): Total number of | ||||||
exemplars that failed to send to remote storage due to non-recoverable errors. | ||||||
* `prometheus_remote_storage_metadata_failed_total` (counter): Total number of | ||||||
metadata entries that failed to send to remote storage due to | ||||||
non-recoverable errors. | ||||||
* `prometheus_remote_storage_samples_retries_total` (counter): Total number of | ||||||
samples that failed to send to remote storage but were retried due to | ||||||
recoverable errors. | ||||||
* `prometheus_remote_storage_exemplars_retried_total` (counter): Total number of | ||||||
exemplars that failed to send to remote storage but were retried due to | ||||||
recoverable errors. | ||||||
* `prometheus_remote_storage_metadata_retried_total` (counter): Total number of | ||||||
metadata entries that failed to send to remote storage but were retried due | ||||||
to recoverable errors. | ||||||
* `prometheus_remote_storage_samples_dropped_total` (counter): Total number of | ||||||
samples which were dropped after being read from the WAL before being sent to | ||||||
remote_write because of an unknown reference ID. | ||||||
* `prometheus_remote_storage_exemplars_dropped_total` (counter): Total number | ||||||
of exemplars which were dropped after being read from the WAL before being | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
sent to remote_write because of an unknown reference ID. | ||||||
* `prometheus_remote_storage_enqueue_retries_total` (counter): Total number of | ||||||
times enqueue has failed because a shard's queue was full. | ||||||
* `prometheus_remote_storage_sent_batch_duration_seconds` (histogram): Duration | ||||||
of send calls to remote storage. | ||||||
* `prometheus_remote_storage_queue_highest_sent_timestamp_seconds` (gauge): | ||||||
Unix timestamp of the latest WAL sample successfully sent by a queue. | ||||||
* `prometheus_remote_storage_samples_pending` (gauge): The number of samples | ||||||
pending in shards to be sent to remote storage. | ||||||
* `prometheus_remote_storage_exemplars_pending` (gauge): The number of | ||||||
exemplars pending in shards to be sent to remote storage. | ||||||
* `prometheus_remote_storage_samples_in_total` (counter): Samples read into | ||||||
remote storage. | ||||||
* `prometheus_remote_storage_exemplars_in_total` (counter): Exemplars read into | ||||||
remote storage. | ||||||
|
||||||
TODO document new metrics. | ||||||
|
||||||
## Examples | ||||||
|
||||||
The following examples show you how to create `prometheus.remote_write` components that send metrics to different destinations. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
### Send metrics to a local Mimir instance | ||||||
|
||||||
You can create a `prometheus.remote.queue` component that sends your metrics to a local Mimir instance: | ||||||
|
||||||
```alloy | ||||||
prometheus.remote.queue "staging" { | ||||||
// Send metrics to a locally running Mimir. | ||||||
endpoint "mimir" { | ||||||
url = "http://mimir:9009/api/v1/push" | ||||||
|
||||||
basic_auth { | ||||||
username = "example-user" | ||||||
password = "example-password" | ||||||
} | ||||||
} | ||||||
} | ||||||
|
||||||
// Configure a prometheus.scrape component to send metrics to | ||||||
// prometheus.remote_write component. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
prometheus.scrape "demo" { | ||||||
targets = [ | ||||||
// Collect metrics from the default HTTP listen address. | ||||||
{"__address__" = "127.0.0.1:12345"}, | ||||||
] | ||||||
forward_to = [prometheus.remote.queue.staging.receiver] | ||||||
} | ||||||
|
||||||
``` | ||||||
|
||||||
## TODO Metadata settings | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
## Technical details | ||||||
|
||||||
`prometheus.remote.queue` uses [snappy][] for compression. | ||||||
`prometheus.remote.queue` sends native histograms by default. | ||||||
Any labels that start with `__` will be removed before sending to the endpoint. | ||||||
|
||||||
### Data retention | ||||||
|
||||||
Data is written to disk in blocks utilizing [snappy][] compression. These blocks are read on startup and resent if they are still within the TTL. | ||||||
Any data that has not been written to disk, or that is in the network queues is lost if Alloy is restarted. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
### Retries | ||||||
|
||||||
Network errors will be retried. 429 errors will be retried. 5XX errors will retry. Any other non-2XX return codes will not be tried. | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
### Memory | ||||||
|
||||||
`prometheus.remote.queue` is meant to be memory efficient. By adjusting the `max_signals_to_batch`, `queue_count`, and `batch_size` the amount of memory | ||||||
can be controlled. A higher `max_signals_to_batch` allows for more efficient disk compression. A higher `queue_count` allows more concurrent writes and `batch_size` | ||||||
allows more data sent at one time. This can allow greater throughput, at the cost of more memory on both Alloy and the endpoint. The defaults are good for most | ||||||
mattdurham marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
common usages. | ||||||
|
||||||
## Compatible components | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This section looks a bit weird. Usually the comments are before the section heading. Also, the same section is listed twice :) It'd be nice to regenerate it. |
||||||
|
||||||
`prometheus.remote.queue` has exports that can be consumed by the following components: | ||||||
|
||||||
- Components that consume [Prometheus `MetricsReceiver`](../../../compatibility/#prometheus-metricsreceiver-consumers) | ||||||
|
||||||
{{< admonition type="note" >}} | ||||||
Connecting some components may not be sensible or components may require further configuration to make the connection work correctly. | ||||||
Refer to the linked documentation for more details. | ||||||
{{< /admonition >}} | ||||||
|
||||||
<!-- END GENERATED COMPATIBLE COMPONENTS --> | ||||||
|
||||||
[snappy]: https://en.wikipedia.org/wiki/Snappy_(compression) | ||||||
[WAL block]: #wal-block | ||||||
[Stop]: ../../../../set-up/run/ | ||||||
[run]: ../../../cli/run/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It'd be nice to add a bit more info on how
prometheus.remote.queue
is different fromprometheus.remote_write
, and when to use what component.