Documentation

Observability and Docker logs

Configure Prometheus, Loki, Alloy, Grafana, and Docker log ingestion.

Use this pattern when a local workspace needs metrics, logs, dashboards, and Docker container log ingestion.

alloy implicitly enables loki. Add docker when you also want Docker daemon metrics support.

schema_version = 1
tld = "local.dev.test"

enabled = [
  "docker",
  "prometheus",
  "loki",
  "alloy",
  "grafana",
]

[prometheus]
scrape_config_files = ["./monitoring/prometheus.yml"]

[alloy]
import_files = [
  { name = "app", path = "./monitoring/config.alloy" },
]
blocks = [
  'app.logs "local_app_logs" { forward_to = loki.write.default.receiver }',
]

[alloy.docker_logs]
enabled = true
refresh_interval = "5s"

[alloy.docker_logs.labels]
environment = "local"
origin = "docker"

[[alloy.docker_logs.relabel]]
source_labels = ["__meta_docker_container_label_service"]
target_label = "service"

[[alloy.docker_logs.relabel]]
source_labels = ["__meta_docker_container_name"]
target_label = "container"

[grafana]

[[grafana.dashboard_dirs]]
dir = "./grafana/dashboards"
folder = "Apps"

What to customize

  • prometheus.scrape_config_files: point to YAML scrape configs in your repository.
  • alloy.import_files: import Alloy modules that define reusable pipelines.
  • alloy.blocks: append the raw Alloy blocks needed by your local stack.
  • alloy.docker_logs.labels: add stable labels that make local logs searchable.
  • alloy.docker_logs.relabel: map Docker metadata labels that actually exist on your containers.
  • grafana.dashboard_dirs: point to directories containing *.json dashboards.

For exact field defaults, see the [alloy], [prometheus], and [grafana] reference sections.