预备知识
telegraf的inputs.logparser吸取了logstash的grok精髓
语法
1
%{<capture_syntax>[:<semantic_name>][:<modifier>]}
- 第一个字段: pattern,先查看已有的pattern是否能满足,否则采用自定义pattern
-
第二个字段: 捕获的字段名
-
第三个字段:修饰符
telegraf常用的修饰符如下
类型 | 说明 |
---|---|
string | 字符串,默认类型 |
int | 整型 |
float | 浮点型 |
duration | 持续时间,可以将ms转换为ns |
tag | 该字段标记为tag类型 |
drop | 不记录该字段 |
例如,采集http响应码,命名为response_code,并将其存储为influxdb tag类型
1
%{NUMBER:response_code:tag}
实例
日志实例
1
2
10.1.2.3 - [30/Jun/2020:10:50:52 +0800] "GET /api/v2/stat?time=15123 HTTP/1.1" 200 176157 "-" "Apache-HttpClient/4.5.2 (Java/1.7.0_80)" 0.106
调试工具
注:只支持grok语法,不支持telegraf封装的pattern
telegraf配置
1
2
3
4
5
6
7
[inputs.logparser.grok]
patterns = ["%{ACCESS_LOG}"]
custom_patterns = '''ACCESS_LOG %{IP:client_ip} %{NOTSPACE:ident} \[%{HTTPDATE:ts:ts-httpd}\] "(?:%{WORD:verb:tag} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version:float})?|%{DATA})" %{NUMBER:resp_code:tag} (?:%{NUMBER:resp_bytes:int}|-) "%{DATA:referrer}" "%{DATA:agent}" %{NUMBER:request_time:float}'''
measurement = "nginx_web_log"
timezone = "Asia/Shanghai"