discovery.docker "default" {
  host = "unix:///var/run/docker.sock"
}

discovery.relabel "docker_targets" {
  targets = discovery.docker.default.targets
  rule {
    action        = "replace"
    source_labels = ["__meta_docker_container_name"]
    regex         = "/(.*)"
    target_label  = "container"
  }

  // 2) Keep docker-compose service name as "service"
  rule {
    action        = "replace"
    source_labels = ["__meta_docker_label_com_docker_compose_service"]
    regex         = "(.*)"
    target_label  = "service"
  }

  // 3) Keep docker-compose project as "project"
  rule {
    action        = "replace"
    source_labels = ["__meta_docker_label_com_docker_compose_project"]
    regex         = "(.*)"
    target_label  = "project"
  }
}

local.file "hostname" {
  filename = "/etc/hostname"
}

loki.source.docker "docker_logs" {
  host    = "unix:///var/run/docker.sock"
  targets = discovery.relabel.docker_targets.output

  labels = {
    env = "prod",
  }

  forward_to = [loki.process.docker_pipeline.receiver]
}

loki.process "docker_pipeline" {

  // Add a static job label for this host
  stage.static_labels {
    values = {
      job = "alloy-docker-host",
      hostname = local.file.hostname.content,
    }
  }

  forward_to = [loki.relabel.clean_labels.receiver]
}

loki.relabel "clean_labels" {
  // 1) Drop all very verbose Docker compose / OCI labels
  rule {
    action = "labeldrop"
    regex  = "container_label_.*"
  }

  // 2) Drop Alloy's own logs to avoid loops and noisy labels
  rule {
    action        = "drop"
    source_labels = ["container"]
    regex         = "alloy"
  }

  forward_to = [loki.write.to_loki.receiver]
}

loki.write "to_loki" {
  endpoint {
    url = "http://{{ monitor_server_ip }}:3100/loki/api/v1/push"
  }
}
