logstash 数据类型的修改
logstash 中可以设置字段的类型为integer,float,string,boolean
filter{
mutate{
convert => ["request_time","float"]  #设置request_time的类型为float类型
}
}

注意:mutate 除了转化字符值,还支持对数组类型的字段进行转换,即将["1","2"]转换成[1,2],但是不支持哈希字段做类似处理。
input {
file {
path => [
"/home/raw_data/8_31/*.csv"
]
start_position => "beginning" # 从什么位置读取
sincedb_path => "/home/es/sincedb/apk"  #sincedb存放路径
type => "apk"   #设置type
tags => ["hgw", "gather"]
}
}

filter
{
if [type] == "apk"
{
csv
{
columns => ["Type","ProbeOUI","ProbeVersion","MAC",
"UploadTime","IptvAccount","STBId","OUI","ProductClass",
"SoftwareVersion","HardwareVersion","IpAddress","TeleOUI",
"TeleProductClass","TeleResolution","LogUploadInterval",
"ReportSerialNumber","WorkingTime","CPURate","MEMRate",
"FrameLR","FrameDelay","FrameJitter","VideoStreamingRate",
"RTPLossRate","RTPThroughPut","MdiMLR","MdiType","MdiDF","MAXMdiDF",
"Jitter","MAXJitter","ResponseDelay","ChannelSwitchDelay","StreamBreak",
"EPGDelay","ResourceURL","EPGVisitNum","EPGSuccessNum",
"KaNum","KaDelay"]
separator => "|"
quote_char => "‰"
remove_field => ["ProbeVersion",
"UploadTime","IptvAccount","STBId","ProductClass",
"SoftwareVersion","HardwareVersion","IpAddress","TeleOUI",
"TeleProductClass","TeleResolution","LogUploadInterval",
"ReportSerialNumber","WorkingTime","CPURate","MEMRate",
"FrameLR","FrameDelay","FrameJitter","VideoStreamingRate",
"RTPThroughPut","MdiMLR","MdiType","MdiDF","MAXMdiDF",
"Jitter","MAXJitter","ResponseDelay","ChannelSwitchDelay","StreamBreak",
"EPGDelay","ResourceURL","EPGVisitNum","EPGSuccessNum",
"KaNum","KaDelay"]   #删除不需要的字段
}
mutate {
        convert => ["RTPLossRate", "integer"] #修改字段类型
    }
if ([Type]!="1" or [ProbeOUI]!="YUCHUANG"){
drop{}
}
}
}

output{
if [type] == "apk"
{
elasticsearch
{
hosts => ["*:9200"]
index => "ana-%{type}"
document_type => "%{type}"
flush_size => 8000
idle_flush_time => 10
sniffing => true
template_overwrite => true
codec => "json"
}
}
}

filters/mutate 插件是 Logstash 另一个重要插件。它提供了丰富的基础类型数据处理能力。包括类型转换,字符串处理和字段处理等。

类型转换

类型转换是 filters/mutate 插件最初诞生时的唯一功能。其应用场景在之前 Codec/JSON 小节已经提到。

可以设置的转换类型包括:"integer","float" 和 "string"。示例如下:

filter {
    mutate {
        convert => ["request_time", "float"]
    }
}
注意:mutate 除了转换简单的字符值,还支持对数组类型的字段进行转换,即将 ["1","2"] 转换成 [1,2]。但不支持对哈希类型的字段做类似处理。有这方面需求的可以采用稍后讲述的 filters/ruby 插件完成。

字符串处理

gsub
仅对字符串类型字段有效

gsub => ["urlparams", "[\\?#]", "_"]
split
filter {
    mutate {
        split => ["message", "|"]
    }
}
随意输入一串以|分割的字符,比如 "123|321|adfd|dfjld*=123",可以看到如下输出:

{
    "message" => [
        [0] "123",
        [1] "321",
        [2] "adfd",
        [3] "dfjld*=123"
    ],
    "@version" => "1",
    "@timestamp" => "2014-08-20T15:58:23.120Z",
    "host" => "raochenlindeMacBook-Air.local"
}
join
仅对数组类型字段有效

我们在之前已经用 split 割切的基础再 join 回去。配置改成:

filter {
    mutate {
        split => ["message", "|"]
    }
    mutate {
        join => ["message", ","]
    }
}
filter 区段之内,是顺序执行的。所以我们最后看到的输出结果是:

{
    "message" => "123,321,adfd,dfjld*=123",
    "@version" => "1",
    "@timestamp" => "2014-08-20T16:01:33.972Z",
    "host" => "raochenlindeMacBook-Air.local"
}
merge
合并两个数组或者哈希字段。依然在之前 split 的基础上继续:

filter {
    mutate {
        split => ["message", "|"]
    }
    mutate {
        merge => ["message", "message"]
    }
}
我们会看到输出:

{
       "message" => [
        [0] "123",
        [1] "321",
        [2] "adfd",
        [3] "dfjld*=123",
        [4] "123",
        [5] "321",
        [6] "adfd",
        [7] "dfjld*=123"
    ],
      "@version" => "1",
    "@timestamp" => "2014-08-20T16:05:53.711Z",
          "host" => "raochenlindeMacBook-Air.local"
}
如果 src 字段是字符串,会自动先转换成一个单元素的数组再合并。把上一示例中的来源字段改成 "host":

filter {
    mutate {
        split => ["message", "|"]
    }
    mutate {
        merge => ["message", "host"]
    }
}
结果变成:

{
       "message" => [
        [0] "123",
        [1] "321",
        [2] "adfd",
        [3] "dfjld*=123",
        [4] "raochenlindeMacBook-Air.local"
    ],
      "@version" => "1",
    "@timestamp" => "2014-08-20T16:07:53.533Z",
          "host" => [
        [0] "raochenlindeMacBook-Air.local"
    ]
}
看,目的字段 "message" 确实多了一个元素,但是来源字段 "host" 本身也由字符串类型变成数组类型了!

下面你猜,如果来源位置写的不是字段名而是直接一个字符串,会产生什么奇特的效果呢?

strip
lowercase
uppercase
字段处理

rename
重命名某个字段,如果目的字段已经存在,会被覆盖掉:

filter {
    mutate {
        rename => ["syslog_host", "host"]
    }
}
update
更新某个字段的内容。如果字段不存在,不会新建。

replace
作用和 update 类似,但是当字段不存在的时候,它会起到 add_field 参数一样的效果,自动添加新的字段。

执行次序

需要注意的是,filter/mutate 内部是有执行次序的。其次序如下:

rename(event) if @rename
    update(event) if @update
    replace(event) if @replace
    convert(event) if @convert
    gsub(event) if @gsub
    uppercase(event) if @uppercase
    lowercase(event) if @lowercase
    strip(event) if @strip
    remove(event) if @remove
    split(event) if @split
    join(event) if @join
    merge(event) if @merge

filter_matched(event)
而 filter_matched 这个 filters/base.rb 里继承的方法也是有次序的。

@add_field.each do |field, value|
  end
  @remove_field.each do |field|
  end
  @add_tag.each do |tag|
  end
  @remove_tag.each do |tag|
  end

logstash 数据类型的修改相关推荐

  1. mysql+yes数据类型,怎样修改mysql列的数据类型?

    修改字段(列)数据类型 修改字段的数据类型就是把字段的数据类型转换成另一种数据类型.在 MySQL 中修改字段数据类型的语法规则如下: ALTER TABLE MODIFY 其中: 表名:指要修改数据 ...

  2. oracle 测试数据类型,oracle修改表字段的数据类型测试

    oracle修改表字段的数据类型的测试 思路 将要更改类型的字段名改名新字段以备份: 根据需求,添加一个与要更改类型的字段名同名的字段(原字段已经改名), 然后更新数据, 最后删除改名备份的字段 脚本 ...

  3. MATLAB 基础知识 数据类型 表 修改单位、说明和表变量名称

    本文演示了如何访问和修改变量单位.说明和名称这几种表属性.您也可以使用变量编辑器来编辑这些属性值. 加载样本数据 加载样本患者数据并创建一个表. load patients BloodPressure ...

  4. mysql修改数据类型_MySQL修改字段类型

    mysql> alter table 表名 modify column 字段名 类型.数据库中address表 city字段是varchar(30),修改类型可以用(谨慎修改类型,可能会导致原有 ...

  5. oracle修改某个数据类型,Oracle 修改某个字段的数据类型三种方式

    1.将该列设置为null,再修改其类型(这样会丢失数据) 2.最简单的方法: 假设你的表名为 tab_target create table test  as select * from tab_ta ...

  6. php+oracle新增数据类型,Oracle 修改某个字段的数据类型三种方式

    1.将该列设置为null,再修改其类型(这样会丢失数据) 2.最简单的方法: 假设你的表名为 tab_target create table test as select 1.将该列设置为null,再 ...

  7. SQL Server修改数据类型(修改字段的长度)

    ALTER TABLE Table ALTER COLUMN column VARCHAR(MAX) 使用时把下面的两个字段根据需求更改 Table :表名 column :字段名

  8. 修改mysql 视图字段类型_MySQL中的数据类型,列选项,视图

    列的数据类型 整型 类型 取值范围 tinyint -128 - 127 smallint -32768 - 32767(几万) mediumint -8388608 - 8388607(几百万) i ...

  9. 大数据——Logstash(日志收集)

    Logstash(日志收集) ELK Stack Logstash简介 安装Logstash Logstash如何工作 Logstash配置语法(一) Logstash配置语法(二) 输入插件 编解码 ...

最新文章

  1. 通过JSR250规范 提供的注解@PostConstruct 和@ProDestory标注的方法
  2. 短文件名漏洞如何修复_短文件名漏洞修复
  3. [Windows Phone 7]开发分享图片的插件(2)
  4. vuex其实超简单,只需3步
  5. 财务自由的味道!台积电股价连创新高,经营团队15人持股价值过亿
  6. HTML DOM教程 5-HTML DOM节点访问
  7. 使用DotNet以来一直都有出现这样的问题
  8. python 读取npy文件
  9. 缠中说禅形态挖掘之五笔形态
  10. 易基因 | 国自然选题——易基因RNA甲基化测序技术(m6A m5C)正热门
  11. 学计算机的管理层,毕业很吃香、高薪岗位多的4个专业,计算机科学上榜,你的专业呢...
  12. 完美世界前三季营收57亿同比降15% 净利14.4亿同比增80%
  13. IE浏览器设置默认显示版本
  14. 抖音的广告位在哪?抖音信息流广告样式?
  15. B860AV3.1-M2_刷机固件
  16. 聋校计算机教材教法培训Ppt,聋校语文教材教法学习心得
  17. xp显示rpc服务器不可用,XP系统如何解决RPC服务器不可用?
  18. Shiziku 开启adb权限 之 三星S10+ 主板机
  19. 基于stm32单片机随机数自动摇号抽奖系统
  20. 音乐标签修改 android,音乐标签修改(Star Music Tag Editor)

热门文章

  1. 【沙发管家】电视猫3.1.6新版体验:资源更全面,院线大片看到爽!
  2. 技术分享| 浅谈IM 产品中的“缩略图”功能
  3. 从0加到5000微信好友的实操方法
  4. 全球最大油田、金矿、煤矿、铁矿、铜矿,究竟哪个最值钱?
  5. opengl立体贴图与天空盒
  6. 企查查滑动验证码实现自动登入--最新99.99%成功
  7. 价值8800元SEO自动化养权重流量站课程分享(升级版)!
  8. 字节TikTok暑期实习一面二面三面面经(以OC)
  9. 2018.09.25【洛谷P4472】【BJWC2018】八维(字符串哈希)(倍增)
  10. 《让身体和微生物成为朋友》读书笔记