# ============================================================
# Promtail 配置文件（宿主机直接部署模式）
# ============================================================
# 说明：
#   - 采集系统 journal 日志和 /var/log 下的日志文件
#   - 采集 Docker 容器日志（通过宿主机上的 Docker socket）
#   - 将日志推送到管理端 Loki
# ============================================================

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /var/lib/promtail/positions.yaml

# ============================================================
# Loki 推送地址
# ============================================================
clients:
  - url: http://100.124.189.29:3100/loki/api/v1/push

scrape_configs:
  # ----------------------------------------------------------
  # systemd journal 日志采集
  # ----------------------------------------------------------
  - job_name: journal
    journal:
      max_age: 12h
      labels:
        job: systemd-journal
    relabel_configs:
      - source_labels: ["__journal__systemd_unit"]
        target_label: unit
      - source_labels: ["__journal__hostname"]
        target_label: hostname

  # ----------------------------------------------------------
  # 系统日志文件采集（/var/log）
  # ----------------------------------------------------------
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log

  # ----------------------------------------------------------
  # Docker 容器日志采集（通过 Docker API 自动发现容器）
  # ----------------------------------------------------------
  - job_name: docker
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 10s

    relabel_configs:
      # 使用容器名称作为标签
      - source_labels: ["__meta_docker_container_name"]
        regex: "/(.+)"
        target_label: container_name

      # 使用镜像名称作为标签
      - source_labels: ["__meta_docker_container_image"]
        target_label: image

      # 使用 docker-compose 服务名作为标签（如果存在）
      - source_labels: ["__meta_docker_container_label_com_docker_compose_service"]
        target_label: compose_service

      # 使用 docker-compose 项目名作为标签（如果存在）
      - source_labels: ["__meta_docker_container_label_com_docker_compose_project"]
        target_label: compose_project

    pipeline_stages:
      # Docker 日志格式为 JSON，解析其中的 log、stream、time 字段
      - docker: {}
