
1 Grok 正则捕获
1.1 正则表达式语法
可以在 grok 里写标准的正则:
\s+(?<request_time>\d+(?:\.\d+)?)\s+
复制
给配置文件添加第一个过滤器区段配置
配置要添加在输入和输出区段之间:
运行 logstash 进程然后输入 "begin 123.456 end":
1.2 Grok 表达式语法
示例:
第一行,用普通的正则表达式来定义一个 grok 表达式
第二行,通过打印赋值格式,用前面定义好的 grok 表达式来定义另一个 grok 表达式
USERNAME [a-zA-Z0-9._-]+
USER %{USERNAME}复制
grok 表达式的打印复制格式的完整语法是:
%{PATTERN_NAME:capture_name:data_type}
复制
改进配置:
重新运行进程然后可以得到如下结果:
最佳实践
把所有的 grok 表达式统一写入到一个地方,然后用 filter/grok 的 patterns_dir 选项来指明
用 remove_field 参数来删除掉 message 字段,或者用 overwrite 参数来重写默认的message 字段,只保留最重要的部分
重写参数的示例如下:
2 时间处理(Date)
filters/date 插件可以用来转换日志记录中的时间字符串,变成 LogStash::Timestamp 对象,然后转存到 @timestamp 字段里
配置示例
ISO8601
UNIX
UNIX_MS
TAI64N
Joda-Time 库
filters/date 插件支持五种时间格式:
时间格式
Joda 时间格式的配置示例:
注意:时区偏移量只需要用一个字母 Z 即可
3 数据修改(Mutate)
filters/mutate 插件提供了丰富的基础类型数据处理能力
包括类型转换,字符串处理和字段处理等
类型转换
可以设置的转换类型包括:"integer","float" 和 "string"。示例如下:
3.1 字符串处理
gsub
仅对字符串类型字段有效
gsub => ["urlparams", "[\\?#]", "_"]
复制
split
3.2 字符串处理
split
随意输入一串以|分割的字符,比如 "123|321|adfd|dfjld*=123",可以看到如下输出:
join
仅对数组类型字段有效
filter 区段之内,是顺序执行的。所以我们最后看到的输出结果是:
merge
合并两个数组或者哈希字段
3.3 字段处理
rename
重命名某个字段,如果目的字段已经存在,会被覆盖掉:
update
更新某个字段的内容
如果字段不存在,不会新建
replace
作用和 update 类似,但是当字段不存在的时候,它会起到 add_field 参数一样的效果,自动添加新的字段
4 数值统计(Metrics)
filters/metrics 插件是使用 Ruby 的 Metriks 模块来实现在内存里实时的计数和采样分析
该模块支持两个类型的数值分析:
meter
timer
Meter 示例(速率阈值检测):比如如果最近一分钟 504 请求的个数超过 100 个就报警:
Timer 示例(box and whisker 异常检测)
关注公众号:领取精彩视频课程&海量免费语音课程