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访问日志的status
和path
字段提取为标签,并重写输出。
配置
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转换器是灵活处理日志数据的关键工具,支持解析、过滤和丰富日志内容。通过组合不同的阶段,你可以实现复杂的日志处理逻辑。
练习
- 尝试为Apache日志配置一个转换器,提取
User-Agent
和Response Time
。 - 使用
replace
转换器将日志中的敏感信息(如邮箱)替换为***
。