如何解决Promtail的extraScrapeConfigs配置未被加载生效的问题
问题根因
你遇到的配置不生效问题由三个错误共同导致:
extraScrapeConfigs配置格式错误:loki-stack Helm Chart的promtail.extraScrapeConfigs字段要求直接传入Scrape规则的YAML内容,而非本地配置文件路径。你填写的extrascrapeconfig.yaml会被直接当成字符串写入Promtail配置,属于无效规则。- 默认采集任务未关闭:Promtail默认自带
kubernetes-pods等内置采集任务,即使你新增的规则生效,默认任务依旧会全量采集所有Pod日志,这是你能查到kube-system日志的核心原因。 - Relabel规则逻辑错误:你编写的Keep规则同时匹配两个完全相同的命名空间标签,且规则逻辑和你「排除kube-system日志」的需求不符;同时前面的Drop规则只要Pod存在
name标签就丢弃,逻辑冲突。
修复方案
场景1:在默认采集规则基础上过滤kube-system日志
无需使用extraScrapeConfigs,直接修改默认采集规则的Relabel配置即可,loki-stack-values-v2.4.1.yaml修改为以下内容:
loki: enabled: true promtail: enabled: true config: snippets: scrapeConfigs: | - job_name: kubernetes-pods pipeline_stages: - docker: {} kubernetes_sd_configs: - role: pod relabel_configs: # 新增规则:直接丢弃kube-system命名空间的所有Pod日志 - action: drop regex: kube-system source_labels: - __meta_kubernetes_namespace # 下方为默认保留的Relabel规则,不要删除 - action: replace source_labels: - __meta_kubernetes_pod_host_ip target_label: host_ip - action: replace source_labels: - __meta_kubernetes_namespace target_label: namespace - action: replace source_labels: - __meta_kubernetes_pod_name target_label: pod - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container - action: replace replacement: /var/log/pods/*$1/*.log separator: / source_labels: - __meta_kubernetes_pod_uid - __meta_kubernetes_pod_container_name target_label: __path__ fluent-bit: enabled: false grafana: enabled: false prometheus: enabled: false
场景2:完全自定义所有采集规则
先清空默认采集规则,再将你的自定义规则直接写入extraScrapeConfigs字段:
loki: enabled: true promtail: enabled: true # 清空默认采集配置 config: snippets: scrapeConfigs: [] # 直接写入自定义Scrape规则内容 extraScrapeConfigs: - job_name: kubernetes-pods-app pipeline_stages: - docker: {} kubernetes_sd_configs: - role: pod relabel_configs: # 丢弃kube-system命名空间日志 - action: drop regex: kube-system source_labels: - __meta_kubernetes_namespace # 下方为必要的元数据标签映射规则 - action: replace source_labels: - __meta_kubernetes_namespace target_label: namespace - action: replace source_labels: - __meta_kubernetes_pod_name target_label: pod - action: replace source_labels: - __meta_kubernetes_pod_container_name target_label: container - action: replace replacement: /var/log/pods/*$1/*.log separator: / source_labels: - __meta_kubernetes_pod_uid - __meta_kubernetes_pod_container_name target_label: __path__ fluent-bit: enabled: false grafana: enabled: false prometheus: enabled: false
如果你希望自定义规则存放在单独的extrascrapeconfig.yaml文件中,不需要嵌入values,部署时新增参数--set-file promtail.extraScrapeConfigs=extrascrapeconfig.yaml即可。
生效验证
修改配置后执行升级命令:
helm upgrade loki grafana/loki-stack --version "${HELM_CHART_VERSION}" \ --namespace=monitoring \ -f "loki-stack-values-v${HELM_CHART_VERSION}.yaml"
等待Promtail Pod重启完成后,再查询{namespace="kube-system"}就不会返回日志。
内容的提问来源于stack exchange,提问作者Penguen
相关产品推荐
相关产品推荐

