跳到主要内容

Promtail转换器

介绍

Promtail是Grafana Loki生态系统中用于收集和发送日志的代理工具,而**转换器(Pipeline Stages)**是Promtail处理日志数据的核心功能之一。转换器允许你在日志被发送到Loki之前,对其进行解析、修改或丰富。本指南将详细介绍Promtail转换器的基本概念、常见类型及实际应用。

备注

转换器是Promtail日志处理流水线(Pipeline)的一部分,通常与其他阶段(如解析、标签提取)结合使用。

转换器基础

Promtail的转换器通过pipeline_stages配置块定义,每个阶段按顺序执行。以下是一个简单的转换器配置示例:

yaml
pipeline_stages:
- json:
expressions:
level: log_level
message: log_message
- labels:
level:
- output:
source: message

输入与输出示例

  • 输入日志
    json
    {"log_level": "error", "log_message": "Failed to connect to DB"}
  • 处理后输出
    • 提取的标签:level="error"
    • 输出的日志内容:Failed to connect to DB

常用转换器类型

1. JSON解析器

从日志中提取JSON字段。

yaml
- json:
expressions:
user: user_name
status: response.status

2. 正则表达式提取

使用正则匹配日志内容。

yaml
- regex:
expression: '^(?P<ip>\\S+) \\S+ \\S+ \$$(?P<timestamp>[^\$$]+)\$$'

3. 标签处理器

将提取的字段转换为Loki标签。

yaml
- labels:
user:
status:

4. 时间戳处理

修改日志的时间戳字段。

yaml
- timestamp:
source: time
format: RFC3339

5. 输出重写

修改最终输出的日志内容。

yaml
- output:
source: message

实际案例:处理Nginx日志

目标

将Nginx访问日志的statuspath字段提取为标签,并重写输出。

配置

yaml
pipeline_stages:
- regex:
expression: '^(?P<ip>\\S+) \\S+ \\S+ \$$.+\$$ "(?P<method>\\S+) (?P<path>\\S+) HTTP/\\S+" (?P<status>\\d+)'
- labels:
status:
path:
- output:
source: method

效果

  • 输入日志
    192.168.1.1 - - [10/Oct/2023:14:30:00 +0000] "GET /api/users HTTP/1.1" 200
  • 处理后
    • 标签:status="200", path="/api/users"
    • 输出内容:GET

总结

Promtail转换器是灵活处理日志数据的关键工具,支持解析、过滤和丰富日志内容。通过组合不同的阶段,你可以实现复杂的日志处理逻辑。

练习
  1. 尝试为Apache日志配置一个转换器,提取User-AgentResponse Time
  2. 使用replace转换器将日志中的敏感信息(如邮箱)替换为***

附加资源