logstash修改字段内容_logstash原理

logstash修改字段内容_logstash原理logstash数据类型的修改logstash中可以设置字段的类型为integer,float,stringfilter{mutate{convert=>[“request_time”,”float”]#设置request_time的类型为float类型}}注意:mutate除了转化字符值,还支持对数组类型的字段进行转换,即将[“1″,”2”]转换

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

logstash 数据类型的修改
logstash 中可以设置字段的类型为integer,string,float,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 => “‰”  #千分号的输入,使用搜狗中文输入qfh
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
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196944.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 常用的Map集合

    常用的Map集合Map集合Map集合常用方法增加删除判断获取Map集合中TreeSet的应用Map集合中HashSet的应用Map集合常用方法Map集合和Collection集合的区别Map集合是有Key和Value的,Collection集合是只有Value。Collection集合底层也是有Key和Value,只是隐藏起来。1.增加put(Kkey,Vvalue)2.删除…

  • android之Activity.startManagingCursor方法详解

    在使用数据库操作查询数据后,如果是在Activity里面处理,那么很可能就会用到startManagingCursor()方法,在这里讲一下它的作用和使用注意事项.调用这个方法,就是将获得的Cursor对象交与Activity 来管理,这样Cursor对象的生命周期便能与当前的Activity自动同步,省去了自己管理Cursor。看下文档里的注释This method allows

  • navicat premium 15 激活码【2021最新】[通俗易懂]

    (navicat premium 15 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • FAE新手上路_ra上路

    FAE新手上路_ra上路2018年夏天,因为犹豫,最终放弃了一家中意的公司,选择继续留在原公司,这是我到目前为止进入互联网行业做的最错误的决定,网上无数血的教训,同事委婉的劝告,都没改变我跟随新领导的“决心”,另外自己也没有做好换一个新环境的准备,所以就留下来了,换来的是兑现不了的大饼和离职时差点闹开的不堪经历,过去的是是非非我就不作评价了,只是以我的之前的经历告诫各位,一、不要去外包公司。二、提了离职,绝…

    2022年10月28日
  • 数据库建表规则_SQL创建数据表

    数据库建表规则_SQL创建数据表–数据库建表语句的规范小结建表语句的规范:1.字段的设计   A.数据类型尽量用数字类型,数字类型的比字符类型的要快很多。  B.数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的,但是有不能太小,  上次监控系统里面的表mon_tair_stat_detail_2012_1的data_size和use_size定义的是int(15)实际上

  • ssm/php/java/net/python中小学生视频在线网站「建议收藏」

    本系统带文档lw1万字+答辩PPT+查重如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我,有时间看到机会给你发系统设计.1系统体系结构中小学生视频在线网站的结构图-1所示:图-1系统结构登录系统结构图,如图-2所示:图-2登录结构图管理员结构图,如图-3所示。图-3管理员结构图.2开发流程设计系统流程的分析是通过调查系统所涉及问题的识别、可行性、可操作性、系统分析处理能力等具体环节来调节、整理系统的设计方案以确保系统能达到理

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号