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

如何通过Helm配置Promtail/Loki采集Kubernetes Pod内容器自定义日志文件

Promtail采集容器内应用日志文件配置步骤

1. 配置业务Pod(以Nginx为例)

首先需要将Nginx容器内部的日志路径挂载到节点可访问的位置,同时添加标识标签供Promtail匹配,Deployment配置示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-log-collect # 标识标签,后续Promtail会匹配该标签的Pod
  template:
    metadata:
      labels:
        app: nginx-log-collect
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        volumeMounts:
        - name: nginx-log
          mountPath: /var/log/nginx # 容器内Nginx日志存放路径
      volumes:
      - name: nginx-log
        emptyDir: {} # 也可根据需求使用hostPath挂载到节点固定路径

2. 修改Promtail Helm Values配置

在你本地的Promtail values配置文件中新增额外的采集配置,匹配上述Nginx Pod的日志文件:

promtail:
  extraScrapeConfigs:
  - job_name: kubernetes-pod-internal-logs
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    # 只匹配带有app=nginx-log-collect标签的Pod
    - action: keep
      regex: nginx-log-collect
      source_labels: [__meta_kubernetes_pod_label_app]
    # 获取Pod所在节点名称
    - action: replace
      source_labels: [__meta_kubernetes_pod_node_name]
      target_label: node_name
    # 获取Pod名称
    - action: replace
      source_labels: [__meta_kubernetes_pod_name]
      target_label: pod
    # 获取命名空间
    - action: replace
      source_labels: [__meta_kubernetes_namespace]
      target_label: namespace
    # 获取容器名称
    - action: replace
      source_labels: [__meta_kubernetes_pod_container_name]
      target_label: container
    # 构造日志文件在节点上的实际路径
    - action: replace
      replacement: /var/lib/kubelet/pods/${__meta_kubernetes_pod_uid}/volumes/kubernetes.io~empty-dir/nginx-log/*.log
      target_label: __path__
    # 提取日志文件名作为标签,区分access.log和error.log
    - action: replace
      regex: .*/(.*\.log)
      source_labels: [__path__]
      target_label: log_type

3. 生效Promtail配置

执行Helm升级命令使配置生效:
helm upgrade --values <你的promtail-values文件路径> <你的promtail release名称> grafana/promtail -n <loki所在命名空间>

4. 验证采集结果

配置生效后,你可以在Grafana Loki数据源中通过如下LogQL查询采集到的日志:

  • 查询所有Nginx内部日志:{app="nginx-log-collect"}
  • 仅查询Nginx访问日志:{app="nginx-log-collect", log_type="access.log"}
  • 仅查询Nginx错误日志:{app="nginx-log-collect", log_type="error.log"}

注意事项

  • 若你使用hostPath挂载Pod日志,需要将上述__path__的replacement值修改为你对应的节点挂载路径
  • 避免同时采集日志文件和对应内容的容器标准输出,防止日志重复
  • 若出现权限报错,确认Promtail运行用户对节点上的日志路径有可读权限,默认Helm安装的Promtail以root用户运行可满足要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:06:02