From e27de62a86dc5e9d929153c1a90b1c2a8410e658 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Sat, 2 Feb 2019 19:35:06 +0100 Subject: [PATCH 01/15] docs: try hugo --- Makefile | 16 + docs/components/bucket.md | 6 + docs/components/compact.md | 6 + docs/components/query.md | 6 + docs/components/rule.md | 6 + docs/components/sidecar.md | 6 + docs/components/store.md | 6 + docs/design.md | 6 + ...{getting_started.md => getting-started.md} | 6 + ...{release_process.md => release-process.md} | 0 ...vice_discovery.md => service-discovery.md} | 0 docs/storage.md | 6 + website/archetypes/docs.md | 4 + website/config.toml | 6 + website/content/docs | 1 + website/layouts/_default/baseof.html | 74 ++++ website/layouts/_default/single.html | 9 + website/layouts/docs/single.html | 28 ++ website/layouts/index.html | 61 ++++ website/public/Thanos-logo_full.svg | 1 + website/public/categories/index.xml | 14 + website/public/components/flags/bucket.txt | 27 ++ website/public/components/flags/bucket_ls.txt | 21 ++ .../public/components/flags/bucket_verify.txt | 30 ++ website/public/components/flags/compact.txt | 37 ++ website/public/components/flags/query.txt | 103 ++++++ website/public/components/flags/rule.txt | 94 +++++ website/public/components/flags/sidecar.txt | 85 +++++ website/public/components/flags/store.txt | 78 ++++ website/public/components/index.xml | 79 ++++ website/public/getting_started/index.html | 340 ++++++++++++++++++ website/public/icon-dark.png | Bin 0 -> 769 bytes website/public/icon-light.png | Bin 0 -> 888 bytes website/public/img/Thanos-logo_full.svg | 1 + website/public/img/Thanos-logo_fullmedium.png | Bin 0 -> 6709 bytes website/public/img/arch.jpg | Bin 0 -> 64932 bytes website/public/img/query_ui_6week.png | Bin 0 -> 102562 bytes website/public/img/query_ui_6week_dedup.png | Bin 0 -> 76616 bytes website/public/img/query_ui_stores.png | Bin 0 -> 56035 bytes website/public/index.html | 118 ++++++ website/public/index.xml | 207 +++++++++++ website/public/main.css | 24 ++ website/public/proposals/index.xml | 73 ++++ website/public/sitemap.xml | 103 ++++++ website/public/tags/index.xml | 14 + website/public/troubleshooting/index.xml | 26 ++ website/static/Thanos-logo_full.svg | 1 + website/static/icon-dark.png | Bin 0 -> 769 bytes website/static/icon-light.png | Bin 0 -> 888 bytes website/static/main.css | 28 ++ 50 files changed, 1757 insertions(+) rename docs/{getting_started.md => getting-started.md} (99%) rename docs/{release_process.md => release-process.md} (100%) rename docs/{service_discovery.md => service-discovery.md} (100%) create mode 100644 website/archetypes/docs.md create mode 100644 website/config.toml create mode 120000 website/content/docs create mode 100644 website/layouts/_default/baseof.html create mode 100644 website/layouts/_default/single.html create mode 100644 website/layouts/docs/single.html create mode 100644 website/layouts/index.html create mode 100644 website/public/Thanos-logo_full.svg create mode 100644 website/public/categories/index.xml create mode 100644 website/public/components/flags/bucket.txt create mode 100644 website/public/components/flags/bucket_ls.txt create mode 100644 website/public/components/flags/bucket_verify.txt create mode 100644 website/public/components/flags/compact.txt create mode 100644 website/public/components/flags/query.txt create mode 100644 website/public/components/flags/rule.txt create mode 100644 website/public/components/flags/sidecar.txt create mode 100644 website/public/components/flags/store.txt create mode 100644 website/public/components/index.xml create mode 100644 website/public/getting_started/index.html create mode 100644 website/public/icon-dark.png create mode 100644 website/public/icon-light.png create mode 100644 website/public/img/Thanos-logo_full.svg create mode 100644 website/public/img/Thanos-logo_fullmedium.png create mode 100644 website/public/img/arch.jpg create mode 100644 website/public/img/query_ui_6week.png create mode 100644 website/public/img/query_ui_6week_dedup.png create mode 100644 website/public/img/query_ui_stores.png create mode 100644 website/public/index.html create mode 100644 website/public/index.xml create mode 100644 website/public/main.css create mode 100644 website/public/proposals/index.xml create mode 100644 website/public/sitemap.xml create mode 100644 website/public/tags/index.xml create mode 100644 website/public/troubleshooting/index.xml create mode 100644 website/static/Thanos-logo_full.svg create mode 100644 website/static/icon-dark.png create mode 100644 website/static/icon-light.png create mode 100644 website/static/main.css diff --git a/Makefile b/Makefile index f88731471d..5fc28fdd15 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,9 @@ PROMU ?= $(BIN_DIR)/promu-$(PROMU_VERSION) PROMU_VERSION ?= 264dc36af9ea3103255063497636bd5713e3e9c1 PROTOC ?= $(BIN_DIR)/protoc-$(PROTOC_VERSION) PROTOC_VERSION ?= 3.4.0 +# v0.54.0 +HUGO_VERSION ?= b1a82c61aba067952fdae2f73b826fe7d0f3fc2f +HUGO ?= $(BIN_DIR)/hugo-$(HUGO_VERSION) GIT ?= $(shell which git) BZR ?= $(shell which bzr) @@ -114,6 +117,16 @@ docker-push: docs: $(EMBEDMD) build @EMBEDMD_BIN="$(EMBEDMD)" scripts/genflagdocs.sh +.PHONY: hugo-docs +hugo-docs: $(HUGO) + @echo ">> building documentation website" + @cd website && $(HUGO) + +.PHONY: hugo-server +hugo-server: $(HUGO) + @echo ">> serving documentation website" + @cd website && $(HUGO) server + # check-docs checks if documentation have discrepancy with flags and if the links are valid. .PHONY: check-docs check-docs: $(EMBEDMD) $(LICHE) build @@ -219,6 +232,9 @@ $(LICHE): $(PROMU): $(call fetch_go_bin_version,github.com/prometheus/promu,$(PROMU_VERSION)) +$(HUGO): + $(call fetch_go_bin_version,github.com/gohugoio/hugo,$(HUGO_VERSION)) + $(PROTOC): @mkdir -p $(TMP_GOPATH) @echo ">> fetching protoc@${PROTOC_VERSION}" diff --git a/docs/components/bucket.md b/docs/components/bucket.md index 8d20ec378e..fb02a23275 100644 --- a/docs/components/bucket.md +++ b/docs/components/bucket.md @@ -1,3 +1,9 @@ +--- +title: Bucket +type: docs +menu: "components" +--- + # Bucket The bucket component of Thanos is a set of commands to inspect data in object storage buckets. diff --git a/docs/components/compact.md b/docs/components/compact.md index 2eb6a99824..69aa2818bc 100644 --- a/docs/components/compact.md +++ b/docs/components/compact.md @@ -1,3 +1,9 @@ +--- +title: Compact +type: docs +menu: "components" +--- + # Compact The compactor component of Thanos applies the compaction procedure of the Prometheus 2.0 storage engine to block data stored in object storage. diff --git a/docs/components/query.md b/docs/components/query.md index f79960c10b..9da04ffe2e 100644 --- a/docs/components/query.md +++ b/docs/components/query.md @@ -1,3 +1,9 @@ +--- +title: Query +type: docs +menu: "components" +--- + # Query The query component implements the Prometheus HTTP v1 API to query data in a Thanos cluster via PromQL. diff --git a/docs/components/rule.md b/docs/components/rule.md index be35f0d6e6..fbe481d746 100644 --- a/docs/components/rule.md +++ b/docs/components/rule.md @@ -1,3 +1,9 @@ +--- +title: Rule +type: docs +menu: "components" +--- + # Rule _**NOTE:** The rule component is experimental since it has conceptual tradeoffs that might not be favorable for most use cases. It is recommended to keep deploying rules to the relevant Prometheus servers._ diff --git a/docs/components/sidecar.md b/docs/components/sidecar.md index fdb1955205..8595d21f47 100644 --- a/docs/components/sidecar.md +++ b/docs/components/sidecar.md @@ -1,3 +1,9 @@ +--- +title: Sidecar +type: docs +menu: "components" +--- + # Sidecar The sidecar component of Thanos gets deployed along with a Prometheus instance. It implements Thanos' Store API on top of Prometheus' remote-read API and advertises itself as a data source to the cluster. Thereby queriers in the cluster can treat Prometheus servers as yet another source of time series data without directly talking to its APIs. diff --git a/docs/components/store.md b/docs/components/store.md index 840795ac18..de2a34cbcf 100644 --- a/docs/components/store.md +++ b/docs/components/store.md @@ -1,3 +1,9 @@ +--- +title: Store +type: docs +menu: "components" +--- + # Store The store component of Thanos implements the Store API on top of historical data in an object storage bucket. It acts primarily as an API gateway and therefore does not need significant amounts of local disk space. It joins a Thanos cluster on startup and advertises the data it can access. diff --git a/docs/design.md b/docs/design.md index 1b85081cd2..d1469db566 100644 --- a/docs/design.md +++ b/docs/design.md @@ -1,3 +1,9 @@ +--- +title: Design +type: docs +menu: "thanos" +--- + # Design Thanos is a set of components that can be composed into a highly available Prometheus setup with long term storage capabilities. Its main goals are operation simplicity and retaining of Prometheus's reliability properties. diff --git a/docs/getting_started.md b/docs/getting-started.md similarity index 99% rename from docs/getting_started.md rename to docs/getting-started.md index 9c1f933e6a..01ca9c3f8c 100644 --- a/docs/getting_started.md +++ b/docs/getting-started.md @@ -1,3 +1,9 @@ +--- +title: Getting Started +type: docs +menu: "thanos" +--- + # Getting started Thanos provides a global query view, data backup, and historical data access as its core features in a single binary. All three features can be run independently of each other. This allows you to have a subset of Thanos features ready for immediate benefit or testing, while also making it flexible for gradual roll outs in more complex environments. diff --git a/docs/release_process.md b/docs/release-process.md similarity index 100% rename from docs/release_process.md rename to docs/release-process.md diff --git a/docs/service_discovery.md b/docs/service-discovery.md similarity index 100% rename from docs/service_discovery.md rename to docs/service-discovery.md diff --git a/docs/storage.md b/docs/storage.md index 1962ba3472..8bf5668378 100644 --- a/docs/storage.md +++ b/docs/storage.md @@ -1,3 +1,9 @@ +--- +title: Object Storage +type: docs +menu: "thanos" +--- + # Object Storage Thanos supports any object stores that can be implemented against Thanos [objstore.Bucket interface](/pkg/objstore/objstore.go) diff --git a/website/archetypes/docs.md b/website/archetypes/docs.md new file mode 100644 index 0000000000..ee74fd4179 --- /dev/null +++ b/website/archetypes/docs.md @@ -0,0 +1,4 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +--- + diff --git a/website/config.toml b/website/config.toml new file mode 100644 index 0000000000..0880be842a --- /dev/null +++ b/website/config.toml @@ -0,0 +1,6 @@ +baseURL = "http://example.org/" +languageCode = "en-us" +title = "Thanos - Highly available Prometheus setup with long term storage capabilities" + +[permalinks] + docs = "/docs/:filename/" \ No newline at end of file diff --git a/website/content/docs b/website/content/docs new file mode 120000 index 0000000000..4d42f617e0 --- /dev/null +++ b/website/content/docs @@ -0,0 +1 @@ +../../docs/ \ No newline at end of file diff --git a/website/layouts/_default/baseof.html b/website/layouts/_default/baseof.html new file mode 100644 index 0000000000..8c266c3f3c --- /dev/null +++ b/website/layouts/_default/baseof.html @@ -0,0 +1,74 @@ + + + + + + + + + + {{ block "title" . }}{{ .Site.Title }}{{ end }} + + + + + {{ block "main" . }}{{ end }} + + + + + + + \ No newline at end of file diff --git a/website/layouts/_default/single.html b/website/layouts/_default/single.html new file mode 100644 index 0000000000..7ed60df647 --- /dev/null +++ b/website/layouts/_default/single.html @@ -0,0 +1,9 @@ +{{ define "main" }} +
+
+
+ {{ .Content }} +
+
+
+{{ end }} \ No newline at end of file diff --git a/website/layouts/docs/single.html b/website/layouts/docs/single.html new file mode 100644 index 0000000000..b928078bd1 --- /dev/null +++ b/website/layouts/docs/single.html @@ -0,0 +1,28 @@ +{{ define "main" }} +
+
+
+ {{ $currentPage := . }} +
Thanos
+
    + {{ range .Site.Menus.thanos }} +
  • + {{ .Title }} +
  • + {{ end }} +
+
Components
+
    + {{ range .Site.Menus.components }} +
  • + {{ .Title }} +
  • + {{ end }} +
+
+
+ {{ .Content }} +
+
+
+{{ end }} \ No newline at end of file diff --git a/website/layouts/index.html b/website/layouts/index.html new file mode 100644 index 0000000000..7400b86b2a --- /dev/null +++ b/website/layouts/index.html @@ -0,0 +1,61 @@ +{{ define "main" }} +
+ +
+
+
+
+ +

Global Query Interface

+

Global querying view across all connected Prometheus servers and multiple clusters

+
+
+ +

Unlimited Retention

+

Use any object storage as an option. Supports GCP, S3, Azure, Swift and Tencent COS

+
+
+ +

Prometheus Compatible

+

Use the same tools you love such as Grafana or any other that uses Prometheus' API

+
+
+ +

Downsampling & Compaction

+

Downsampling historical data for massive query speedup or configure a retention policy

+
+
+
+
+
+
+

Join the community !

+

Many people are already using Thanos in production !

+

Maybe some companies logo here ?

+
    +
  • +
  • +
  • +
  • +
+
+
+
+{{ end }} \ No newline at end of file diff --git a/website/public/Thanos-logo_full.svg b/website/public/Thanos-logo_full.svg new file mode 100644 index 0000000000..7941cfe32e --- /dev/null +++ b/website/public/Thanos-logo_full.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/public/categories/index.xml b/website/public/categories/index.xml new file mode 100644 index 0000000000..84a8939ed7 --- /dev/null +++ b/website/public/categories/index.xml @@ -0,0 +1,14 @@ + + + + Categories on Thanos - Highly available Prometheus setup with long term storage capabilities + http://example.org/categories/ + Recent content in Categories on Thanos - Highly available Prometheus setup with long term storage capabilities + Hugo -- gohugo.io + en-us + + + + + + \ No newline at end of file diff --git a/website/public/components/flags/bucket.txt b/website/public/components/flags/bucket.txt new file mode 100644 index 0000000000..ccf2225d1f --- /dev/null +++ b/website/public/components/flags/bucket.txt @@ -0,0 +1,27 @@ +usage: thanos bucket --objstore.config-file= [ ...] + +inspect metric data in an object storage bucket + +Flags: + -h, --help Show context-sensitive help (also try --help-long and + --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings to. If + empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). If 0 no + trace will be sent periodically, unless forced by + baggage item. See `pkg/tracing/tracing.go` for details. + --objstore.config-file= + The object store configuration file path. + +Subcommands: + bucket verify [] + verify all blocks in the bucket against specified issues + + bucket ls [] + list all blocks in the bucket + + diff --git a/website/public/components/flags/bucket_ls.txt b/website/public/components/flags/bucket_ls.txt new file mode 100644 index 0000000000..821961f2a2 --- /dev/null +++ b/website/public/components/flags/bucket_ls.txt @@ -0,0 +1,21 @@ +usage: thanos bucket ls [] + +list all blocks in the bucket + +Flags: + -h, --help Show context-sensitive help (also try --help-long and + --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings to. If + empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). If 0 no + trace will be sent periodically, unless forced by + baggage item. See `pkg/tracing/tracing.go` for details. + --objstore.config-file= + The object store configuration file path. + -o, --output="" Format in which to print each block's information. May + be 'json' or custom template. + diff --git a/website/public/components/flags/bucket_verify.txt b/website/public/components/flags/bucket_verify.txt new file mode 100644 index 0000000000..04604e7bab --- /dev/null +++ b/website/public/components/flags/bucket_verify.txt @@ -0,0 +1,30 @@ +usage: thanos bucket verify [] + +verify all blocks in the bucket against specified issues + +Flags: + -h, --help Show context-sensitive help (also try --help-long and + --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings to. If + empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). If 0 no + trace will be sent periodically, unless forced by + baggage item. See `pkg/tracing/tracing.go` for details. + --objstore.config-file= + The object store configuration file path. + -r, --repair attempt to repair blocks for which issues were detected + --objstore-backup.config-file= + The backup object store configuration file path. + -i, --issues=index_issue... ... + Issues to verify (and optionally repair). Possible + values: [duplicated_compaction index_issue + overlapped_blocks] + --id-whitelist=ID-WHITELIST ... + Block IDs to verify (and optionally repair) only. If + none is specified, all blocks will be verified. Repeated + field + diff --git a/website/public/components/flags/compact.txt b/website/public/components/flags/compact.txt new file mode 100644 index 0000000000..5885b22cd6 --- /dev/null +++ b/website/public/components/flags/compact.txt @@ -0,0 +1,37 @@ +usage: thanos compact --objstore.config-file= [] + +continuously compacts blocks in an object store bucket + +Flags: + -h, --help Show context-sensitive help (also try --help-long and + --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings to. + If empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). If 0 no + trace will be sent periodically, unless forced by + baggage item. See `pkg/tracing/tracing.go` for + details. + --http-address="0.0.0.0:10902" + Listen host:port for HTTP endpoints. + --data-dir="./data" Data directory in which to cache blocks and process + compactions. + --objstore.config-file= + The object store configuration file path. + --sync-delay=30m Minimum age of fresh (non-compacted) blocks before + they are being processed. + --retention.resolution-raw=0d + How long to retain raw samples in bucket. 0d - + disables this retention + --retention.resolution-5m=0d + How long to retain samples of resolution 1 (5 + minutes) in bucket. 0d - disables this retention + --retention.resolution-1h=0d + How long to retain samples of resolution 2 (1 hour) + in bucket. 0d - disables this retention + -w, --wait Do not exit after all compactions have been processed + and wait for new work. + diff --git a/website/public/components/flags/query.txt b/website/public/components/flags/query.txt new file mode 100644 index 0000000000..453eb48530 --- /dev/null +++ b/website/public/components/flags/query.txt @@ -0,0 +1,103 @@ +usage: thanos query [] + +query node exposing PromQL enabled Query API with data retrieved from multiple +store nodes + +Flags: + -h, --help Show context-sensitive help (also try + --help-long and --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings + to. If empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). + If 0 no trace will be sent periodically, unless + forced by baggage item. See + `pkg/tracing/tracing.go` for details. + --grpc-address="0.0.0.0:10901" + Listen ip:port address for gRPC endpoints + (StoreAPI). Make sure this address is routable + from other components if you use gossip, + 'grpc-advertise-address' is empty and you + require cross-node connection. + --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS + Explicit (external) host:port address to + advertise for gRPC StoreAPI in gossip cluster. + If empty, 'grpc-address' will be used. + --grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to + disable TLS + --grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to + disable TLS + --grpc-server-tls-client-ca="" + TLS CA to verify clients against. If no client + CA is specified, there is no client + verification on server side. (tls.NoClientCert) + --http-address="0.0.0.0:10902" + Listen host:port for HTTP endpoints. + --cluster.address="0.0.0.0:10900" + Listen ip:port address for gossip cluster. + --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS + Explicit (external) ip:port address to + advertise for gossip in gossip cluster. Used + internally for membership only. + --cluster.peers=CLUSTER.PEERS ... + Initial peers to join the cluster. It can be + either , or . A lookup + resolution is done only at the startup. + --cluster.gossip-interval= + Interval between sending gossip messages. By + lowering this value (more frequent) gossip + messages are propagated across the cluster more + quickly at the expense of increased bandwidth. + Default is used from a specified network-type. + --cluster.pushpull-interval= + Interval for gossip state syncs. Setting this + interval lower (more frequent) will increase + convergence speeds across larger clusters at + the expense of increased bandwidth usage. + Default is used from a specified network-type. + --cluster.refresh-interval=1m + Interval for membership to refresh + cluster.peers state, 0 disables refresh. + --cluster.secret-key=CLUSTER.SECRET-KEY + Initial secret key to encrypt cluster gossip. + Can be one of AES-128, AES-192, or AES-256 in + hexadecimal format. + --cluster.network-type=lan + Network type with predefined peers + configurations. Sets of configurations + accounting the latency differences between + network types: local, lan, wan. + --http-advertise-address=HTTP-ADVERTISE-ADDRESS + Explicit (external) host:port address to + advertise for HTTP QueryAPI in gossip cluster. + If empty, 'http-address' will be used. + --grpc-client-tls-secure Use TLS when talking to the gRPC server + --grpc-client-tls-cert="" TLS Certificates to use to identify this client + to the server + --grpc-client-tls-key="" TLS Key for the client's certificate + --grpc-client-tls-ca="" TLS CA Certificates to use to verify gRPC + servers + --grpc-client-server-name="" + Server name to verify the hostname on the + returned gRPC certificates. See + https://tools.ietf.org/html/rfc4366#section-3.1 + --query.timeout=2m Maximum time to process query by query node. + --query.max-concurrent=20 Maximum number of queries processed + concurrently by query node. + --query.replica-label=QUERY.REPLICA-LABEL + Label to treat as a replica indicator along + which data is deduplicated. Still you will be + able to query without deduplication using + 'dedup=false' parameter. + --selector-label=="" ... + Query selector labels that will be exposed in + info endpoint (repeated). + --store= ... Addresses of statically configured store API + servers (repeatable). + --query.auto-downsampling Enable automatic adjustment (step / 5) to what + source of data should be used in store gateways + if no max_source_resolution param is specified. + diff --git a/website/public/components/flags/rule.txt b/website/public/components/flags/rule.txt new file mode 100644 index 0000000000..265b042bde --- /dev/null +++ b/website/public/components/flags/rule.txt @@ -0,0 +1,94 @@ +usage: thanos rule [] + +ruler evaluating Prometheus rules against given Query nodes, exposing Store API +and storing old blocks in bucket + +Flags: + -h, --help Show context-sensitive help (also try + --help-long and --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings + to. If empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). + If 0 no trace will be sent periodically, unless + forced by baggage item. See + `pkg/tracing/tracing.go` for details. + --grpc-address="0.0.0.0:10901" + Listen ip:port address for gRPC endpoints + (StoreAPI). Make sure this address is routable + from other components if you use gossip, + 'grpc-advertise-address' is empty and you + require cross-node connection. + --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS + Explicit (external) host:port address to + advertise for gRPC StoreAPI in gossip cluster. + If empty, 'grpc-address' will be used. + --grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to + disable TLS + --grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to + disable TLS + --grpc-server-tls-client-ca="" + TLS CA to verify clients against. If no client + CA is specified, there is no client + verification on server side. (tls.NoClientCert) + --http-address="0.0.0.0:10902" + Listen host:port for HTTP endpoints. + --cluster.address="0.0.0.0:10900" + Listen ip:port address for gossip cluster. + --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS + Explicit (external) ip:port address to + advertise for gossip in gossip cluster. Used + internally for membership only. + --cluster.peers=CLUSTER.PEERS ... + Initial peers to join the cluster. It can be + either , or . A lookup + resolution is done only at the startup. + --cluster.gossip-interval= + Interval between sending gossip messages. By + lowering this value (more frequent) gossip + messages are propagated across the cluster more + quickly at the expense of increased bandwidth. + Default is used from a specified network-type. + --cluster.pushpull-interval= + Interval for gossip state syncs. Setting this + interval lower (more frequent) will increase + convergence speeds across larger clusters at + the expense of increased bandwidth usage. + Default is used from a specified network-type. + --cluster.refresh-interval=1m + Interval for membership to refresh + cluster.peers state, 0 disables refresh. + --cluster.secret-key=CLUSTER.SECRET-KEY + Initial secret key to encrypt cluster gossip. + Can be one of AES-128, AES-192, or AES-256 in + hexadecimal format. + --cluster.network-type=lan + Network type with predefined peers + configurations. Sets of configurations + accounting the latency differences between + network types: local, lan, wan. + --label=="" ... + Labels to be applied to all generated metrics + (repeated). + --data-dir="data/" data directory + --rule-file=rules/ ... Rule files that should be used by rule manager. + Can be in glob format (repeated). + --eval-interval=30s The default evaluation interval to use. + --tsdb.block-duration=2h Block duration for TSDB block. + --tsdb.retention=48h Block retention time on local disk. + --alertmanagers.url=ALERTMANAGERS.URL ... + Alertmanager URLs to push firing alerts to. The + scheme may be prefixed with 'dns+' or 'dnssrv+' + to detect Alertmanager IPs through respective + DNS lookups. The port defaults to 9093 or the + SRV record's value. The URL path is used as a + prefix for the regular Alertmanager API path. + --alert.query-url=ALERT.QUERY-URL + The external Thanos Query URL that would be set + in all alerts 'Source' field + --objstore.config-file= + The object store configuration file path. + diff --git a/website/public/components/flags/sidecar.txt b/website/public/components/flags/sidecar.txt new file mode 100644 index 0000000000..450d0084df --- /dev/null +++ b/website/public/components/flags/sidecar.txt @@ -0,0 +1,85 @@ +usage: thanos sidecar [] + +sidecar for Prometheus server + +Flags: + -h, --help Show context-sensitive help (also try + --help-long and --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings + to. If empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). + If 0 no trace will be sent periodically, unless + forced by baggage item. See + `pkg/tracing/tracing.go` for details. + --grpc-address="0.0.0.0:10901" + Listen ip:port address for gRPC endpoints + (StoreAPI). Make sure this address is routable + from other components if you use gossip, + 'grpc-advertise-address' is empty and you + require cross-node connection. + --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS + Explicit (external) host:port address to + advertise for gRPC StoreAPI in gossip cluster. + If empty, 'grpc-address' will be used. + --grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to + disable TLS + --grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to + disable TLS + --grpc-server-tls-client-ca="" + TLS CA to verify clients against. If no client + CA is specified, there is no client + verification on server side. (tls.NoClientCert) + --http-address="0.0.0.0:10902" + Listen host:port for HTTP endpoints. + --cluster.address="0.0.0.0:10900" + Listen ip:port address for gossip cluster. + --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS + Explicit (external) ip:port address to + advertise for gossip in gossip cluster. Used + internally for membership only. + --cluster.peers=CLUSTER.PEERS ... + Initial peers to join the cluster. It can be + either , or . A lookup + resolution is done only at the startup. + --cluster.gossip-interval= + Interval between sending gossip messages. By + lowering this value (more frequent) gossip + messages are propagated across the cluster more + quickly at the expense of increased bandwidth. + Default is used from a specified network-type. + --cluster.pushpull-interval= + Interval for gossip state syncs. Setting this + interval lower (more frequent) will increase + convergence speeds across larger clusters at + the expense of increased bandwidth usage. + Default is used from a specified network-type. + --cluster.refresh-interval=1m + Interval for membership to refresh + cluster.peers state, 0 disables refresh. + --cluster.secret-key=CLUSTER.SECRET-KEY + Initial secret key to encrypt cluster gossip. + Can be one of AES-128, AES-192, or AES-256 in + hexadecimal format. + --cluster.network-type=lan + Network type with predefined peers + configurations. Sets of configurations + accounting the latency differences between + network types: local, lan, wan. + --prometheus.url=http://localhost:9090 + URL at which to reach Prometheus's API. For + better performance use local network. + --tsdb.path="./data" Data directory of TSDB. + --reloader.config-file="" Config file watched by the reloader. + --reloader.config-envsubst-file="" + Output file for environment variable + substituted config file. + --reloader.rule-dir=RELOADER.RULE-DIR ... + Rule directories for the reloader to refresh + (repeated field). + --objstore.config-file= + The object store configuration file path. + diff --git a/website/public/components/flags/store.txt b/website/public/components/flags/store.txt new file mode 100644 index 0000000000..ca79625c6f --- /dev/null +++ b/website/public/components/flags/store.txt @@ -0,0 +1,78 @@ +usage: thanos store --objstore.config-file= [] + +store node giving access to blocks in a bucket provider. Now supported GCS / S3. + +Flags: + -h, --help Show context-sensitive help (also try + --help-long and --help-man). + --version Show application version. + --log.level=info Log filtering level. + --gcloudtrace.project=GCLOUDTRACE.PROJECT + GCP project to send Google Cloud Trace tracings + to. If empty, tracing will be disabled. + --gcloudtrace.sample-factor=1 + How often we send traces (1/). + If 0 no trace will be sent periodically, unless + forced by baggage item. See + `pkg/tracing/tracing.go` for details. + --grpc-address="0.0.0.0:10901" + Listen ip:port address for gRPC endpoints + (StoreAPI). Make sure this address is routable + from other components if you use gossip, + 'grpc-advertise-address' is empty and you + require cross-node connection. + --grpc-advertise-address=GRPC-ADVERTISE-ADDRESS + Explicit (external) host:port address to + advertise for gRPC StoreAPI in gossip cluster. + If empty, 'grpc-address' will be used. + --grpc-server-tls-cert="" TLS Certificate for gRPC server, leave blank to + disable TLS + --grpc-server-tls-key="" TLS Key for the gRPC server, leave blank to + disable TLS + --grpc-server-tls-client-ca="" + TLS CA to verify clients against. If no client + CA is specified, there is no client + verification on server side. (tls.NoClientCert) + --http-address="0.0.0.0:10902" + Listen host:port for HTTP endpoints. + --cluster.address="0.0.0.0:10900" + Listen ip:port address for gossip cluster. + --cluster.advertise-address=CLUSTER.ADVERTISE-ADDRESS + Explicit (external) ip:port address to + advertise for gossip in gossip cluster. Used + internally for membership only. + --cluster.peers=CLUSTER.PEERS ... + Initial peers to join the cluster. It can be + either , or . A lookup + resolution is done only at the startup. + --cluster.gossip-interval= + Interval between sending gossip messages. By + lowering this value (more frequent) gossip + messages are propagated across the cluster more + quickly at the expense of increased bandwidth. + Default is used from a specified network-type. + --cluster.pushpull-interval= + Interval for gossip state syncs. Setting this + interval lower (more frequent) will increase + convergence speeds across larger clusters at + the expense of increased bandwidth usage. + Default is used from a specified network-type. + --cluster.refresh-interval=1m + Interval for membership to refresh + cluster.peers state, 0 disables refresh. + --cluster.secret-key=CLUSTER.SECRET-KEY + Initial secret key to encrypt cluster gossip. + Can be one of AES-128, AES-192, or AES-256 in + hexadecimal format. + --cluster.network-type=lan + Network type with predefined peers + configurations. Sets of configurations + accounting the latency differences between + network types: local, lan, wan. + --data-dir="./data" Data directory in which to cache remote blocks. + --objstore.config-file= + The object store configuration file path. + --index-cache-size=250MB Maximum size of items held in the index cache. + --chunk-pool-size=2GB Maximum size of concurrently allocatable bytes + for chunks. + diff --git a/website/public/components/index.xml b/website/public/components/index.xml new file mode 100644 index 0000000000..87083b2e51 --- /dev/null +++ b/website/public/components/index.xml @@ -0,0 +1,79 @@ + + + + Components on Thanos - Highly available Prometheus setup with long term storage capabilities + http://example.org/components/ + Recent content in Components on Thanos - Highly available Prometheus setup with long term storage capabilities + Hugo -- gohugo.io + en-us + + + + + + + http://example.org/components/bucket/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/bucket/ + Bucket The bucket component of Thanos is a set of commands to inspect data in object storage buckets. It is normally run as a stand alone command to aid with troubleshooting. +Example: +$ thanos bucket verify --objstore.config-file=bucket.yml The content of bucket.yml: +type: GCS config: bucket: example-bucket Bucket can be extended to add more subcommands that will be helpful when working with object storage buckets by adding a new command within /cmd/thanos/bucket. + + + + + http://example.org/components/compact/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/compact/ + Compact The compactor component of Thanos applies the compaction procedure of the Prometheus 2.0 storage engine to block data stored in object storage. It is generally not semantically concurrency safe and must be deployed as a singleton against a bucket. +Example: +$ thanos compact --data-dir /tmp/thanos-compact --objstore.config-file=bucket.yml The content of bucket.yml: +type: GCS config: bucket: example-bucket The compactor needs local disk space to store intermediate data for its processing. + + + + + http://example.org/components/query/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/query/ + Query The query component implements the Prometheus HTTP v1 API to query data in a Thanos cluster via PromQL. +It gathers the data needed to evaluate the query from underlying StoreAPIs. See here on how to connect querier with desired StoreAPIs. +Querier currently is fully stateless and horizontally scalable. +$ thanos query \ --http-address "0.0.0.0:9090" \ --store "<store-api>:<grpc-port>" \ --store "<store-api2>:<grpc-port>" \ Deduplication The query layer can deduplicate series that were collected from high-availability pairs of data sources such as Prometheus. + + + + + http://example.org/components/rule/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/rule/ + Rule NOTE: The rule component is experimental since it has conceptual tradeoffs that might not be favorable for most use cases. It is recommended to keep deploying rules to the relevant Prometheus servers. +The rule component should in particular not be used to circumvent solving rule deployment properly at the configuration management level. +The rule component evaluates Prometheus recording and alerting rules against random query nodes in its cluster. Rule results are written back to disk in the Prometheus 2. + + + + + http://example.org/components/sidecar/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/sidecar/ + Sidecar The sidecar component of Thanos gets deployed along with a Prometheus instance. It implements Thanos’ Store API on top of Prometheus’ remote-read API and advertises itself as a data source to the cluster. Thereby queriers in the cluster can treat Prometheus servers as yet another source of time series data without directly talking to its APIs. Additionally, the sidecar uploads TSDB blocks to an object storage bucket as Prometheus produces them. + + + + + http://example.org/components/store/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/store/ + Store The store component of Thanos implements the Store API on top of historical data in an object storage bucket. It acts primarily as an API gateway and therefore does not need significant amounts of local disk space. It joins a Thanos cluster on startup and advertises the data it can access. It keeps a small amount of information about all remote blocks on local disk and keeps it in sync with the bucket. + + + + \ No newline at end of file diff --git a/website/public/getting_started/index.html b/website/public/getting_started/index.html new file mode 100644 index 0000000000..56b8ccfbb3 --- /dev/null +++ b/website/public/getting_started/index.html @@ -0,0 +1,340 @@ + + + + + + + + + + Thanos - Highly available Prometheus setup with long term storage capabilities + + + + + +
+
+
+ + +

Getting started

+ +

Thanos provides a global query view, data backup, and historical data access as its core features in a single binary. All three features can be run independently of each other. This allows you to have a subset of Thanos features ready for immediate benefit or testing, while also making it flexible for gradual roll outs in more complex environments.

+ +

In this quick-start guide, we will configure Thanos and all components mentioned to work against a Google Cloud Storage bucket. +At the moment, Thanos is able to use different storage providers, with the ability to add more providers as necessary.

+ +

Requirements

+ +
    +
  • One or more Prometheus v2.2.1+ installations
  • +
  • golang 1.10+
  • +
  • An object storage bucket (optional)
  • +
+ +

Get Thanos!

+ +

You can find the latest Thanos release here.

+ +

If you want to build Thanos from source - +with a working installation of the Go toolchain (GOPATH, PATH=${GOPATH}/bin:${PATH}), Thanos can be downloaded and built by running:

+ +
go get -d github.com/improbable-eng/thanos/...
+cd ${GOPATH}/src/github.com/improbable-eng/thanos
+make
+
+ +

The thanos binary should now be in your $PATH and is the only thing required to deploy any of its components.

+ +

Prometheus

+ +

Thanos bases on vanilla Prometheus (v2.2.1+).

+ +

For exact Prometheus version list Thanos was tested against you can find here

+ +

Sidecar

+ +

Thanos integrates with existing Prometheus servers through a Sidecar process, which runs on the same machine or in the same pod as the Prometheus server.

+ +

The purpose of the Sidecar is to backup Prometheus data into an Object Storage bucket, and giving other Thanos components access to the Prometheus instance the Sidecar is attached to.

+ +

More details about the Sidecar’s functions are available at the sidecar documentation page.

+ +

NOTE: If you want to use reload.* flags for sidecar, make sure you enable reload Prometheus endpoint with flag --web.enable-lifecycle

+ +

Backups

+ +

The following configures the sidecar to only backup Prometheus data into a chosen object storage:

+ +
thanos sidecar \
+    --tsdb.path            /var/prometheus \               # TSDB data directory of Prometheus
+    --prometheus.url       "http://localhost:9090" \
+    --objstore.config-file bucket_config.yaml \            # Bucket to upload data to
+
+ +

The format of YAML file depends on provider you choose. Examples of config and up-to-date list of storage types Thanos supports is available here.

+ +

Rolling this out has little to zero impact on the running Prometheus instance. It is a good start to ensure you are backing up your data while figuring out the other pieces of Thanos.

+ +

If you are not interested in backing up any data, the --objstore.config-file flag can simply be omitted.

+ + + +

Store API

+ +

The Sidecar component implements and exposes gRPC Store API. The Store API allows you to query metric data in Prometheus and data backed up into the Object Store bucket.

+ +

Let’s extend the Sidecar in the previous section to connect to a Prometheus server, and expose the Store API.

+ +
thanos sidecar \
+    --tsdb.path                 /var/prometheus \
+    --objstore.config-file      bucket_config.yaml \       # Bucket config file to send data to
+    --prometheus.url            http://localhost:9090 \    # Location of the Prometheus HTTP server
+    --http-address              0.0.0.0:19191 \            # HTTP endpoint for collecting metrics on the Sidecar
+    --grpc-address              0.0.0.0:19090              # GRPC endpoint for StoreAPI
+
+ + + +

External Labels

+ +

Prometheus allows the configuration of “external labels” of a given Prometheus instance. These are meant to globally identify the role of that instance. As Thanos aims to aggregate data across all instances, providing a consistent set of external labels becomes crucial!

+ +

Every Prometheus instance must have a globally unique set of identifying labels. For example, in Prometheus’s configuration file:

+ +
global:
+  external_labels:
+    region: eu-west
+    monitor: infrastructure
+    replica: A
+# ...
+
+ +

Query Layer

+ +

Now that we have setup the Sidecar for one or more Prometheus instances, we want to use Thanos’ global Query Layer to evaluate PromQL queries against all instances at once.

+ +

The Query component is stateless and horizontally scalable and can be deployed with any number of replicas. Once connected to the Sidecars, it automatically detects which Prometheus servers need to be contacted for a given PromQL query.

+ +

Query also implements Prometheus’s offical HTTP API and can thus be used with external tools such as Grafana. It also serves a derivative of Prometheus’s UI for ad-hoc querying.

+ +

Below, we will set up a Query to connect to our Sidecars, and expose its HTTP UI.

+ +
thanos query \
+    --http-address              0.0.0.0:19192 \         # HTTP Endpoint for Query UI
+    --store                     1.2.3.4:19090 \         # Static gRPC Store API Address for the query node to query
+    --store                     1.2.3.5:19090           # Also repeatable
+
+ +

Go to the configured HTTP address that should now show a UI similar to that of Prometheus. If the cluster formed correctly you can now query across all Prometheus instances within the cluster.

+ +

Deduplicating Data from Prometheus HA pairs

+ +

The Query component is also capable of deduplicating data collected from Prometheus HA pairs. This requires configuring Prometheus’s global.external_labels configuration block (as mentioned in the External Labels section) to identify the role of a given Prometheus instance.

+ +

A typical choice is simply the label name “replica” while letting the value be whatever you wish. For example, you might set up the following in Prometheus’s configuration file:

+ +
global:
+  external_labels:
+    region: eu-west
+    monitor: infrastructure
+    replica: A
+# ...
+
+ +

Reload your Prometheus instances, and then, in Query, we will enable replica as the label we want to enable deduplication to occur on:

+ +
thanos query \
+    --http-address              0.0.0.0:19192 \
+    --store                     1.2.3.4:19090 \
+    --store                     1.2.3.5:19090 \
+    --query.replica-label       replica                # Replica label for de-duplication
+
+ +

Go to the configured HTTP address, and you should now be able to query across all Prometheus instances and receive de-duplicated data.

+ + + +

Communication Between Components

+ +

The only required communication between nodes is for Thanos Querier to be able to reach gRPC storeAPIs you provide. Thanos Querier periodically calls Info endpoint to collect up-to-date metadata as well as checking the health of given StoreAPI. +The metadata includes the information about time windows and external labels for each node.

+ +

There are various ways to tell query component about the StoreAPIs it should query data from. The simplest way is to use a static list of well known addresses to query. +These are repeatable so can add as many endpoint as needed. You can put DNS domain prefixed by dns:// or dns+srv:// to have Thanos Query do an A or SRV lookup to get all required IPs to communicate with.

+ +
thanos query \
+    --http-address              0.0.0.0:19192 \                     # Endpoint for Query UI
+    --grpc-address              0.0.0.0:19092 \                     # gRPC endpoint for Store API
+    --store                     1.2.3.4:19090 \                     # Static gRPC Store API Address for the query node to query
+    --store                     1.2.3.5:19090 \                     # Also repeatable
+    --store                     dns://rest.thanos.peers:19092       # Use DNS lookup for getting all registered IPs as separate StoreAPIs    
+
+ +

Read more details here

+ +

Deprecated: Gossip configuration.

+ +

Given a sidecar we can have it join a gossip cluster by advertising itself to other peers within the network.

+ +

NOTE: Gossip will be removed. See here why. New FileSD with DNS support is enabled and described here

+ +
thanos sidecar \
+    --prometheus.url            http://localhost:9090 \
+    --tsdb.path                 /var/prometheus \
+    --objstore.config-file      bucket_config.yaml \       # Bucket config file to send data to
+    --grpc-address              0.0.0.0:19091 \            # gRPC endpoint for Store API (will be used to perform PromQL queries)
+    --http-address              0.0.0.0:19191 \            # HTTP endpoint for collecting metrics on Thanos sidecar
+    --cluster.address           0.0.0.0:19391 \            # Endpoint used to meta data about the current node
+    --cluster.advertise-address 127.0.0.1:19391 \          # Location at which the node advertise itself at to other members of the cluster
+    --cluster.peers             127.0.0.1:19391            # Static cluster peer where the node will get info about the cluster (repeatable)
+
+ +

With the above configuration a single node will advertise itself in the cluster and query for other members of the cluster (from itself) when you add more sidecars / components you will probably want to sent cluster.peers to a well known peer that will allow you to discover other peers within the cluster.

+ +

When a peer advertises itself / joins a gossip cluster it sends information about all the peers it currently knows about (including itself). This information for each peer allows you to see what type of component a peer is (Source, Store, Query), the peers Store API address (used for querying) and meta data about the external labels and time window the peer holds information about.

+ +

Once the Peer joins the cluster it will periodically update the information it sends out with new / updated information about other peers and the time windows for the metrics that it can access.

+ +
thanos query \
+    --http-address              0.0.0.0:19192 \         # Endpoint for Query UI
+    --grpc-address              0.0.0.0:19092 \         # gRPC endpoint for Store API
+    --cluster.address           0.0.0.0:19591 \
+    --cluster.advertise-address 127.0.0.1:19591 \
+    --cluster.peers             127.0.0.1:19391         # Static cluster peer where the node will get info about the cluster
+
+ +

You can mix both static store and cluster based approaches:

+ +
thanos query \
+    --http-address              0.0.0.0:19192 \                     # Endpoint for Query UI
+    --grpc-address              0.0.0.0:19092 \                     # gRPC endpoint for Store API
+    --cluster.address           0.0.0.0:19591 \
+    --cluster.advertise-address 127.0.0.1:19591 \
+    --cluster.peers             127.0.0.1:19391 \                   # Static cluster peer where the node will get info about the cluster
+    --cluster.peers             127.0.0.1:19392 \                   # Another cluster peer (many can be added to discover nodes)
+    --store                     1.2.3.4:19090 \                     # Static gRPC Store API Address for the query node to query
+    --store                     1.2.3.5:19090 \                     # Also repeatable
+    --store                     dns://rest.thanos.peers:19092       # Use DNS lookup for getting all registered IPs as separate StoreAPIs    
+
+ +

When to use gossip vs store flags? +- Use gossip if you want to maintain single gossip cluster that is able to dynamically join and remove components. +- Use static store when you want to have full control of which components are connected. It is also easier to user static store options when setting up communication with remote (cross-cluster) components e.g (sidecar in different network through some proxy)

+ +

Configuration of initial peers is flexible and the argument can be repeated for Thanos to try different approaches. +Additional flags for cluster configuration exist but are typically not needed. Check the --help output for further information.

+ + + +

Store Gateway

+ +

As the sidecar backs up data into the object storage of your choice, you can decrease Prometheus retention and store less locally. However we need a way to query all that historical data again. +The store gateway does just that by implementing the same gRPC data API as the sidecars but backing it with data it can find in your object storage bucket. +Just like sidecars and query nodes, the store gateway exposes StoreAPI and needs to be discovered by Thanos Querier.

+ +
thanos store \
+    --data-dir                  /var/thanos/store \     # Disk space for local caches
+    --objstore.config-file      bucket_config.yaml \    # Bucket to fetch data from
+    --http-address              0.0.0.0:19191 \         # HTTP endpoint for collecting metrics on the Store Gateway
+    --grpc-address              0.0.0.0:19090           # GRPC endpoint for StoreAPI
+
+ +

The store gateway occupies small amounts of disk space for caching basic information about data in the object storage. This will rarely exceed more than a few gigabytes and is used to improve restart times. It is not useful but not required to preserve it across restarts.

+ + + +

Compactor

+ +

A local Prometheus installation periodically compacts older data to improve query efficieny. Since the sidecar backs up data as soon as possible, we need a way to apply the same process to data in the object storage.

+ +

The compactor component simple scans the object storage and processes compaction where required. At the same time it is responsible for creating downsampled copies of data to speed up queries.

+ +
thanos compact \
+    --data-dir             /var/thanos/compact \  # Temporary workspace for data processing
+    --objstore.config-file bucket_config.yaml \   # Bucket where to apply the compacting
+    --http-address         0.0.0.0:19191          # HTTP endpoint for collecting metrics on the Compactor
+
+ +

The compactor is not in the critical path of querying or data backup. It can either be run as a periodic batch job or be left running to always compact data as soon as possible. It is recommended to provide 100-300GB of local disk space for data processing.

+ +

NOTE: The compactor must be run as a singleton and must not run when manually modifying data in the bucket.

+ +

Ruler

+ +

In case of Prometheus with Thanos sidecar does not have enough retention, or if you want to have alerts or recording rules that requires global view, Thanos offers Ruler +which does rule and alert evaluation on top of given Thanos Querier.

+ +

All-in-one example

+ +

You can find one-box example with minikube here.

+ +

Dashboards

+ +

You can find example Grafana dashboards here

+ +

Alerts

+ +

You can find example Alert configuration here

+ +
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/public/icon-dark.png b/website/public/icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6008bc0d4f62b902bf7c8dc482332af1c460d09b GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^XMp$!2OE&QTzGCikYY>nc6VXOWpHHpe`GhqPoM~A zfk$L91B0G22s2hJwJ!q-vX^-Jy0SlJ6z7)~O_qHd1{9Jkag8W(&d<$F%`0JWE=o-- zNlj5G&n(GMaQE~L2yf&QXJBB;^mK6yskrs_F5{*}1_BNTk39Mp-e5W2&bKt~RX;N|^s?8>Ju?gv4n2u6^)>hoHL&3F{5i9$eI#yV9*X!n zS6rCQM`Fz{HDGAK91pad0qg*f_oE;1T&R(s($-)e>?a=1WPkUeA@2Q^{`Eu_J z1A!lH@nGNT?3d9ly!`*z*{r3~N#@@{N*BfUaRSXb?;{R$mO<>inR>uzOW4K1HtqPO zS^ooGiq^%Jd$Qg36+fsT22_#ovqX?535<05T@5-QXsLUJY?Gsou#IL000009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPKjMn=+HDkN*dDvAc)TK z^scVo=;&1<5;_2&2PUGSzduKPqj%IddPjZ3m|l1rM>}FlQ6FL%!H|e{09(zMP5nkk z9qm)2VG-@P3SH=GM{7qBej8E{AXV#60hh(7&V>xDMUr z?7@g@dS*Dyqgch!S{eq(f0CXRtsUi1M7TEYF!GQcb#-zO&|3(GqK)%4tcKh`&?W3x zYwUY!kIjmP`D1@bnm{m2R5NgBN1sQ1qZbS{r1@*4>%5cnO1*zUblG9!oz51bm?Pg* zpW51?!)irWP$6qWD&-6XCwuk4wev6S3AQ0WAZgq0^r5RGfW|})tL=BO@n*qM{GOoK zx?j`EPXkVsk&BIYx!~qfT=nV2ClDEbj>XaJC>%v?_}0!*N$~Ly_jC9naGX3Tf)CTV+(khBVaS@E(hT&&{iR zHJL|o)PXd#CH;pCQU1Wk(9KZ$Jt^0R8Q&abC&wsoZ>1)09Ob-=3db9rlg#6sqx*&b z_wa32x?Q5?gcV!> O0000Thanos-logo_full \ No newline at end of file diff --git a/website/public/img/Thanos-logo_fullmedium.png b/website/public/img/Thanos-logo_fullmedium.png new file mode 100644 index 0000000000000000000000000000000000000000..31e08939e7f8a4deb052519a87f34537a9bdf8c6 GIT binary patch literal 6709 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 literal 0 HcmV?d00001 diff --git a/website/public/img/arch.jpg b/website/public/img/arch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04d05547afb925d08b6f3503d7fa268f0c2ac265 GIT binary patch literal 64932 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

1q1-buR{Z*n5FmKZ@$M*W78$h92K|n`3B+65 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 ZG{!a-_F*NOp;v#tlvak6NxpvnKLGp2`S<_; literal 0 HcmV?d00001 diff --git a/website/public/img/query_ui_6week_dedup.png b/website/public/img/query_ui_6week_dedup.png new file mode 100644 index 0000000000000000000000000000000000000000..a677b7d726da186a180678d1b2db3877f98975ff GIT binary patch literal 76616 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 literal 0 HcmV?d00001 diff --git a/website/public/img/query_ui_stores.png b/website/public/img/query_ui_stores.png new file mode 100644 index 0000000000000000000000000000000000000000..91eca5dc37804c7e5cdae9f92d358478a135782f GIT binary patch literal 56035 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 + + + + + + + + + + Thanos - Highly available Prometheus setup with long term storage capabilities + + + +

+ +
+
+
+ Thanos Big Logo +

+
    +
  • +
  • +
  • +
+
+
+
+
+
+
+ +

Global Query Interface

+

Global querying view across all connected Prometheus servers and multiple clusters

+
+
+ +

Unlimited Retention

+

Use any object storage as an option. Supports GCP, S3, Azure, Swift and Tencent COS

+
+
+ +

Prometheus Compatible

+

Use the same tools you love such as Grafana or any other that uses Prometheus' API

+
+
+ +

Downsampling & Compaction

+

Downsampling historical data for massive query speedup or configure a retention policy

+
+
+
+
+
+
+

Join the community !

+

Many people are already using Thanos in production !

+

Maybe some companies logo here ?

+
    +
  • +
  • +
  • +
  • +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/website/public/index.xml b/website/public/index.xml new file mode 100644 index 0000000000..49b9477f1f --- /dev/null +++ b/website/public/index.xml @@ -0,0 +1,207 @@ + + + + Thanos - Highly available Prometheus setup with long term storage capabilities + http://example.org/ + Recent content on Thanos - Highly available Prometheus setup with long term storage capabilities + Hugo -- gohugo.io + en-us + + + + + + + http://example.org/components/bucket/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/bucket/ + Bucket The bucket component of Thanos is a set of commands to inspect data in object storage buckets. It is normally run as a stand alone command to aid with troubleshooting. +Example: +$ thanos bucket verify --objstore.config-file=bucket.yml The content of bucket.yml: +type: GCS config: bucket: example-bucket Bucket can be extended to add more subcommands that will be helpful when working with object storage buckets by adding a new command within /cmd/thanos/bucket. + + + + + http://example.org/components/compact/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/compact/ + Compact The compactor component of Thanos applies the compaction procedure of the Prometheus 2.0 storage engine to block data stored in object storage. It is generally not semantically concurrency safe and must be deployed as a singleton against a bucket. +Example: +$ thanos compact --data-dir /tmp/thanos-compact --objstore.config-file=bucket.yml The content of bucket.yml: +type: GCS config: bucket: example-bucket The compactor needs local disk space to store intermediate data for its processing. + + + + + http://example.org/components/query/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/query/ + Query The query component implements the Prometheus HTTP v1 API to query data in a Thanos cluster via PromQL. +It gathers the data needed to evaluate the query from underlying StoreAPIs. See here on how to connect querier with desired StoreAPIs. +Querier currently is fully stateless and horizontally scalable. +$ thanos query \ --http-address &quot;0.0.0.0:9090&quot; \ --store &quot;&lt;store-api&gt;:&lt;grpc-port&gt;&quot; \ --store &quot;&lt;store-api2&gt;:&lt;grpc-port&gt;&quot; \ Deduplication The query layer can deduplicate series that were collected from high-availability pairs of data sources such as Prometheus. + + + + + http://example.org/components/rule/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/rule/ + Rule NOTE: The rule component is experimental since it has conceptual tradeoffs that might not be favorable for most use cases. It is recommended to keep deploying rules to the relevant Prometheus servers. +The rule component should in particular not be used to circumvent solving rule deployment properly at the configuration management level. +The rule component evaluates Prometheus recording and alerting rules against random query nodes in its cluster. Rule results are written back to disk in the Prometheus 2. + + + + + http://example.org/components/sidecar/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/sidecar/ + Sidecar The sidecar component of Thanos gets deployed along with a Prometheus instance. It implements Thanos&rsquo; Store API on top of Prometheus&rsquo; remote-read API and advertises itself as a data source to the cluster. Thereby queriers in the cluster can treat Prometheus servers as yet another source of time series data without directly talking to its APIs. Additionally, the sidecar uploads TSDB blocks to an object storage bucket as Prometheus produces them. + + + + + http://example.org/components/store/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/components/store/ + Store The store component of Thanos implements the Store API on top of historical data in an object storage bucket. It acts primarily as an API gateway and therefore does not need significant amounts of local disk space. It joins a Thanos cluster on startup and advertises the data it can access. It keeps a small amount of information about all remote blocks on local disk and keeps it in sync with the bucket. + + + + + http://example.org/design/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/design/ + Design Thanos is a set of components that can be composed into a highly available Prometheus setup with long term storage capabilities. Its main goals are operation simplicity and retaining of Prometheus&rsquo;s reliability properties. +The Prometheus metric data model and the 2.0 storage format (spec, slides) are the foundational layers of all components in the system. +Architecture Thanos is a clustered system of components with distinct and decoupled purposes. Clustered components can be categorized as follows: + + + + + http://example.org/proposals/approved/201809_gossip-removal/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/approved/201809_gossip-removal/ + Deprecated gossip clustering in favor of File SD Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @bplotka +Ticket: https://github.com/improbable-eng/thanos/issues/484 +Summary It is becoming clear that we need to remove gossip protocol as our main way of communication between Thanos Querier and other components. Static configuration seems to be well enough for our simple use cases. To give users more flexibility (similar to gossip auto-join logic), we already wanted to introduce a File SD that allows changing StoreAPIs on-the-fly. + + + + + http://example.org/proposals/approved/201812_thanos-remote-receive/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/approved/201812_thanos-remote-receive/ + Thanos Remote Write Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @brancz +Summary This document describes the motivation and design of the Thanos receiver component, as well as how it fits into the rest of the Thanos ecosystem and components. +Motivation The Thanos receiver is the missing piece within Thanos in order to use it to build Prometheus as a Service offering, either as an internal service to the rest of an organization or as an actual pay-as-you-go off the shelf service. + + + + + http://example.org/proposals/approved/201901-read-write-operations-bucket/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/approved/201901-read-write-operations-bucket/ + Read-Write coordination free operational contract for object storage Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @bwplotka +Tickets: * https://github.com/improbable-eng/thanos/issues/298 (eventual consistency) * https://github.com/improbable-eng/thanos/issues/377 (eventual consistency &amp; partial upload) * https://github.com/improbable-eng/thanos/issues/564 (retention vs store gateway) * https://github.com/improbable-eng/thanos/issues/271 (adapt for removals faster) +Summary Our goals here are: + A) Define consistent way of having multiple readers and multiple writers (technically multiple appenders and single remover) on shared object storage that can be eventual consistent. + + + + + http://example.org/proposals/rejected/201807_store_instance_high_availability/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/rejected/201807_store_instance_high_availability/ + High-availability for store instances Status: draft | in-review | rejected | accepted | complete +Proposal author: @mattbostock Implementation owner: @mattbostock +Status: Rejected This proposal makes total sense and solves our goals when using gossip. However there exists a very easy solution to this problem in form of using just static entry with any loadbalancer like Kubernetes Service to load balance through different Store Gateways. Those are technically stateless, so request can fetch the data independently. + + + + + http://example.org/proposals/rejected/config/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/rejected/config/ + Thanos Cluster Configuration Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @domgreen +Summary The proposal of creating a central configuration component within Thanos has been rejected by the community as the requirements are specific to the use case at Improbable and that adding configuration management into Thanos will result in adding more knowledge to the system about what the scrapers are doing and their targets. + + + + + http://example.org/release_process/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/release_process/ + Releases This page describes the release process for Thanos project. +NOTE: As Semantic Versioning states all 0.y.z releases can contain breaking changes in API (flags, grpc API, any backward compatibility) +Cadence We aim for at least 1 release per 6 weeks. However, no strict dates are planned. +No release candidates are required until major version. +Additionally we aim for master branch being stable. +Cutting individual release Process of cutting a new minor Thanos release: + + + + + http://example.org/service_discovery/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/service_discovery/ + Thanos Service Discovery Service discovery has a vital place in Thanos components. It allows Thanos to discover different set API targets required to perform certain operations. This logic is meant to replace Gossip that is planned to be removed. +Currently places that uses Thanos SD: * Thanos Query needs to know about StoreAPI servers in order to query metrics from them. * Thanos Rule needs to know about QueryAPI servers in order to evaluate recording and alerting rules. + + + + + http://example.org/storage/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/storage/ + Object Storage Thanos supports any object stores that can be implemented against Thanos objstore.Bucket interface +All clients are configured using --objstore.config-file to reference to the configuration file or --objstore.config to put yaml config directly. +Implementations Current object storage client implementations: + Provider Maturity Auto-tested on CI Maintainers Google Cloud Storage Stable (production usage) yes @bwplotka AWS S3 Beta (working PoCs, testing usage) no @bwplotka Azure Storage Account Alpha yes @vglafirov OpenStack Swift Beta (working PoCs, testing usage) no @sudhi-vm Tencent COS Beta (testing usage) no @jojohappy NOTE: Currently Thanos requires strong consistency (write-read) for object store implementation. + + + + + http://example.org/troubleshooting/dev/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/troubleshooting/dev/ + Troubleshooting for dev workflow Dep grouped write of manifest, lock and vendor: scratch directory ... already exists, please remove it Outcome: make deps fails with output: grouped write of manifest, lock and vendor: scratch directory $GOPATH/src/github.com/improbable-eng/thanos/.vendor-new already exists, please remove it +Reason: dep interrupted in the middle of processing. +Fix: rm -rf $GOPATH/src/github.com/improbable-eng/thanos/.vendor-new +Dep failed to unpack tree object Outcome: make deps fails with output: grouped write of manifest, lock and vendor: failed to export github. + + + + getting-started + http://example.org/getting_started/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/getting_started/ + Getting started Thanos provides a global query view, data backup, and historical data access as its core features in a single binary. All three features can be run independently of each other. This allows you to have a subset of Thanos features ready for immediate benefit or testing, while also making it flexible for gradual roll outs in more complex environments. +In this quick-start guide, we will configure Thanos and all components mentioned to work against a Google Cloud Storage bucket. + + + + \ No newline at end of file diff --git a/website/public/main.css b/website/public/main.css new file mode 100644 index 0000000000..a798ad4a7d --- /dev/null +++ b/website/public/main.css @@ -0,0 +1,24 @@ +.bg-purple { + background-color: #6D41FF; +} + +.color-purple { + color: #6D41FF; +} + +.navbar-brand img { + height: 32px; + margin-right: 10px; + max-width: 100%; +} + +.btn-outline-secondary { + color: #6D41FF; + border-color: #6D41FF; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #6D41FF; + border-color: #6D41FF; +} \ No newline at end of file diff --git a/website/public/proposals/index.xml b/website/public/proposals/index.xml new file mode 100644 index 0000000000..4ce13e6652 --- /dev/null +++ b/website/public/proposals/index.xml @@ -0,0 +1,73 @@ + + + + Proposals on Thanos - Highly available Prometheus setup with long term storage capabilities + http://example.org/proposals/ + Recent content in Proposals on Thanos - Highly available Prometheus setup with long term storage capabilities + Hugo -- gohugo.io + en-us + + + + + + + http://example.org/proposals/approved/201809_gossip-removal/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/approved/201809_gossip-removal/ + Deprecated gossip clustering in favor of File SD Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @bplotka +Ticket: https://github.com/improbable-eng/thanos/issues/484 +Summary It is becoming clear that we need to remove gossip protocol as our main way of communication between Thanos Querier and other components. Static configuration seems to be well enough for our simple use cases. To give users more flexibility (similar to gossip auto-join logic), we already wanted to introduce a File SD that allows changing StoreAPIs on-the-fly. + + + + + http://example.org/proposals/approved/201812_thanos-remote-receive/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/approved/201812_thanos-remote-receive/ + Thanos Remote Write Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @brancz +Summary This document describes the motivation and design of the Thanos receiver component, as well as how it fits into the rest of the Thanos ecosystem and components. +Motivation The Thanos receiver is the missing piece within Thanos in order to use it to build Prometheus as a Service offering, either as an internal service to the rest of an organization or as an actual pay-as-you-go off the shelf service. + + + + + http://example.org/proposals/approved/201901-read-write-operations-bucket/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/approved/201901-read-write-operations-bucket/ + Read-Write coordination free operational contract for object storage Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @bwplotka +Tickets: * https://github.com/improbable-eng/thanos/issues/298 (eventual consistency) * https://github.com/improbable-eng/thanos/issues/377 (eventual consistency &amp; partial upload) * https://github.com/improbable-eng/thanos/issues/564 (retention vs store gateway) * https://github.com/improbable-eng/thanos/issues/271 (adapt for removals faster) +Summary Our goals here are: + A) Define consistent way of having multiple readers and multiple writers (technically multiple appenders and single remover) on shared object storage that can be eventual consistent. + + + + + http://example.org/proposals/rejected/201807_store_instance_high_availability/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/rejected/201807_store_instance_high_availability/ + High-availability for store instances Status: draft | in-review | rejected | accepted | complete +Proposal author: @mattbostock Implementation owner: @mattbostock +Status: Rejected This proposal makes total sense and solves our goals when using gossip. However there exists a very easy solution to this problem in form of using just static entry with any loadbalancer like Kubernetes Service to load balance through different Store Gateways. Those are technically stateless, so request can fetch the data independently. + + + + + http://example.org/proposals/rejected/config/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/proposals/rejected/config/ + Thanos Cluster Configuration Status: draft | in-review | rejected | accepted | complete +Implementation Owner: @domgreen +Summary The proposal of creating a central configuration component within Thanos has been rejected by the community as the requirements are specific to the use case at Improbable and that adding configuration management into Thanos will result in adding more knowledge to the system about what the scrapers are doing and their targets. + + + + \ No newline at end of file diff --git a/website/public/sitemap.xml b/website/public/sitemap.xml new file mode 100644 index 0000000000..2d1f6b3730 --- /dev/null +++ b/website/public/sitemap.xml @@ -0,0 +1,103 @@ + + + + + http://example.org/components/bucket/ + + + + http://example.org/components/compact/ + + + + http://example.org/components/query/ + + + + http://example.org/components/rule/ + + + + http://example.org/components/sidecar/ + + + + http://example.org/components/store/ + + + + http://example.org/design/ + + + + http://example.org/proposals/approved/201809_gossip-removal/ + + + + http://example.org/proposals/approved/201812_thanos-remote-receive/ + + + + http://example.org/proposals/approved/201901-read-write-operations-bucket/ + + + + http://example.org/proposals/rejected/201807_store_instance_high_availability/ + + + + http://example.org/proposals/rejected/config/ + + + + http://example.org/release_process/ + + + + http://example.org/service_discovery/ + + + + http://example.org/storage/ + + + + http://example.org/troubleshooting/dev/ + + + + http://example.org/categories/ + 0 + + + + http://example.org/components/ + 0 + + + + http://example.org/proposals/ + 0 + + + + http://example.org/tags/ + 0 + + + + http://example.org/ + 0 + + + + http://example.org/troubleshooting/ + 0 + + + + http://example.org/getting_started/ + + + \ No newline at end of file diff --git a/website/public/tags/index.xml b/website/public/tags/index.xml new file mode 100644 index 0000000000..fadb6e1094 --- /dev/null +++ b/website/public/tags/index.xml @@ -0,0 +1,14 @@ + + + + Tags on Thanos - Highly available Prometheus setup with long term storage capabilities + http://example.org/tags/ + Recent content in Tags on Thanos - Highly available Prometheus setup with long term storage capabilities + Hugo -- gohugo.io + en-us + + + + + + \ No newline at end of file diff --git a/website/public/troubleshooting/index.xml b/website/public/troubleshooting/index.xml new file mode 100644 index 0000000000..9a7c185ef7 --- /dev/null +++ b/website/public/troubleshooting/index.xml @@ -0,0 +1,26 @@ + + + + Troubleshootings on Thanos - Highly available Prometheus setup with long term storage capabilities + http://example.org/troubleshooting/ + Recent content in Troubleshootings on Thanos - Highly available Prometheus setup with long term storage capabilities + Hugo -- gohugo.io + en-us + + + + + + + http://example.org/troubleshooting/dev/ + Mon, 01 Jan 0001 00:00:00 +0000 + + http://example.org/troubleshooting/dev/ + Troubleshooting for dev workflow Dep grouped write of manifest, lock and vendor: scratch directory ... already exists, please remove it Outcome: make deps fails with output: grouped write of manifest, lock and vendor: scratch directory $GOPATH/src/github.com/improbable-eng/thanos/.vendor-new already exists, please remove it +Reason: dep interrupted in the middle of processing. +Fix: rm -rf $GOPATH/src/github.com/improbable-eng/thanos/.vendor-new +Dep failed to unpack tree object Outcome: make deps fails with output: grouped write of manifest, lock and vendor: failed to export github. + + + + \ No newline at end of file diff --git a/website/static/Thanos-logo_full.svg b/website/static/Thanos-logo_full.svg new file mode 100644 index 0000000000..7941cfe32e --- /dev/null +++ b/website/static/Thanos-logo_full.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/static/icon-dark.png b/website/static/icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6008bc0d4f62b902bf7c8dc482332af1c460d09b GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^XMp$!2OE&QTzGCikYY>nc6VXOWpHHpe`GhqPoM~A zfk$L91B0G22s2hJwJ!q-vX^-Jy0SlJ6z7)~O_qHd1{9Jkag8W(&d<$F%`0JWE=o-- zNlj5G&n(GMaQE~L2yf&QXJBB;^mK6yskrs_F5{*}1_BNTk39Mp-e5W2&bKt~RX;N|^s?8>Ju?gv4n2u6^)>hoHL&3F{5i9$eI#yV9*X!n zS6rCQM`Fz{HDGAK91pad0qg*f_oE;1T&R(s($-)e>?a=1WPkUeA@2Q^{`Eu_J z1A!lH@nGNT?3d9ly!`*z*{r3~N#@@{N*BfUaRSXb?;{R$mO<>inR>uzOW4K1HtqPO zS^ooGiq^%Jd$Qg36+fsT22_#ovqX?535<05T@5-QXsLUJY?Gsou#IL000009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPKjMn=+HDkN*dDvAc)TK z^scVo=;&1<5;_2&2PUGSzduKPqj%IddPjZ3m|l1rM>}FlQ6FL%!H|e{09(zMP5nkk z9qm)2VG-@P3SH=GM{7qBej8E{AXV#60hh(7&V>xDMUr z?7@g@dS*Dyqgch!S{eq(f0CXRtsUi1M7TEYF!GQcb#-zO&|3(GqK)%4tcKh`&?W3x zYwUY!kIjmP`D1@bnm{m2R5NgBN1sQ1qZbS{r1@*4>%5cnO1*zUblG9!oz51bm?Pg* zpW51?!)irWP$6qWD&-6XCwuk4wev6S3AQ0WAZgq0^r5RGfW|})tL=BO@n*qM{GOoK zx?j`EPXkVsk&BIYx!~qfT=nV2ClDEbj>XaJC>%v?_}0!*N$~Ly_jC9naGX3Tf)CTV+(khBVaS@E(hT&&{iR zHJL|o)PXd#CH;pCQU1Wk(9KZ$Jt^0R8Q&abC&wsoZ>1)09Ob-=3db9rlg#6sqx*&b z_wa32x?Q5?gcV!> O0000 Date: Sat, 2 Feb 2019 19:36:59 +0100 Subject: [PATCH 02/15] fix: bad root url --- website/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/config.toml b/website/config.toml index 0880be842a..15e43bb231 100644 --- a/website/config.toml +++ b/website/config.toml @@ -1,4 +1,4 @@ -baseURL = "http://example.org/" +baseURL = "https://adrien-f.github.io/thanos/" languageCode = "en-us" title = "Thanos - Highly available Prometheus setup with long term storage capabilities" From 0b2fad8b4b9051a3e31e4e41d09e8ad2cda5c559 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Sat, 2 Feb 2019 19:38:43 +0100 Subject: [PATCH 03/15] fix: bad root url --- website/layouts/_default/baseof.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/layouts/_default/baseof.html b/website/layouts/_default/baseof.html index 8c266c3f3c..cadb98d132 100644 --- a/website/layouts/_default/baseof.html +++ b/website/layouts/_default/baseof.html @@ -8,7 +8,7 @@ crossorigin="anonymous"> - + {{ block "title" . }}{{ .Site.Title }}{{ end }} From 869aa6a9a45ec2d57bf91884aec4a74c2d6360b4 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Sat, 2 Feb 2019 19:40:33 +0100 Subject: [PATCH 04/15] fix: bad root url --- website/layouts/_default/baseof.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/layouts/_default/baseof.html b/website/layouts/_default/baseof.html index cadb98d132..29d0f07c4d 100644 --- a/website/layouts/_default/baseof.html +++ b/website/layouts/_default/baseof.html @@ -14,7 +14,7 @@ @@ -46,7 +52,8 @@
Thanos
    -
  • Documentation
  • +
  • Documentation
  • +
  • Blog
  • Slack
  • GitHub
  • Issues
  • diff --git a/website/layouts/_default/sidemenu.html b/website/layouts/_default/sidemenu.html new file mode 100644 index 0000000000..63379c53f7 --- /dev/null +++ b/website/layouts/_default/sidemenu.html @@ -0,0 +1,25 @@ +{{ $currentPage := . }} +
    Thanos
    +
      + {{ range .Site.Menus.thanos }} +
    • + {{ .Title }} +
    • + {{ end }} +
    +
    Components
    +
      + {{ range .Site.Menus.components }} +
    • + {{ .Title }} +
    • + {{ end }} +
    +
    Enhancement Proposals
    +
      + {{ range .Site.Menus.proposals }} +
    • + {{ .Title }} +
    • + {{ end }} +
    \ No newline at end of file diff --git a/website/layouts/_default/single.html b/website/layouts/_default/single.html index 7ed60df647..9e136a5c43 100644 --- a/website/layouts/_default/single.html +++ b/website/layouts/_default/single.html @@ -1,9 +1,12 @@ {{ define "main" }} -
    -
    -
    - {{ .Content }} +
    +
    +
    + {{ template "_default/sidemenu.html" . }} +
    +
    + {{ replace .Content "" "
    " | safeHTML }} + - {{ end }} \ No newline at end of file diff --git a/website/layouts/blog/list.html b/website/layouts/blog/list.html new file mode 100644 index 0000000000..697f79a429 --- /dev/null +++ b/website/layouts/blog/list.html @@ -0,0 +1,17 @@ +{{ define "main" }} +
    +
    +
    + {{ range .Paginator.Pages }} +
    +

    {{ .Title }}

    +

    Written by {{ .Params.Author }} and published on {{ .Date.Format "Jan 02, 2006" }}

    +
    + {{ .Content }} +
    + {{ end}} + {{ template "_internal/pagination.html" . }} +
    +
    +
    +{{ end }} \ No newline at end of file diff --git a/website/layouts/blog/single.html b/website/layouts/blog/single.html new file mode 100644 index 0000000000..52cb30adf8 --- /dev/null +++ b/website/layouts/blog/single.html @@ -0,0 +1,14 @@ +{{ define "main" }} +
    +
    +
    +
    +

    {{ .Title }}

    +

    Written by {{ .Params.Author }} and published on {{ .Date.Format "Jan 02, 2006" }}

    +
    + {{ .Content }} +
    +
    +
    +
    +{{ end }} \ No newline at end of file diff --git a/website/layouts/component/single.html b/website/layouts/component/single.html deleted file mode 100644 index b928078bd1..0000000000 --- a/website/layouts/component/single.html +++ /dev/null @@ -1,28 +0,0 @@ -{{ define "main" }} -
    -
    -
    - {{ $currentPage := . }} -
    Thanos
    -
      - {{ range .Site.Menus.thanos }} -
    • - {{ .Title }} -
    • - {{ end }} -
    -
    Components
    -
      - {{ range .Site.Menus.components }} -
    • - {{ .Title }} -
    • - {{ end }} -
    -
    -
    - {{ .Content }} -
    -
    -
    -{{ end }} \ No newline at end of file diff --git a/website/layouts/docs/single.html b/website/layouts/docs/single.html deleted file mode 100644 index b928078bd1..0000000000 --- a/website/layouts/docs/single.html +++ /dev/null @@ -1,28 +0,0 @@ -{{ define "main" }} -
    -
    -
    - {{ $currentPage := . }} -
    Thanos
    -
      - {{ range .Site.Menus.thanos }} -
    • - {{ .Title }} -
    • - {{ end }} -
    -
    Components
    -
      - {{ range .Site.Menus.components }} -
    • - {{ .Title }} -
    • - {{ end }} -
    -
    -
    - {{ .Content }} -
    -
    -
    -{{ end }} \ No newline at end of file diff --git a/website/layouts/index.html b/website/layouts/index.html index 1ee8b2140a..cbab505a21 100644 --- a/website/layouts/index.html +++ b/website/layouts/index.html @@ -68,6 +68,10 @@

    Join the community !

    Issues +
  • + + Twitter +
  • " "
    " | safeHTML }} + + + +{{ end }} \ No newline at end of file From 13710d97a3c9f5f2a9ec6f3185ac06e036a23c29 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Thu, 21 Mar 2019 17:27:42 +0100 Subject: [PATCH 10/15] fix: menus --- docs/intro/getting-started.md | 2 +- docs/{ => intro}/img/arch.jpg | Bin website/layouts/_default/sidemenu.html | 24 +++++++++--------------- website/static/main.css | 6 ++++++ 4 files changed, 16 insertions(+), 16 deletions(-) rename docs/{ => intro}/img/arch.jpg (100%) diff --git a/docs/intro/getting-started.md b/docs/intro/getting-started.md index 5c4753d2b5..84d4045704 100644 --- a/docs/intro/getting-started.md +++ b/docs/intro/getting-started.md @@ -10,7 +10,7 @@ weight: 1 Thanos provides a global query view, data backup, and historical data access as its core features in a single binary. All three features can be run independently of each other. This allows you to have a subset of Thanos features ready for immediate benefit or testing, while also making it flexible for gradual roll outs in more complex environments. In this quick-start guide, we will configure Thanos and all components mentioned to work against a Google Cloud Storage bucket. -At the moment, Thanos is able to use [different storage providers](storage.md), with the ability to add more providers as necessary. +At the moment, Thanos is able to use [different storage providers](/thanos/intro/storage), with the ability to add more providers as necessary. ## Architecture Overview diff --git a/docs/img/arch.jpg b/docs/intro/img/arch.jpg similarity index 100% rename from docs/img/arch.jpg rename to docs/intro/img/arch.jpg diff --git a/website/layouts/_default/sidemenu.html b/website/layouts/_default/sidemenu.html index 63379c53f7..49b46b1334 100644 --- a/website/layouts/_default/sidemenu.html +++ b/website/layouts/_default/sidemenu.html @@ -1,25 +1,19 @@ {{ $currentPage := . }}
    Thanos
    - +
    Components
    - +
    Enhancement Proposals
    - \ No newline at end of file + \ No newline at end of file diff --git a/website/static/main.css b/website/static/main.css index 2751ec9bf3..a7e842ad65 100644 --- a/website/static/main.css +++ b/website/static/main.css @@ -29,4 +29,10 @@ a { pre { padding: 1rem; +} + +.list-group-item-thanos { + color: #6D41FF; + border: 0; + background-color: transparent; } \ No newline at end of file From 309f9eb6a4a0d2b21bba8e0bc2890e634754e06f Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Fri, 22 Mar 2019 23:03:51 +0100 Subject: [PATCH 11/15] update --- docs/help/common-issues.md | 10 ++++ .../dev.md => help/contribute.md} | 6 ++- docs/intro/getting-started.md | 2 +- website/layouts/_default/baseof.html | 31 +++++++++--- website/layouts/_default/sidemenu.html | 49 ++++++++++++------- website/layouts/_default/single.html | 6 +-- website/static/main.css | 8 +++ 7 files changed, 81 insertions(+), 31 deletions(-) create mode 100644 docs/help/common-issues.md rename docs/{troubleshooting/dev.md => help/contribute.md} (92%) diff --git a/docs/help/common-issues.md b/docs/help/common-issues.md new file mode 100644 index 0000000000..706881606b --- /dev/null +++ b/docs/help/common-issues.md @@ -0,0 +1,10 @@ +--- +title: Common Issues +type: doc +menu: help +--- + +## Timeout Stores + + +lorem... \ No newline at end of file diff --git a/docs/troubleshooting/dev.md b/docs/help/contribute.md similarity index 92% rename from docs/troubleshooting/dev.md rename to docs/help/contribute.md index 4955450e84..8cdff3fe16 100644 --- a/docs/troubleshooting/dev.md +++ b/docs/help/contribute.md @@ -1,4 +1,8 @@ -# Troubleshooting for dev workflow +--- +title: Troubleshooting for dev workflow +type: doc +menu: help +--- ## Dep `grouped write of manifest, lock and vendor: scratch directory ... already exists, please remove it` diff --git a/docs/intro/getting-started.md b/docs/intro/getting-started.md index 84d4045704..67a8a85499 100644 --- a/docs/intro/getting-started.md +++ b/docs/intro/getting-started.md @@ -14,7 +14,7 @@ At the moment, Thanos is able to use [different storage providers](/thanos/intro ## Architecture Overview -![architecture_overview](../img/arch.jpg) +architecture overview ## Requirements diff --git a/website/layouts/_default/baseof.html b/website/layouts/_default/baseof.html index fc7f99c06a..2be8f63898 100644 --- a/website/layouts/_default/baseof.html +++ b/website/layouts/_default/baseof.html @@ -47,18 +47,33 @@ {{ block "main" . }}{{ end }} diff --git a/website/layouts/_default/sidemenu.html b/website/layouts/_default/sidemenu.html index 49b46b1334..f7cb6eef76 100644 --- a/website/layouts/_default/sidemenu.html +++ b/website/layouts/_default/sidemenu.html @@ -1,19 +1,32 @@ {{ $currentPage := . }} -
    Thanos
    -
    - {{ range .Site.Menus.thanos }} - {{ .Title }} - {{ end }} -
    -
    Components
    -
    - {{ range .Site.Menus.components }} - {{ .Title }} - {{ end }} -
    -
    Enhancement Proposals
    -
    - {{ range .Site.Menus.proposals }} - {{ .Title }} - {{ end }} -
    \ No newline at end of file + + + + \ No newline at end of file diff --git a/website/layouts/_default/single.html b/website/layouts/_default/single.html index 9e136a5c43..ec7b15a64e 100644 --- a/website/layouts/_default/single.html +++ b/website/layouts/_default/single.html @@ -1,10 +1,10 @@ {{ define "main" }}
    -
    -
    +
    +
    {{ template "_default/sidemenu.html" . }}
    -
    +
    {{ replace .Content "
    " "
    " | safeHTML }} diff --git a/website/static/main.css b/website/static/main.css index a7e842ad65..59c3641547 100644 --- a/website/static/main.css +++ b/website/static/main.css @@ -12,6 +12,10 @@ max-width: 100%; } +.navbar-dark .navbar-nav .nav-link:hover { + color: #ffffff; +} + .btn-outline-secondary { color: #6D41FF; border-color: #6D41FF; @@ -35,4 +39,8 @@ pre { color: #6D41FF; border: 0; background-color: transparent; +} + +.list-group-item-thanos:hover { + color: #6D41FF; } \ No newline at end of file From f46ed71c76615902fcd6c2f3d3072a3acbbe4250 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Fri, 22 Mar 2019 23:13:59 +0100 Subject: [PATCH 12/15] update --- website/layouts/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/layouts/index.html b/website/layouts/index.html index cbab505a21..9f58855e0b 100644 --- a/website/layouts/index.html +++ b/website/layouts/index.html @@ -10,7 +10,7 @@

    Highly available Prometheus setup with long term storage capabilities.

    • - + Getting Started
    • @@ -20,7 +20,7 @@

      Highly available Prometheus setup with long term storage capabi
    • - + Github
    • From a47827f1dc3b9a90b09bfc60b3bdfc8da7e1b66d Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Sat, 23 Mar 2019 17:05:14 +0100 Subject: [PATCH 13/15] move config outside website folder and rewrite getting-started --- Makefile | 6 +- docs/help/deployment-stories.md | 7 + docs/intro/design.md | 2 - docs/intro/getting-started.md | 202 +++++++++------------- website/config.toml => hugo.toml | 6 +- website/layouts/shortcodes/embedcode.html | 7 + 6 files changed, 102 insertions(+), 128 deletions(-) create mode 100644 docs/help/deployment-stories.md rename website/config.toml => hugo.toml (77%) create mode 100644 website/layouts/shortcodes/embedcode.html diff --git a/Makefile b/Makefile index 5fc28fdd15..77e8fbf244 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ BZR ?= $(shell which bzr) # E2e test deps. # Referenced by github.com/improbable-eng/thanos/blob/master/docs/getting_started.md#prometheus -# Limitied prom version, because testing was not possibe. This should fix it: https://github.com/improbable-eng/thanos/issues/758 +# Limitied prom version, because testing was not possible. This should fix it: https://github.com/improbable-eng/thanos/issues/758 PROM_VERSIONS ?=v2.4.3 v2.5.0 ALERTMANAGER_VERSION ?=v0.15.2 MINIO_SERVER_VERSION ?=RELEASE.2018-10-06T00-15-16Z @@ -120,12 +120,12 @@ docs: $(EMBEDMD) build .PHONY: hugo-docs hugo-docs: $(HUGO) @echo ">> building documentation website" - @cd website && $(HUGO) + @$(HUGO) --config hugo.toml .PHONY: hugo-server hugo-server: $(HUGO) @echo ">> serving documentation website" - @cd website && $(HUGO) server + @$(HUGO) --config hugo.toml server # check-docs checks if documentation have discrepancy with flags and if the links are valid. .PHONY: check-docs diff --git a/docs/help/deployment-stories.md b/docs/help/deployment-stories.md new file mode 100644 index 0000000000..1b9337567f --- /dev/null +++ b/docs/help/deployment-stories.md @@ -0,0 +1,7 @@ +--- +title: Deployment stories +type: doc +menu: help +--- + +## Ecommerce Company \ No newline at end of file diff --git a/docs/intro/design.md b/docs/intro/design.md index 4ccdfb648c..be85730347 100644 --- a/docs/intro/design.md +++ b/docs/intro/design.md @@ -40,14 +40,12 @@ Data sources that persist their data for long-term storage do so via the Prometh └── meta.json ``` - A blocks top-level directory is a ULID (like UUID but lexicographically sortable and encoding the creation time). * Chunk files hold a few hundred MB worth of chunks each. Chunks for the same series are sequentially aligned. Series in return are aligned by their metric name. This becomes relevant further down. * The index file holds all information needed to lookup specific series by their labels and the positions of their chunks. * `meta.json` holds meta information about a block like stats, time range, and compaction level. - Those block files can be backed up to an object storage and later be queried by another component (see below). All data is uploaded as it is created by the Prometheus server/storage engine. The `meta.json` file may be extended by a `thanos` section, to which Thanos-specific metadata can be added. Currently this it includes the "external labels" the producer of the block has assigned. This later helps in filtering blocks for querying without accessing their data files. The meta.json is updated during upload time on sidecars. diff --git a/docs/intro/getting-started.md b/docs/intro/getting-started.md index 67a8a85499..8f9e41cb6e 100644 --- a/docs/intro/getting-started.md +++ b/docs/intro/getting-started.md @@ -9,9 +9,11 @@ weight: 1 Thanos provides a global query view, data backup, and historical data access as its core features in a single binary. All three features can be run independently of each other. This allows you to have a subset of Thanos features ready for immediate benefit or testing, while also making it flexible for gradual roll outs in more complex environments. -In this quick-start guide, we will configure Thanos and all components mentioned to work against a Google Cloud Storage bucket. +In this quick-start guide, we will configure Thanos and all components mentioned to work against a Google Cloud Storage bucket. At the moment, Thanos is able to use [different storage providers](/thanos/intro/storage), with the ability to add more providers as necessary. +Thanos will work in cloud native environments as well as more traditional ones. Some users run Thanos in Kubernetes while others on bare metal. More deployments examples and stories are described [here.]({{< ref "help/deployment-stories" >}}) + ## Architecture Overview architecture overview @@ -22,7 +24,7 @@ At the moment, Thanos is able to use [different storage providers](/thanos/intro * golang 1.10+ * An object storage bucket (optional) -## Get Thanos! +## Downloading You can find the latest Thanos release [here](https://github.com/improbable-eng/thanos/releases). @@ -37,46 +39,57 @@ make The `thanos` binary should now be in your `$PATH` and is the only thing required to deploy any of its components. -## [Prometheus](https://prometheus.io/) +## Prometheus -Thanos bases on vanilla Prometheus (v2.2.1+). +Thanos bases itself on vanilla [Prometheus](https://prometheus.io/) (v2.2.1+). -For exact Prometheus version list Thanos was tested against you can find [here](../Makefile#L36) +Here's the Prometheus' versions Thanos is tested against: -## [Sidecar](components/sidecar.md) +{{< embedcode file="/Makefile" lang="Makefile" start="44" lines="2" >}} -Thanos integrates with existing Prometheus servers through a [Sidecar process](https://docs.microsoft.com/en-us/azure/architecture/patterns/sidecar#solution), which runs on the same machine or in the same pod as the Prometheus server. +## Components + +Following the KISS and Unix philosophies, Thanos is made of a set of components with each filling a specific role. + +* Sidecar: connects to Prometheus and reads its data for query and/or upload it to cloud storage +* Store Gateway: exposes the content of a cloud storage bucket +* Compactor: compact and downsample data stored in remote storage +* Receiver: receives data from Prometheus' remote-write WAL, exposes it and/or upload it to cloud storage +* Ruler: evaluates recording and alerting rules against data in Thanos for exposition and/or upload +* Query Gateway: implements Prometheus' v1 API to aggregate data from the underlying components -The purpose of the Sidecar is to backup Prometheus data into an Object Storage bucket, and giving other Thanos components access to the Prometheus instance the Sidecar is attached to. +### [Sidecar]({{< ref "components/sidecar.md" >}}) -[More details about the Sidecar's functions are available at the sidecar documentation page](components/sidecar.md). +Thanos integrates with existing Prometheus servers through a [Sidecar process](https://docs.microsoft.com/en-us/azure/architecture/patterns/sidecar#solution), which runs on the same machine or in the same pod as the Prometheus server. + +The purpose of the Sidecar is to backup Prometheus data into an Object Storage bucket, and giving other Thanos components access to the Prometheus instance the Sidecar is attached to via a gRPC API. -NOTE: If you want to use `reload.*` flags for sidecar, make sure you enable `reload` Prometheus endpoint with flag `--web.enable-lifecycle` +The Sidecar makes use of the `reload` Prometheus endpoint. Make sure it's enabled with the flag `--web.enable-lifecycle`. -### Backups +#### External storage -The following configures the sidecar to only backup Prometheus data into a chosen object storage: +The following configures the sidecar to write Prometheus' data into a configured object storage: ```bash thanos sidecar \ - --tsdb.path /var/prometheus \ # TSDB data directory of Prometheus - --prometheus.url "http://localhost:9090" \ - --objstore.config-file bucket_config.yaml \ # Bucket to upload data to + --tsdb.path /var/prometheus \ # TSDB data directory of Prometheus + --prometheus.url "http://localhost:9090" \ # Be sure that the sidecar can use this url! + --objstore.config-file bucket_config.yaml \ # Storage configuration for uploading data ``` -The format of YAML file depends on provider you choose. Examples of config and up-to-date list of storage types Thanos supports is available [here](storage.md). +The format of YAML file depends on the provider you choose. Examples of config and up-to-date list of storage types Thanos supports is available [here]({{< ref "intro/storage.md" >}}). Rolling this out has little to zero impact on the running Prometheus instance. It is a good start to ensure you are backing up your data while figuring out the other pieces of Thanos. If you are not interested in backing up any data, the `--objstore.config-file` flag can simply be omitted. -* _[Example Kubernetes manifest](../tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar.yaml)_ -* _[Example Kubernetes manifest with Minio upload](../tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar-lts.yaml)_ -* _[Details & Config for other object stores](./storage.md)_ +* _[Example Kubernetes manifest](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar.yaml)_ +* _[Example Kubernetes manifest with Minio upload](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar-lts.yaml)_ +* _[Details & Config for other object stores]({{< ref "intro/storage.md" >}})_ -### [Store API](/pkg/store/storepb/rpc.proto#L19) +#### Store API -The Sidecar component implements and exposes gRPC _[Store API](/pkg/store/storepb/rpc.proto#L19)_. The Store API allows you to query metric data in Prometheus and data backed up into the Object Store bucket. +The Sidecar component implements and exposes a gRPC _[Store API](https://github.com/improbable-eng/thanos/tree/master/pkg/store/storepb/rpc.proto#L19)_. The sidecar implementation allows you to query the metric data stored in Prometheus. Let's extend the Sidecar in the previous section to connect to a Prometheus server, and expose the Store API. @@ -89,10 +102,10 @@ thanos sidecar \ --grpc-address 0.0.0.0:19090 # GRPC endpoint for StoreAPI ``` -* _[Example Kubernetes manifest](../tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar.yaml)_ -* _[Example Kubernetes manifest with GCS upload](../tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar-lts.yaml)_ +* _[Example Kubernetes manifest](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar.yaml)_ +* _[Example Kubernetes manifest with GCS upload](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar-lts.yaml)_ -### External Labels +#### External Labels Prometheus allows the configuration of "external labels" of a given Prometheus instance. These are meant to globally identify the role of that instance. As Thanos aims to aggregate data across all instances, providing a consistent set of external labels becomes crucial! @@ -104,29 +117,29 @@ global: region: eu-west monitor: infrastructure replica: A -# ... ``` -## [Query Layer](components/query.md) +### [Query Gateway]({{< ref "components/query.md" >}}) -Now that we have setup the Sidecar for one or more Prometheus instances, we want to use Thanos' global [Query Layer](components/query.md) to evaluate PromQL queries against all instances at once. +Now that we have setup the Sidecar for one or more Prometheus instances, we want to use Thanos' global [Query Layer]({{< ref "components/query.md" >}}) to evaluate PromQL queries against all instances at once. The Query component is stateless and horizontally scalable and can be deployed with any number of replicas. Once connected to the Sidecars, it automatically detects which Prometheus servers need to be contacted for a given PromQL query. -Query also implements Prometheus's offical HTTP API and can thus be used with external tools such as Grafana. It also serves a derivative of Prometheus's UI for ad-hoc querying. +Query also implements Prometheus's official HTTP API and can thus be used with external tools such as Grafana. It also serves a derivative of Prometheus's UI for ad-hoc querying and stores status. Below, we will set up a Query to connect to our Sidecars, and expose its HTTP UI. ```bash thanos query \ - --http-address 0.0.0.0:19192 \ # HTTP Endpoint for Query UI - --store 1.2.3.4:19090 \ # Static gRPC Store API Address for the query node to query - --store 1.2.3.5:19090 # Also repeatable + --http-address 0.0.0.0:19192 \ # HTTP Endpoint for Query UI + --store 1.2.3.4:19090 \ # Static gRPC Store API Address for the query node to query + --store 1.2.3.5:19090 \ # Also repeatable + --store dnssrv+_grpc._tcp.thanos-store.monitoring.svc # Supports DNS A & SRV records ``` -Go to the configured HTTP address that should now show a UI similar to that of Prometheus. If the cluster formed correctly you can now query across all Prometheus instances within the cluster. +Go to the configured HTTP address that should now show a UI similar to that of Prometheus. If the cluster formed correctly you can now query across all Prometheus instances within the cluster. You can also check the Stores page to check up on your stores. -### Deduplicating Data from Prometheus HA pairs +#### Deduplicating Data from Prometheus HA pairs The Query component is also capable of deduplicating data collected from Prometheus HA pairs. This requires configuring Prometheus's `global.external_labels` configuration block (as mentioned in the [External Labels section](#external-labels)) to identify the role of a given Prometheus instance. @@ -141,98 +154,45 @@ global: # ... ``` -Reload your Prometheus instances, and then, in Query, we will enable `replica` as the label we want to enable deduplication to occur on: +In a Kubernetes stateful deployment, the replica label can also be the pod name. + +Reload your Prometheus instances, and then, in Query, we will define `replica` as the label we want to enable deduplication to occur on: ```bash thanos query \ - --http-address 0.0.0.0:19192 \ - --store 1.2.3.4:19090 \ - --store 1.2.3.5:19090 \ - --query.replica-label replica # Replica label for de-duplication + --http-address 0.0.0.0:19192 \ + --store 1.2.3.4:19090 \ + --store 1.2.3.5:19090 \ + --query.replica-label replica # Replica label for de-duplication ``` Go to the configured HTTP address, and you should now be able to query across all Prometheus instances and receive de-duplicated data. -* _[Example Kubernetes manifest](../tutorials/kubernetes-demo/manifests/thanos-querier.yaml)_ +* _[Example Kubernetes manifest](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/thanos-querier.yaml)_ -## Communication Between Components +#### Communication Between Components The only required communication between nodes is for Thanos Querier to be able to reach gRPC storeAPIs you provide. Thanos Querier periodically calls Info endpoint to collect up-to-date metadata as well as checking the health of given StoreAPI. The metadata includes the information about time windows and external labels for each node. There are various ways to tell query component about the StoreAPIs it should query data from. The simplest way is to use a static list of well known addresses to query. -These are repeatable so can add as many endpoint as needed. You can put DNS domain prefixed by `dns://` or `dns+srv://` to have Thanos Query do an `A` or `SRV` lookup to get all required IPs to communicate with. - -```bash -thanos query \ - --http-address 0.0.0.0:19192 \ # Endpoint for Query UI - --grpc-address 0.0.0.0:19092 \ # gRPC endpoint for Store API - --store 1.2.3.4:19090 \ # Static gRPC Store API Address for the query node to query - --store 1.2.3.5:19090 \ # Also repeatable - --store dns://rest.thanos.peers:19092 # Use DNS lookup for getting all registered IPs as separate StoreAPIs -``` - -Read more details [here](/docs/service_discovery.md) - -### Deprecated: Gossip configuration. - -Given a sidecar we can have it join a gossip cluster by advertising itself to other peers within the network. - -NOTE: Gossip will be removed. See [here](/docs/proposals/approved/201809_gossip-removal.md) why. New FileSD with DNS support is enabled and described [here](/docs/service_discovery.md) - -```bash -thanos sidecar \ - --prometheus.url http://localhost:9090 \ - --tsdb.path /var/prometheus \ - --objstore.config-file bucket_config.yaml \ # Bucket config file to send data to - --grpc-address 0.0.0.0:19091 \ # gRPC endpoint for Store API (will be used to perform PromQL queries) - --http-address 0.0.0.0:19191 \ # HTTP endpoint for collecting metrics on Thanos sidecar - --cluster.address 0.0.0.0:19391 \ # Endpoint used to meta data about the current node - --cluster.advertise-address 127.0.0.1:19391 \ # Location at which the node advertise itself at to other members of the cluster - --cluster.peers 127.0.0.1:19391 # Static cluster peer where the node will get info about the cluster (repeatable) -``` - -With the above configuration a single node will advertise itself in the cluster and query for other members of the cluster (from itself) when you add more sidecars / components you will probably want to sent `cluster.peers` to a well known peer that will allow you to discover other peers within the cluster. - -When a peer advertises itself / joins a gossip cluster it sends information about all the peers it currently knows about (including itself). This information for each peer allows you to see what type of component a peer is (Source, Store, Query), the peers Store API address (used for querying) and meta data about the external labels and time window the peer holds information about. - -Once the Peer joins the cluster it will periodically update the information it sends out with new / updated information about other peers and the time windows for the metrics that it can access. - -```bash -thanos query \ - --http-address 0.0.0.0:19192 \ # Endpoint for Query UI - --grpc-address 0.0.0.0:19092 \ # gRPC endpoint for Store API - --cluster.address 0.0.0.0:19591 \ - --cluster.advertise-address 127.0.0.1:19591 \ - --cluster.peers 127.0.0.1:19391 # Static cluster peer where the node will get info about the cluster -``` - -You can mix both static `store` and `cluster` based approaches: +These are repeatable so can add as many endpoint as needed. You can put DNS domain prefixed by `dns+` or `dnssrv+` to have Thanos Query do an `A` or `SRV` lookup to get all required IPs to communicate with. ```bash thanos query \ - --http-address 0.0.0.0:19192 \ # Endpoint for Query UI - --grpc-address 0.0.0.0:19092 \ # gRPC endpoint for Store API - --cluster.address 0.0.0.0:19591 \ - --cluster.advertise-address 127.0.0.1:19591 \ - --cluster.peers 127.0.0.1:19391 \ # Static cluster peer where the node will get info about the cluster - --cluster.peers 127.0.0.1:19392 \ # Another cluster peer (many can be added to discover nodes) - --store 1.2.3.4:19090 \ # Static gRPC Store API Address for the query node to query - --store 1.2.3.5:19090 \ # Also repeatable - --store dns://rest.thanos.peers:19092 # Use DNS lookup for getting all registered IPs as separate StoreAPIs + --http-address 0.0.0.0:19192 \ # Endpoint for Query UI + --grpc-address 0.0.0.0:19092 \ # gRPC endpoint for Store API + --store 1.2.3.4:19090 \ # Static gRPC Store API Address for the query node to query + --store 1.2.3.5:19090 \ # Also repeatable + --store dns+rest.thanos.peers:19092 # Use DNS lookup for getting all registered IPs as separate StoreAPIs ``` -When to use gossip vs store flags? -- Use gossip if you want to maintain single gossip cluster that is able to dynamically join and remove components. -- Use static store when you want to have full control of which components are connected. It is also easier to user static store options when setting up communication with remote (cross-cluster) components e.g (sidecar in different network through some proxy) +Read more details [here.]({{< ref "intro/service-discovery.md" >}}) -Configuration of initial peers is flexible and the argument can be repeated for Thanos to try different approaches. -Additional flags for cluster configuration exist but are typically not needed. Check the `--help` output for further information. +* _[Example Kubernetes manifest](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar.yaml)_ +* _[Example Kubernetes manifest with GCS upload](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar-lts.yaml)_ -* _[Example Kubernetes manifest](../tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar.yaml)_ -* _[Example Kubernetes manifest with GCS upload](../tutorials/kubernetes-demo/manifests/prometheus-ha-sidecar-lts.yaml)_ - -## [Store Gateway](components/store.md) +### [Store Gateway]({{< ref "components/store.md" >}}) As the sidecar backs up data into the object storage of your choice, you can decrease Prometheus retention and store less locally. However we need a way to query all that historical data again. The store gateway does just that by implementing the same gRPC data API as the sidecars but backing it with data it can find in your object storage bucket. @@ -240,19 +200,19 @@ Just like sidecars and query nodes, the store gateway exposes StoreAPI and needs ```bash thanos store \ - --data-dir /var/thanos/store \ # Disk space for local caches - --objstore.config-file bucket_config.yaml \ # Bucket to fetch data from - --http-address 0.0.0.0:19191 \ # HTTP endpoint for collecting metrics on the Store Gateway - --grpc-address 0.0.0.0:19090 # GRPC endpoint for StoreAPI + --data-dir /var/thanos/store \ # Disk space for local caches + --objstore.config-file bucket_config.yaml \ # Bucket to fetch data from + --http-address 0.0.0.0:19191 \ # HTTP endpoint for collecting metrics on the Store Gateway + --grpc-address 0.0.0.0:19090 # GRPC endpoint for StoreAPI ``` The store gateway occupies small amounts of disk space for caching basic information about data in the object storage. This will rarely exceed more than a few gigabytes and is used to improve restart times. It is useful but not required to preserve it across restarts. -* _[Example Kubernetes manifest](../tutorials/kubernetes-demo/manifests/thanos-store-gateway.yaml)_ +* _[Example Kubernetes manifest](https://github.com/improbable-eng/thanos/tree/master/tutorials/kubernetes-demo/manifests/thanos-store-gateway.yaml)_ -## [Compactor](components/compact.md) +### [Compactor]({{< ref "components/compact.md" >}}) -A local Prometheus installation periodically compacts older data to improve query efficieny. Since the sidecar backs up data as soon as possible, we need a way to apply the same process to data in the object storage. +A local Prometheus installation periodically compacts older data to improve query efficiency. Since the sidecar backs up data as soon as possible, we need a way to apply the same process to data in the object storage. The compactor component simple scans the object storage and processes compaction where required. At the same time it is responsible for creating downsampled copies of data to speed up queries. @@ -267,19 +227,17 @@ The compactor is not in the critical path of querying or data backup. It can eit _NOTE: The compactor must be run as a **singleton** and must not run when manually modifying data in the bucket._ -## [Ruler](components/rule.md) - -In case of Prometheus with Thanos sidecar does not have enough retention, or if you want to have alerts or recording rules that requires global view, Thanos offers [Ruler](components/rule.md) -which does rule and alert evaluation on top of given Thanos Querier. +### [Ruler]({{< ref "components/rule.md" >}}) -# All-in-one example +In case of Prometheus with Thanos sidecar does not have enough retention, or if you want to have alerts or recording rules that requires global view, Thanos has just the component for that: the [Ruler]({{< ref "components/rule.md" >}}), +which does rule and alert evaluation on top of a given Thanos Querier. -You can find kubernetes manifests [here](../tutorials/kubernetes-demo/manifests). +### [Receiver]({{< ref "components/receiver.md" >}}) -# Dashboards +TBD -You can find example Grafana dashboards [here](../examples/grafana/monitoring.md) +## Extras -# Alerts +Thanos also has a tutorial on deploying it to Kubernetes. We have a full page describing a standard deployment here. -You can find example Alert configuration [here](../examples/alerts/alerts.md) +We also have example Grafana dashboards [here](https://github.com/improbable-eng/thanos/tree/master/examples/grafana/monitoring.md) and some [alerts](https://github.com/improbable-eng/thanos/tree/master/examples/alerts/alerts.md) to get you started. diff --git a/website/config.toml b/hugo.toml similarity index 77% rename from website/config.toml rename to hugo.toml index 2940939b74..4c0cdad3e3 100644 --- a/website/config.toml +++ b/hugo.toml @@ -3,7 +3,11 @@ languageCode = "en-us" title = "Thanos - Highly available Prometheus setup with long term storage capabilities" pygmentsCodeFences = true pygmentsUseClasses = true -contentDir = "../docs" +contentDir = "docs" +archetypeDir = "website/archetypes" +layoutDir = "website/layouts" +publishDir = "website/public" +staticDir = "website/static" [params] SlackInvite = "https://join.slack.com/t/improbable-eng/shared_invite/enQtMzQ1ODcyMzQ5MjM4LWY5ZWZmNGM2ODc5MmViNmQ3ZTA3ZTY3NzQwOTBlMTkzZmIxZTIxODk0OWU3YjZhNWVlNDU3MDlkZGViZjhkMjc" diff --git a/website/layouts/shortcodes/embedcode.html b/website/layouts/shortcodes/embedcode.html new file mode 100644 index 0000000000..505fd692ac --- /dev/null +++ b/website/layouts/shortcodes/embedcode.html @@ -0,0 +1,7 @@ +{{ $lang := .Get "lang" }} +{{ $start := sub (int (.Get "start")) 2 }} +{{ $lines := add (int (.Get "lines")) 1 }} +{{/*{{ $file := .Get "file" | readFile }}*/}} +{{ $file := first $lines (after $start (split (.Get "file" | readFile) "\n")) }} + +{{ (print "```" $lang "\n" (delimit $file "\n") "\n```") | markdownify }} \ No newline at end of file From c2355b1ec913283a8a0b55f2720339a88289e673 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Sat, 23 Mar 2019 17:05:39 +0100 Subject: [PATCH 14/15] update --- docs/intro/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/intro/getting-started.md b/docs/intro/getting-started.md index 8f9e41cb6e..4a6164cfcc 100644 --- a/docs/intro/getting-started.md +++ b/docs/intro/getting-started.md @@ -232,7 +232,7 @@ _NOTE: The compactor must be run as a **singleton** and must not run when manual In case of Prometheus with Thanos sidecar does not have enough retention, or if you want to have alerts or recording rules that requires global view, Thanos has just the component for that: the [Ruler]({{< ref "components/rule.md" >}}), which does rule and alert evaluation on top of a given Thanos Querier. -### [Receiver]({{< ref "components/receiver.md" >}}) +### [Receiver]({{< ref "components/rule.md" >}}) TBD From dae29eb19ae94b8484d33f345d94c69f49ee6e61 Mon Sep 17 00:00:00 2001 From: Adrien Fillon Date: Sat, 23 Mar 2019 17:07:49 +0100 Subject: [PATCH 15/15] update --- .circleci/config.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ceba12b144..f511d6a253 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -107,9 +107,8 @@ jobs: - run: name: Deploy to GitHub Pages command: | - cd website - hugo -v - cd public + hugo --config hugo.toml + cd website/public git init git config --global user.email "adrien-f@users.noreply.github.com" git config --global user.name "AdrienF"