From 6b74e62114795f43dc437a2084b66ee0a0c1e8cd Mon Sep 17 00:00:00 2001 From: Xiang Dai <764524258@qq.com> Date: Mon, 23 Dec 2019 14:26:39 +0800 Subject: [PATCH 1/3] docs: Document Thanos Sharding Signed-off-by: Xiang Dai <764524258@qq.com> --- docs/sharing.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/sharing.md diff --git a/docs/sharing.md b/docs/sharing.md new file mode 100644 index 0000000000..5254d67433 --- /dev/null +++ b/docs/sharing.md @@ -0,0 +1,61 @@ +--- +title: Sharing +type: docs +menu: thanos +slug: /Sharing.md +--- + +# Store and Compactor Sharding + +Store and Compactor Sharding is for Long Term Retention Storage. + +## Background + +Currently all components that read from object store assume that all the operations and functionality should be done based +on **all** the available blocks that are present in the certain bucket's root directory. + +This is in most cases totally fine, however with time and allowance of storing blocks from multiple `Sources` into the same bucket, +the number of objects in a bucket can grow drastically. + +This means that with time you might want to scale out certain components e.g: + +* Compactor: Larger number of objects does not matter much, however compactor has to scale (CPU, network) with number of Sources pushing blocks to the object storage. + +### Relabelling + +Similar to [promtail](https://github.com/grafana/loki/blob/master/docs/promtail.md#scrape-configs) this config will follow native +[Prometheus relabel-config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) syntax. + +The relabel config defines filtering process done on **every** synchronization with object storage. + +We will allow potentially manipulating with several of inputs: + +* External labels: + * `` + +Output: + +* If output is empty, drop block. + +By default, on empty relabel-config, all external labels are assumed. + +Example usages would be: + +* Drop blocks which contains external labels cluster=A + +```yaml +- action: drop + regex: "A" + source_labels: + - cluster +``` + +* Keep only blocks which contains external labels cluster=A +```yaml +- action: keep + regex: "A" + source_labels: + - cluster +``` + +By controling which labels should be included in the blocks, we can do sharing. From 817e8d70b2d27f65592254b910920ed2e7d5e794 Mon Sep 17 00:00:00 2001 From: Xiang Dai <764524258@qq.com> Date: Wed, 29 Jan 2020 18:11:57 +0800 Subject: [PATCH 2/3] Add time partitioning Signed-off-by: Xiang Dai <764524258@qq.com> --- docs/sharing.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/sharing.md b/docs/sharing.md index 5254d67433..857aa5ef0f 100644 --- a/docs/sharing.md +++ b/docs/sharing.md @@ -58,4 +58,8 @@ Example usages would be: - cluster ``` -By controling which labels should be included in the blocks, we can do sharing. +By controlling which labels should be included in the blocks, we can do sharing. + +### Time Partitioning + +For store gateway, we can specify `--min-time` and `--max-time` flags to filter for what blocks store gateway should be responsible for. From d298c403aadbf418daad0c25a4e9a05afb837875 Mon Sep 17 00:00:00 2001 From: Xiang Dai <764524258@qq.com> Date: Wed, 12 Feb 2020 19:43:40 +0800 Subject: [PATCH 3/3] feedback Signed-off-by: Xiang Dai <764524258@qq.com> --- docs/{sharing.md => sharding.md} | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) rename docs/{sharing.md => sharding.md} (80%) diff --git a/docs/sharing.md b/docs/sharding.md similarity index 80% rename from docs/sharing.md rename to docs/sharding.md index 857aa5ef0f..28131b2a5c 100644 --- a/docs/sharing.md +++ b/docs/sharding.md @@ -1,15 +1,11 @@ --- -title: Sharing +title: Sharding type: docs menu: thanos -slug: /Sharing.md +slug: /sharding.md --- -# Store and Compactor Sharding - -Store and Compactor Sharding is for Long Term Retention Storage. - -## Background +# Background Currently all components that read from object store assume that all the operations and functionality should be done based on **all** the available blocks that are present in the certain bucket's root directory. @@ -19,9 +15,9 @@ the number of objects in a bucket can grow drastically. This means that with time you might want to scale out certain components e.g: -* Compactor: Larger number of objects does not matter much, however compactor has to scale (CPU, network) with number of Sources pushing blocks to the object storage. +* Compactor: Larger number of objects does not matter much, however compactor has to scale (CPU, network, disk, memory) with number of Sources pushing blocks to the object storage. -### Relabelling +# Relabelling Similar to [promtail](https://github.com/grafana/loki/blob/master/docs/promtail.md#scrape-configs) this config will follow native [Prometheus relabel-config](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config) syntax. @@ -58,8 +54,10 @@ Example usages would be: - cluster ``` -By controlling which labels should be included in the blocks, we can do sharing. +We can shard by adjusting which labels should be included in the blocks. -### Time Partitioning +# Time Partitioning For store gateway, we can specify `--min-time` and `--max-time` flags to filter for what blocks store gateway should be responsible for. + +More details can refer to "Time based partitioning" chapter in [Store gateway](components/store.md).