# Promtail Configuration for Vibecarbon
# Collects logs from all Docker containers

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  # Discover and scrape all Docker containers
  - job_name: docker
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 5s
    relabel_configs:
      # Extract container name (remove leading /)
      - source_labels: ['__meta_docker_container_name']
        regex: '/(.*)'
        target_label: 'container'

      # Extract compose service name
      - source_labels: ['__meta_docker_container_label_com_docker_compose_service']
        target_label: 'service'

      # Extract compose project name
      - source_labels: ['__meta_docker_container_label_com_docker_compose_project']
        target_label: 'project'

      # Extract container ID (short form)
      - source_labels: ['__meta_docker_container_id']
        regex: '(.{12}).*'
        target_label: 'container_id'

      # Add environment label if present
      - source_labels: ['__meta_docker_container_label_environment']
        target_label: 'environment'

    pipeline_stages:
      # Parse JSON logs if present
      - json:
          expressions:
            level: level
            msg: msg
            message: message
            timestamp: timestamp
            time: time

      # Extract log level for filtering
      - labels:
          level:

      # Handle plain text logs
      - match:
          selector: '{service=~".+"}'
          stages:
            - regex:
                expression: '(?P<level>INFO|WARN|ERROR|DEBUG|FATAL)'
            - labels:
                level:
