Loki Promtail模板无法读取变量问题排查求助
Promtail模板变量为空问题解决
你的问题出在Promtail的template阶段默认读取的是extracted字段集合,而非labels集合。
你通过regex提取了level、user等字段后,立刻用labels阶段把这些字段转移到了标签中,但这个操作不会自动保留extracted里的原始字段值,导致后续template阶段找不到对应的变量,所以输出为空。
两种解决方法:
方法1:直接引用标签变量
修改template阶段的变量引用,明确指向labels集合中的值:
pipeline_stages: - cri: {} - regex: expression: '^(?P<time>.*?)\|(?P<level>.*?)\|(?P<process>.*?)\|(?P<logger>.*?)\|(?P<thread>.*?)\|(?P<client>.*?)\|(?P<user>.*?)\|(?P<message>(?s:.*))$' - labels: level: logger: thread: client: user: - labeldrop: - filename - template: source: testo2 template: '{{ .labels.level }} - {{ .labels.user }}' - output: source: testo2
方法2:保留extracted字段的值
如果希望继续使用{{ .level }}这类简洁引用,可以在labels阶段后添加copy阶段,把标签中的值复制回extracted集合:
pipeline_stages: - cri: {} - regex: expression: '^(?P<time>.*?)\|(?P<level>.*?)\|(?P<process>.*?)\|(?P<logger>.*?)\|(?P<thread>.*?)\|(?P<client>.*?)\|(?P<user>.*?)\|(?P<message>(?s:.*))$' - labels: level: logger: thread: client: user: - copy: source: labels.level target: extracted.level - copy: source: labels.user target: extracted.user - labeldrop: - filename - template: source: testo2 template: '{{ .level }} - {{ .user }}' - output: source: testo2
内容的提问来源于stack exchange,提问作者Testo Testo
相关产品推荐
相关产品推荐

