logstash的mutate过滤器的使用
logstash的mutate过滤器的使用
- 一、背景
- 二、需求
- 三、实现步骤
- 1、安装 `csv codec` 插件
- 2、准备需要读取的文件数据
- 3、编写 pipeline ,读取和输出数据
- 4、mutate 插件的使用
- 四、mutate的优先级
- 五、参考文档
一、背景
当我们使用logstash
从外部读取到数据后,默认情况下读取到的值都是string
的类型,假设我们这个时候需要修改字段值的类型,如果从string
修改成integer
,或者删除字段、修改字段的名字、给字段一个默认值等操作时,这个时候我们就可以借助 mutate
filter 来实现。
二、需求
1、从文件中读取数据,文件中的数据符合csv
的格式,即默认是以,
分隔。
2、对读取到的字段进行 删除字段、修改字段的值、修改字段的类型、给一个默认值、字段合并等操作。
三、实现步骤
1、安装 csv codec
插件
注意️:
默认情况下,csv codec
插件并没有安装,需要我们自己手动安装一下,执行如下命令bin/logstash-plugin install logstash-codec-csv
# 进入 logstash 的安装目录
cd /Users/huan/soft/elastic-stack/logstash/logstash
# 监测是否安装了 csv codec 插件
bin/logstash-plugin list --verbose
# 安装 csv 插件
bin/logstash-plugin install logstash-codec-csv
2、准备需要读取的文件数据
user_ real_name |
user_ english_name |
age | address | education | strip_blank | language | default_value | create_time |
---|---|---|---|---|---|---|---|---|
张三 | zhangSan | 20 | 湖北省;罗田县 | 学历-本科 | 去首尾空格 | java | 默认值 | 20210512 08:47:03 |
李四 | lisi | 18 | 湖北省;黄冈 | 学历-专科 | 去首 空格 | C | 20210512 03:12:20 |
3、编写 pipeline ,读取和输出数据
input {
file {
id => "mutate-id"
path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/filter-mutate/mutate.csv"]
start_position => "beginning"
sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/filter-mutate/sincedb.db"
codec => csv {
columns => ["user_real_name","user_english_name","age","address","education","strip_blank","language","default_value","create_time"]
charset => "UTF-8"
separator => ","
skip_empty_columns => false
convert => {
"age" => "integer"
}
}
}
}
output {
stdout {
codec => rubydebug {
}
}
}
csv codec
插件解释- columns :定义一组解析后的csv的列名,也是后期的字段名
- charset:字符编码
- separator:定义读取到的一行数据,以什么作为分隔,csv文件一般是以,或tab等进行分隔,默认是逗号
- skip_empty_columns:如果值为空,是否跳过空列。
- true:跳过
- false: 不跳过
- convert:数据类型转换,默认读取到的值的类型都是
string
,此处将age
字段的值的数据类型转换成了integer
4、mutate 插件的使用
前置条件:
1、如无特殊说明,测试数据的数据为 实现步骤>准备需要读取的文件数据
中的数据
注意事项:
1、update
和replace
都是更新字段的值,但是如果update
更新的字段的值不存在,那么没有效果,但是replace
会新增加这个字段。
2、copy
字段的目标值,如果存在则覆盖值,否则新增加一个字段。
1、coerce 给字段设置默认值
如果某个字段已经存在,并且它的值是null,那么我们可以使用coerce来为它设置默认值
1、配置文件的写法
filter {
mutate {
coerce => {
"default_value" => "该字段没有值,设置一个默认值"
}
}
}
2、执行结果
2、rename 给字段重命名
1、配置文件的写法
filter {
mutate {
rename => {
"user_real_name" => "[user][real_name]"
"user_english_name" => "[user][english_name]"
"age" => "年龄"
}
}
}
2、执行结果
3、update 更新字段的值
1、配置文件的写法
filter {
mutate {
# 1、更新字段的值
update => {
"user_address" => "用户的地址是: %{address}"
}
}
}
2、执行结果
3、解释
update
进行更新值,更新的字段必须要存在,否则没有任何效果。
4、replace 更新字段的值
1、配置文件的写法
filter {
mutate {
# 1、更新字段的值
replace => {
"user_address" => "用户的地址是: %{address}"
}
}
}
2、执行结果
5、convert 数据类型转换
1、可以转换的数据类型
integer、integer_eu、float、float_eu、string、boolean
2、配置文件的写法
filter {
mutate {
# 1、数据类型转换
convert => {
"age" => "string"
}
}
}
3、执行结果
6、gsub 对字段内容进行替换
1、配置文件的写法
filter {
mutate {
# 1、替换字段的内容, 第二个参数可以写正则表达式 ,替换的字段 只能是 string 类型或者 string类型的数组
gsub => [
"address", ";", "--"
]
}
}
2、执行结果
7、uppercase、capitalize、lowercase 大写、首字母大写、小写
1、配置文件的写法
filter {
mutate {
# 1.1 大写
uppercase => ["language"]
# 2.2 小写
# lowercase => ["user_english_name"]
# 3.3 首字母大写
capitalize => ["user_english_name"]
}
}
需要注意优先级。
2、执行结果
8、strip 去除首尾空格
1、配置文件的写法
filter {
mutate {
# 去除首尾空格
strip => ["strip_blank"]
}
}
2、执行结果
9、remove 移除字段
1、配置文件的写法
filter {
mutate {
# 移除字段 ,如果 Event 中 username 的值是 zhangsan ,那么会移除字段名是 foo_zhangsan 这个字段。
remove_field => ["user_real_name","foo_%{username}"]
}
}
2、执行结果
10、split 切割字段
1、配置文件的写法
filter {
mutate {
# 1、切割字段
split => {
"address" => ";"
}
}
}
2、执行结果
11、 join 连接字段
1、配置文件的写法
filter {
mutate {
# 1、切割字段
split => {
"address" => ";"
}
# 2、连接字段
join => {
"address" => "***"
}
}
}
先使用 split 切割成数组,然后使用 join 连接
2、执行结果
12、merge 字段合并
1、可以合并的情况
`array` + `string` will work
`string` + `string` will result in an 2 entry array in `dest_field`
`array` and `hash` will not work
2、配置文件的写法
filter {
mutate {
# 1、字段合并
merge => {
"user_real_name" => "user_english_name"
}
}
}
3、执行结果
13、copy 复制字段
1、配置文件的写法
filter {
mutate {
# 1、字段复制, 如果 user_name 这个字段已经存在了,那么此字段的值会被覆盖,否则新增一个字段的值
copy => {
"user_real_name" => "user_name"
}
}
}
2、执行结果
四、mutate的优先级
1、mutate 在配置文件中的执行顺序
coerce、rename、update、replace、convert、gsub、uppercase、capitalize、lowercase、strip、remove、split、join merge、copy
corece
最先执行,copy
最后执行。
2、多个mutate块的优先级
filter {
# mutate块1 会比 下方的 mutate2 先执行
mutate {}
# mutate块2
mutate {}
}
注意️:
假设 我们需要字段 age
先复制copy
一下,然后在转换一下数据类型convert
,那么可以使用上方的 多个 mutate 块
来执行。
1、配置文件的写法
filter {
# 测试多 mutate 块的优先级
mutate {
copy => {
"age" => "new_age"
}
}
mutate {
convert => {
"age" => "string"
}
}
}
将 convert 和 copy 放置在一个 mutate 块中会发现结果不一样。
2、执行结果
五、参考文档
1、https://www.elastic.co/guide/en/logstash/7.12/working-with-plugins.html
2、https://www.elastic.co/guide/en/logstash/current/plugins-codecs-csv.html
3、https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html
logstash的mutate过滤器的使用的更多相关文章
- Elastic Stack之Logstash进阶
Elastic Stack之Logstash进阶 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用GeoLite2和logstash 过滤插件的geoip案例 1>. ...
- Logstash 算术运算操作
需求:input为json,output为ES,需使用filter提取json中的某个字段,并执行加法.加法.乘法等算法操作 思路:mutate过滤器+ruby过滤器实现 避坑:根据ES及Logsta ...
- Logstash的filter插件介绍
一 官网说明 过滤器插件对事件执行中介处理.通常根据事件的特征有条件地应用过滤器. 以下过滤器插件在下面可用. Plugin Description Github repository aggrega ...
- ELK学习实验012:Logstash的安装和使用
一 logstash安装 1.1下载包 [root@node1 ~]# cd /usr/local/src/ [root@node1 src]# wget https://artifacts.elas ...
- logstash multiline
filter { multiline { pattern => "^\s+%{TIMESTAMP_ISO8601}" negate=>true what=>&qu ...
- ElastAlert监控日志告警Web攻击行为
由于公司需要监控web攻击行为,而因某些原因搭不了waf,才不得不用ElastAlert进行告警,此为前提. 一.ELK安装 Elasticsearch 是一个分布式.可扩展.实时的搜索与数据分析引擎 ...
- filter-mutate过滤插件
之前的nginx日志使用grok匹配,但是后来发现nginx的日志中每个值之间都使用了分隔符"|",这下就可以使用mutate来分隔出每个字段的含义,同时还减少了运算. 描述 mu ...
- AWS上的EFK环境部署
1.准备工作及组件 本章使用自建服务以及aws服务来配置使用. 服务 版本 作用 filebeat 6.7.2→ 7.3.1 节点日志收集,只完成少量比如多行合并工作 logstash 6.4.2→7 ...
- 【7.1.1】ELK日志系统单体搭建
ELK是什么? 一般来说,为了提高服务可用性,服务器需要部署多个实例,每个实例都是负载均衡转发的后的,如果还用老办法登录服务器去tail -f xxx.log,有很大可能错误日志未出现在当前服务器中, ...
随机推荐
- pyRevit开发:如何创建轴网
必看部分: Document获取: 必看文章 如何添加基本项目引用 基础部分: 创建轴网 基本思路: 首先添加引用 获取当前项目文档 创建轴网定位线 创建轴网 设置轴网名称 实现代码: import ...
- CSS002. 字体穿透蒙层(用img设置字体的color)
之前在逛Apple Store时看到了下面的UI: 交互图标非常圆滑上手也很舒服,虽然背景底色本就是白底,但是只依赖css能不能使 "+" 穿透背景看到底色 ? 大致思路如下: ...
- Swagger-初见
目录 Swagger简介 SpringBoot集成Swagger 配置Swagger 配置扫描接口 配置Swagger开关 配置API分组 实体配置 常用注解 Swagger简介 前后端分离 前端 - ...
- linux下制作img文件
一.简介 制作img文件可以使用linux系统中的dd命令制作,Linux dd 命令用于读取.转换并输出数据.dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件.设备或标准输 ...
- [初学Python]编写一个最简单判断SQL注入的检测工具
0x01 背景 15年那会,几乎可以说是渗透最火的一年,各种教程各种文章,本人也是有幸在那几年学到了一些皮毛,中间因学业问题将其荒废至今.当初最早学的便是,and 1=1 和 and 1=2 这最简单 ...
- Lua io.lines()
前言# 从文章的题目可以看出,今天的内容是和文件的行相关的,其实这个函可以看成是一个文件读取函数,只不过文件读取的形式固定了,就是只能一行一行的读,接下来我们就一起来看看这个函数究竟要怎么使用. 内容 ...
- 使用Java api对HBase 2.4.5进行增删改查
1.运行hbase 2.新建maven项目 2.将hbase-site.xml放在项目的resources文件夹下 3.修改pom.xml文件,引入hbase相关资源 <repositories ...
- 迷你商城后台管理系统---------stage3项目部署测试汇总
系统测试 在项目部署到云服务器之前,已通过本机启动springboot程序,访问localhost:8080,输入登陆的账户等一系列操作测试:功能测试.健壮性测试,系统已满足用户规定的需求. 系统部署 ...
- shell脚本在CentOS7自动更包
手动更包有些繁琐,就想着用脚本自动更包,后来试了下,最后成功啦! 以下是根据实际项目编写的: 操作环境:centos7.0 tomcat版本:7.0.78 以下为项目存放目录如下: updatefil ...
- P6800-[模板]Chirp Z-Transform【NTT】
正题 题目链接:https://www.luogu.com.cn/problem/P6800 题目大意 给出一个\(n\)此多项式\(P\),对于\(k\in[0,m-1]\)所有的求\(P(c^k) ...