`

Logstash详解之——filter模块

阅读更多

Logstash三个组件的第二个组件,也是真个Logstash工具中最复杂,最蛋疼的一个组件,当然,也是最有作用的一个组件。

1、grok插件 grok插件有非常强大的功能,他能匹配一切数据,但是他的性能和对资源的损耗同样让人诟病。

 

filter{
    
    grok{
        #只说一个match属性,他的作用是从message 字段中吧时间给抠出来,并且赋值给另个一个字段logdate。
        #首先要说明的是,所有文本数据都是在Logstash的message字段中中的,我们要在过滤器里操作的数据就是message。
        #第二点需要明白的是grok插件是一个十分耗费资源的插件,这也是为什么我只打算讲解一个TIMESTAMP_ISO8601正则表达式的原因。
        #第三点需要明白的是,grok有超级多的预装正则表达式,这里是没办法完全搞定的,也许你可以从这个大神的文章中找到你需要的表达式
        #http://blog.csdn.net/liukuan73/article/details/52318243
        #但是,我还是不建议使用它,因为他完全可以用别的插件代替,当然,对于时间这个属性来说,grok是非常便利的。
        match => ['message','%{TIMESTAMP_ISO8601:logdate}']
    }
}

 2、mutate插件 mutate插件是用来处理数据的格式的,你可以选择处理你的时间格式,或者你想把一个字符串变为数字类型(当然需要合法),同样的你也可以返回去做。可以设置的转换类型 包括: "integer", "float" 和 "string"。

filter {
    mutate {
        #接收一个数组,其形式为value,type
        #需要注意的是,你的数据在转型的时候要合法,你总是不能把一个‘abc’的字符串转换为123的。
        convert => [
                    #把request_time的值装换为浮点型
                    "request_time", "float",
                    #costTime的值转换为整型
                    "costTime", "integer"
                    ]
    }
}

 3、ruby插件 官方对ruby插件的介绍是——无所不能。ruby插件可以使用任何的ruby语法,无论是逻辑判断,条件语句,循环语句,还是对字符串的操作,对EVENT对象的操作,都是极其得心应手的。

filter {
    ruby {
        #ruby插件有两个属性,一个init 还有一个code
        #init属性是用来初始化字段的,你可以在这里初始化一个字段,无论是什么类型的都可以,这个字段只是在ruby{}作用域里面生效。
        #这里我初始化了一个名为field的hash字段。可以在下面的coed属性里面使用。
        init => [field={}]
        #code属性使用两个冒号进行标识,你的所有ruby语法都可以在里面进行。
        #下面我对一段数据进行处理。
        #首先,我需要在把message字段里面的值拿到,并且对值进行分割按照“|”。这样分割出来的是一个数组(ruby的字符创处理)。
        #第二步,我需要循环数组判断其值是否是我需要的数据(ruby条件语法、循环结构)
        #第三步,我需要吧我需要的字段添加进入EVEVT对象。
        #第四步,选取一个值,进行MD5加密
        #什么是event对象?event就是Logstash对象,你可以在ruby插件的code属性里面操作他,可以添加属性字段,可以删除,可以修改,同样可以进行树脂运算。
        #进行MD5加密的时候,需要引入对应的包。
        #最后把冗余的message字段去除。
        code => "
            array=event。get('message').split('|')
            array.each do |value|
                if value.include? 'MD5_VALUE'
                    then 
                        require 'digest/md5'
                        md5=Digest::MD5.hexdigest(value)
                        event.set('md5',md5)
                end
                if value.include? 'DEFAULT_VALUE'
                    then
                        event.set('value',value)
                end
            end
             remove_field=>"message"
        "
    }
}

 4、date插件 这里需要合前面的grok插件剥离出来的值logdate配合使用(当然也许你不是用grok去做)。

filter{
    date{
        #还记得grok插件剥离出来的字段logdate吗?就是在这里使用的。你可以格式化为你需要的样子,至于是什么样子。就得你自己取看啦。
        #为什什么要格式化?
        #对于老数据来说这非常重要,应为你需要修改@timestamp字段的值,如果你不修改,你保存进ES的时间就是系统但前时间(+0时区)
        #单你格式化以后,就可以通过target属性来指定到@timestamp,这样你的数据的时间就会是准确的,这对以你以后图表的建设来说万分重要。
        #最后,logdate这个字段,已经没有任何价值了,所以我们顺手可以吧这个字段从event对象中移除。
        match=>["logdate","dd/MMM/yyyy:HH:mm:ss Z"]
        target=>"@timestamp"
        remove_field => 'logdate'
        #还需要强调的是,@timestamp字段的值,你是不可以随便修改的,最好就按照你数据的某一个时间点来使用,
        #如果是日志,就使用grok把时间抠出来,如果是数据库,就指定一个字段的值来格式化,比如说:"timeat", "%{TIMESTAMP_ISO8601:logdate}"
        #timeat就是我的数据库的一个关于时间的字段。
        #如果没有这个字段的话,千万不要试着去修改它。

    }
}

 5、json插件,这个插件也是极其好用的一个插件,现在我们的日志信息,基本都是由固定的样式组成的,我们可以使用json插件对其进行解析,并且得到每个字段对应的值。

filter{
    #source指定你的哪个值是json数据。
    json {
         source => "value"
    }
    #注意:如果你的json数据是多层的,那么解析出来的数据在多层结里是一个数组,你可以使用ruby语法对他进行操作,最终把所有数据都装换为平级的。

}

 json插件还是需要注意一下使用的方法的,下图就是多层结构的弊端:
image
对应的解决方案为:

ruby{
                code=>"
                  kv=event.get('content')[0]
                  kv.each do |k,v|
                  event.set(k,v)
                  end"
                  remove_field => ['content','value','receiptNo','channelId','status']
            }

 Logstash filter组件的插件基本介绍到这里了,这里需要明白的是:
add_field、remove_field、add_tag、remove_tag 是所有 Logstash 插件都有。相关使用反法看字段名就可以知道。不如你也试试吧。。。。

 

分享到:
评论

相关推荐

    logstash-filter-geoip-cn.zip

    在Logstash中,filter模块负责对输入的数据进行各种转换和处理,以满足特定的需求。"logstash-filter-geoip-cn.zip" 文件显然是针对Logstash设计的一个过滤器插件,目的是将IP地址解析为中文的地理位置信息。 GeoIP...

    logstash-filter-grok-4.3.0.tar.gz

    在 Logstash 中,filter 阶段扮演着关键角色,它允许用户对输入的数据进行转换和解析,使其更适合进一步的分析。`logstash-filter-grok` 插件是其中一种过滤器,它特别擅长解析结构化不完整的日志数据。 标题中的 ...

    logstash-filter-multiline-3.0.2.gem

    logstash-filter-multiline gem安装包 ,执行./logstash/bin/logstash-plugin install ./logstash/vendor/bundle/jruby/1.9/cache/logstash-filter-multiline-3.0.2.gem

    logstash-filter-translate-3.0.4.zip

    # 1,/usr/share/logstash/bin/logstash-plugin install logstash-filter-translate # 2,/usr/share/logstash/bin/logstash-plugin install file:///elk/logstash-filter-translate-3.0.4.zip

    logstash的filter日期插件

    logstash的filter日期插件,解压,在logstash的Gemfile中添加一行(以logstash-output-webhdfs为例): [ec2-user@ip-xxx-xxx-xxx-xxx logstash-2.3.0]$ vim Gemfile ...... gem "logstash-output-webhdfs", :path ...

    logstash-filter-date-3.1.8

    安装方式:bin/logstash-plugin install --no-verify logstash-filter-grok-3.4.4.gem

    logstash-filter-grok-4.0.4.zip

    Logstash 是一个强大的开源数据收集、处理和转发引擎,它属于 ELK (Elasticsearch, Logstash, Kibana) 堆栈的一部分,广泛应用于日志管理和数据分析领域。Grok 是 Logstash 中的一个核心过滤器插件,专门用于解析和...

    [Logstash]使用详解1

    Logstash的工作流程采用管道机制,分为三个主要阶段:输入(input)、处理(filter,非必需)和输出(output)。每个阶段都可以包含多个插件,例如,`file` 插件用于从文件中读取日志,`elasticsearch` 插件用于将处理后的...

    logstash-template模板:logstash.json

    - 使用`filter`阶段的插件(如`grok`、`json`等)可以解析不同格式的数据,使其符合模板要求。 5. **最佳实践**: - **灵活设计**:模板应具有一定的灵活性,以适应数据源的变化。 - **版本控制**:对模板进行...

    logstash-filter-grok-3.4.3

    logstash的filter插件,通过正则表达式拆解日志。安装方式:bin/logstash-plugin install --no-verify logstash-filter-grok-3.4.4.gem

    logstash-input-mongodb-0.4.1[logstash-6.5.4]

    《Logstash-input-mongodb插件详解与应用》 在大数据处理和日志分析领域,Logstash以其强大的数据收集、处理和转发能力而被广泛应用。在本文中,我们将深入探讨一个关键组件——logstash-input-mongodb插件,以及...

    logstash6.3.0

    Logstash 的强大之处在于其模块化的架构,允许用户自由组合不同的输入、过滤和输出插件以满足特定需求。例如,可以使用 syslog 输入插件来收集服务器日志,通过 grok 过滤器解析日志格式,然后利用 Elasticsearch ...

    logstash-filter-sequence:日志过滤器序列

    bin/plugin install /opt/logstash-filter-sequence/logstash-filter-sequence-0.1.1.gem 这个插件的代码最初来自这里: : 在 Logstash 中使用: 在您可能拥有的任何多行过滤器之后使用: sequence{} 从弹性...

    logstash-filter-multiline-3.0.4.gem

    最新的logstash-filter-multiline-3.0.4.gem,好用请打赏,谢谢!

    Logstash ruby 插件 demo

    Logstash 分为输入(Input)、过滤(Filter)和输出(Output)三大部分,每部分都有许多预置的插件。Ruby 插件机制使得用户可以为这三个阶段创建自定义插件,满足特定的数据处理需求。 Ruby 插件的开发主要涉及以下...

    logstash日志抓取搭建

    Logstash的工作流程通常分为三个阶段:输入(Input)、过滤(Filter)和输出(Output)。 **2. 安装Logstash** 首先,你需要在服务器上安装Logstash。这通常涉及到下载Logstash的最新版本,然后解压并配置环境变量...

    logstash-filter-multiline

    Logstash插件 这是的插件。 它是完全免费和完全开源的。 许可证是 Apache 2.0,这意味着您可以随意以任何方式使用它。 文档 Logstash 提供了基础设施来自动为这个插件生成文档。 我们使用asciidoc格式编写文档,...

    logstash-filter-dedupe:Redis的重复数据删除过滤器

    注意:正在进行中,大多数def暂时不起... 接下来,您需要使用/opt/logstash/bin/plugin -install logstash-filter-dedupe 最后,将过滤器添加到您的logstash配置中: filter { dedupe { keys => ["keys", "to", "h

    logstash-output-jdbc.zip

    logstash离线安装插件步骤: 在一个联网的虚拟机上下载好插件 ./logstash-plugin install logstash-input-jdbc 查看插件是否安装 ./logstash-plugin list 打包下载好的插件(可能会有错误;多试几次) ./...

    最新版windows logstash-7.17.6-windows-x86_64.zip

    Logstash 是一个强大的开源数据收集引擎,它属于 Elastic Stack 的一部分,用于实时处理、转换和存储日志和其他类型的数据。这个最新的版本,logstash-7.17.6,是专为 Windows 操作系统设计的,支持 x86_64(64位)...

Global site tag (gtag.js) - Google Analytics