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

Kubernetes中如何将Promtail部署为Sidecar读取自定义路径日志

Promtail 采集Kubernetes Pod自定义路径日志方案

Sidecar 部署方案原理与示例

运行原理

Sidecar模式无需修改集群全局配置,只需在业务Pod中新增一个Promtail容器,通过共享存储卷实现日志访问:

  • 业务容器将日志写入/var/log/myapp目录,该目录通过emptyDir或共用持久卷挂载
  • 同Pod内的Promtail容器同步挂载该存储卷,直接读取目录下的日志文件,经过过滤、打标签后推送至Loki

配置示例

  1. 首先创建Promtail配置ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
  name: promtail-sidecar-config
data:
  promtail.yaml: |
    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: myapp-log
      static_configs:
      - targets:
          - localhost
        labels:
          job: myapp
          __path__: /var/log/myapp/*.log
  1. 业务Deployment中加入Sidecar配置:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      # 业务容器
      - name: myapp
        image: myapp:v1
        volumeMounts:
        - name: log-volume
          mountPath: /var/log/myapp
      # Promtail Sidecar容器
      - name: promtail
        image: grafana/promtail:2.8.2
        args:
        - -config.file=/etc/promtail/promtail.yaml
        volumeMounts:
        - name: log-volume
          mountPath: /var/log/myapp
        - name: promtail-config
          mountPath: /etc/promtail
      volumes:
      - name: log-volume
        emptyDir: {}
      - name: promtail-config
        configMap:
          name: promtail-sidecar-config

DaemonSet 部署方案说明

Promtail 不是必须部署为Sidecar,DaemonSet是更通用的集群级采集方案,适合业务日志路径相对统一的场景。

运行原理

  • Promtail以DaemonSet形式运行在集群每个节点上,默认挂载节点的/var/log/pods、/var/lib/docker/containers等日志目录
  • 针对自定义路径的日志,只需将业务Pod的日志目录通过hostPath挂载到节点固定路径,或者配置Promtail的Kubernetes服务发现规则,自动识别Pod的日志挂载路径即可完成采集

核心配置片段

Promtail 采集配置中增加自定义路径的抓取规则:

scrape_configs:
- job_name: kubernetes-pods-custom-log
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - action: keep
    regex: true
    source_labels:
    - __meta_kubernetes_pod_annotation_promtail_io_scrape
  - action: replace
    regex: (.*)
    source_labels:
    - __meta_kubernetes_pod_annotation_promtail_io_path
    target_label: __path__
  - action: replace
    source_labels:
    - __meta_kubernetes_namespace
    target_label: namespace
  - action: replace
    source_labels:
    - __meta_kubernetes_pod_name
    target_label: pod

给业务Pod加上对应的注解即可自动被采集:

annotations:
  promtail.io/scrape: "true"
  promtail.io/path: "/var/log/myapp/*.log"

方案选型建议

  • 若不同业务的日志采集规则差异大、需要高度自定义,优先选Sidecar方案
  • 若集群业务规模大、日志路径统一,优先选DaemonSet方案,资源开销更低、运维更简单

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:01