From 78ed90bd252dd3401017204ff4db641e18febb8c Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Fri, 24 Apr 2026 09:43:32 +0700 Subject: [PATCH] refactor: simplify for standalone single-host deployment - merge discovery.relabel "metrics" into prometheus.relabel "filter" (instance label + keep-filter in one component) - move logs 'instance' label to loki.write external_labels (DRY, one source) - drop alloy container log exclusion (~500kb/day trivial; adds visibility into alloy's own health via loki) net: -5 lines, one fewer component, same functionality --- docker-compose.yml | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 933d1cb..95adef8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,6 +46,7 @@ configs: } loki.write "gc" { + external_labels = { instance = constants.hostname } endpoint { url = sys.env("LOKI_URL") batch_wait = "5s" @@ -69,24 +70,20 @@ configs: docker_only = true } - discovery.relabel "metrics" { + prometheus.scrape "metrics" { targets = array.concat( prometheus.exporter.unix.host.targets, prometheus.exporter.cadvisor.containers.targets, ) - rule { target_label = "instance" replacement = constants.hostname } - } - - prometheus.scrape "metrics" { - targets = discovery.relabel.metrics.output forward_to = [prometheus.relabel.filter.receiver] scrape_interval = "60s" } - // Keep only metrics powering standard dashboards. - // Essential for the 10k active-series cap on Grafana Cloud Free. + // Sets instance label + keeps only metrics used by standard dashboards. + // keep-filter essential for the 10k active-series cap on Grafana Cloud Free. prometheus.relabel "filter" { forward_to = [prometheus.remote_write.gc.receiver] + rule { target_label = "instance" replacement = constants.hostname } rule { source_labels = ["__name__"] action = "keep" @@ -101,16 +98,14 @@ configs: discovery.relabel "container_logs" { targets = discovery.docker.containers.targets - rule { target_label = "instance" replacement = constants.hostname } rule { source_labels = ["__meta_docker_container_name"] regex = "/(.*)" target_label = "container" } rule { - source_labels = ["__meta_docker_container_name"] - regex = "/alloy.*" - action = "drop" + source_labels = ["__meta_docker_container_log_stream"] + target_label = "stream" } } @@ -131,5 +126,5 @@ configs: path = "/var/log/journal" forward_to = [loki.write.gc.receiver] relabel_rules = loki.relabel.journal.rules - labels = { job = "systemd-journal", instance = constants.hostname } + labels = { job = "systemd-journal" } }