如何通过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
相关产品推荐
相关产品推荐

