使用Promtail向Loki推送日志时遇无匹配标签问题求助
问题根源
你的正则表达式中data字段使用了贪婪匹配\{.*\},导致正则引擎在匹配时发生回溯,截断了time字段的毫秒部分(从原日志的三位762变成了两位76)。而timestamp阶段配置的格式要求三位毫秒(2006-01-02 15:04:05,000),解析不完整的时间字符串会失败,Promtail默认会丢弃解析失败的日志条目,因此查询不到结果。
解决方案
1. 修复正则表达式(推荐)
将data部分的贪婪匹配改为非贪婪匹配,确保匹配到第一个}就停止,避免回溯截断前面的时间字段:
pipeline_stages: - regex: expression: '(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}) \| (?P<request_id>[a-fA-F0-9]{32}) \| (?P<level>\w+) \| (?P<value>\w+) \| (?P<data>\{.*?\})' - timestamp: source: time location: Asia/Kolkata format: '2006-01-02 15:04:05,000' - labels: level:
修改后重启Promtail,用--inspect验证time字段是否为完整的三位毫秒格式(如2023-04-13 09:09:49,762),此时timestamp阶段能正确解析时间,日志会正常推送到Loki,查询job="django_logs"即可返回结果。
2. 临时兼容方案(不推荐长期使用)
如果暂时无法修改正则,可以在timestamp阶段添加allow_failure: true,让Promtail在时间解析失败时仍推送日志(使用当前时间作为时间戳):
- timestamp: source: time location: Asia/Kolkata format: '2006-01-02 15:04:05,000' allow_failure: true
内容的提问来源于stack exchange,提问作者swaran
相关产品推荐
相关产品推荐

