You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Promtail轮转日志配置问题:标签显示与日志路径咨询

Promtail配置问题解决方案

1. 统一logfile标签为request.log(覆盖所有轮转文件)

日志轮转后生成request.log.2025-04-08这类文件,要让所有相关日志的logfile标签统一显示为request.log,需修改relabel规则的正则表达式,精准匹配并替换:

relabel_configs:
  - source_labels: [__path__]
    regex: '/var/log/(request\.log)(?:\..*)?'  # 匹配request.log及所有带日期后缀的轮转文件
    target_label: logfile
    replacement: '${1}'  # 仅保留request.log作为标签值
    action: replace

该正则会捕获request.log核心部分,忽略后续后缀,最终所有对应日志的logfile标签都会统一为request.log。

2. 修复logfile标签未在Grafana显示的问题

当前配置中,pipeline_stages的labels字段包含logfile,但logfile是通过relabel_configs生成的目标标签,不属于日志内容本身的字段,pipeline阶段无法直接读取并重复添加。只需移除pipeline中labels里的logfile项即可,relabel生成的logfile标签会自动附加到日志条目上:

pipeline_stages:
  - match:
      selector: '{job="django"}'
      stages:
        - json:
            expressions:
              request_time: request_time
              status_code: status_code
              method: method
              path: path
              device_id: device_id
            optional: true
        - regex:
            expression: '^(?P<ts>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)'
        - labels:
            device_id
            status_code
            method
            path  # 移除此处的logfile
        - timestamp:
            source: request_time
            format: RFC3339
        - timestamp:
            source: ts
            format: RFC3339

3. __path__配置说明

必须使用/var/log/*.log*,原因如下:

  • *.log仅能匹配以.log结尾的文件(即当前正在写入的request.log);
  • 轮转后的日志文件名格式为request.log.2025-04-08,后缀为.log.xxx,只有*.log*才能匹配这类带额外后缀的轮转文件,确保所有历史日志都被采集。

修改后的完整配置

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:
  - job_name: django-logs
    static_configs:
      - targets:
          - localhost
        labels:
          job: django
          env: local
          __path__: /var/log/*.log*
    relabel_configs:
      - source_labels: [__path__]
        regex: '/var/log/(request\.log)(?:\..*)?'
        target_label: logfile
        replacement: '${1}'
        action: replace
    
    pipeline_stages:
      - match:
          selector: '{job="django"}'
          stages:
            - json:
                expressions:
                  request_time: request_time
                  status_code: status_code
                  method: method
                  path: path
                  device_id: device_id
                optional: true
            - regex:
                expression: '^(?P<ts>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z)'
            - labels:
                device_id
                status_code
                method
                path
            - timestamp:
                source: request_time
                format: RFC3339
            - timestamp:
                source: ts
                format: RFC3339

内容的提问来源于stack exchange,提问作者Arabboy Mamadaliev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:50:02