我的日常

登录/注册
您现在的位置:论坛 资料库 开源社区 > logstash简单介绍
总共48087条微博

动态微博

查看: 2620|回复: 1

logstash简单介绍

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2016-01-23 13:22:18 |只看该作者 |正序浏览
    简介

    Logstash是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。怎么样听起来挺厉害的吧?
    在一个典型的使用场景下(ELK):用Elasticsearch作为后台数据的存储,kibana用来前端的报表展示。Logstash在其过程中担任搬运工的角色,它为数据存储,报表查询和日志解析创建了一个功能强大的管道链。Logstash提供了多种多样的 input,filters,codecs和output组件,让使用者轻松实现强大的功能。好了让我们开始吧
    依赖条件:java

    Logstash运行仅仅依赖java运行环境(jre)。各位可以在命令行下运行java -version命令 显示类似如下结果:
    java -version
    java version "1.7.0_45"
    Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
    Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)组合使用:

    LogStash使用一个开源Key/Value数据库Redis,用于在索引前队列化日志。同时还使用Elasticsearch索引化、存储日志,并作为查看系统的后端,使用kibana作为页面前端显示。

    logstash,其处理流程不过于input、filter、output三个处理流程,以下是我翻译的几个常用的处理参数output流之http
    output {
      http {
        codec => ... # codec (optional), default: "plain"
        content_type => ... # string (optional)
        format=> ... # string, one of ["json", "form", "message"] (optional), default: "json"
        headers => ... # hash (optional)
        http_method => ... # string, one of ["put", "post"] (required)
        mapping => ... # hash (optional)
        message => ... # string (optional)
        url => ... # string (required)
        verify_ssl => ... # boolean (optional), default: true
        workers => ... # number (optional), default: 1
    }
    }
    codec:  数据类型,默认是“plain”,用来指定输出数据的类型
    content_type:  值类型是string,默认没有设置该参数,如果没有特别指明,json格式是application/json,form格式是application/x-www-form-urlencoded
    format:  值可以是json、form、message三种类型,默认是json。用来设置http body的格式,如果是form格式,http body会被影射成一个查询字符串(foo=bar&baz=fizz...),如果是message格式,http body会被格式化成事件???,否则,事件都是以json格式发送
    headers:  值类型是一个hash,默认是没有设置的。默认使用的格式如下:headers => ["X-My-Header", "%{host}"]
    http_method:  值可以是put或者post,默认没有设置。
    mapping:  值是一个hash,默认没有设置,该值可以让你选择事件的一个结构体或者部分发送,例如:mapping => ["foo", "%{host}", "bar", "%{type}"]
    message:  值是字符串,默认没有设置
    url:  值是一个字符串,默认没有设置。可以让你使用http或者https进行put或者post。
    verify_ssl:  值是布尔类型,默认是true,是否验证SSL
    workers:  值是一个数值。默认是1,用来设置工作者数目。

    input流codec之json格式
    input{
      file{
        codec => json {
          charset => ["UTF-8"] (optional), default: "UTF-8"
      }
      }
    }
    被用来解析完全格式的json消息,如果json数据使用'\n'分割的,则可以使用json_lines

    filter流之json
    filter{
      json {
        add_field => ... # hash (optional), default: {}
        add_tag => ... # array (optional), default: []
        remove_field => ... # array (optional), default: []
        remove_tag => ... # array (optional), default: []
        source => ... # string (required)
        target => ... # string (optional)
    }
    }
      对一个包含json的字段,可以扩展成一个数据结构
    add_field:  值类型为hash,默认是{} 空。如果这个过滤成功了,会增加任意field到这个事件。例如:add_field => [ "foo_%{somefield}", "Hello world, from %{host}" ],如果这个事件有一个字段somefiled,它的值是hello,那么我们会增加一个字段foo_hello,字段值则用%{host}代替。
    add_tag:  值类型为array,默认是[] 空。执行成功会增加一个任意的tags到事件。例如:add_tag => [ "foo_%{somefield}" ]
    remove_field:  值类型为array,默认是[] 空,执行成功,删除一个field,例如:remove_tag => [ "foo_%{somefield}" ]
    source:  值类型为字符串,默认没有设置。
    filter流之json_encode
    filter{
      json_encode {
        add_field => ... # hash (optional), default: {}
        add_tag => ... # array (optional), default: []
        remove_field => ... # array (optional), default: []
        remove_tag => ... # array (optional), default: []
        source => ... # string (required)
        target => ... # string (optional)
    }
    }
    把一个field序列化成json格式。

    filter流之grep
    filter{
      grep {
        add_field => ... # hash (optional), default: {}
        add_tag => ... # array (optional), default: []
        drop => ... # boolean (optional), default: true
        ignore_case => ... # boolean (optional), default: false
        match => ... # hash (optional), default: {}
        negate => ... # boolean (optional), default: false
        remove_field => ... # array (optional), default: []
        remove_tag => ... # array (optional), default: []
    }
    }
       grep过滤器,如果你不想通过哪些事件可以把它drop掉,或者给每个匹配的事件增加tags和fields。如果negate的值是true,则匹配到的事件会被丢弃。
    add_field:  值类型是hash,默认是{} 空。过滤成功,会增加一个field到事件。例如:add_field => [ "foo_%{somefield}", "Hello world, from %{host}" ]
    add_tag:  值类型是array,默认是[] 空。过滤成功,会增加一个tags到事件,例如:add_tag => [ "foo_%{somefield}" ]
    drop:  值是布尔类型,默认是true。drop掉不匹配的事件,如果该值设置为false,则不会有事件被drop。
    ifnore_case:  值类型是布尔类型,默认是false。不区分大小写匹配,类似于grep -i,如果是true,则区分大小写
    match:  值是hash类型,默认是{} 空。一个hash匹配field=>regxp。如果有多个匹配,则必须所有的都成功。例如:match => [ "message", "hello world" ]
    negate:  值是布尔类型,默认值是false。类似于grep -v
    remove_field:  值是array类型,默认是[] 空。如果成功,删除一个fields。
    remove_tag:  值是array类型,同上。

    filter流之grok
    filter{
      grok {
        add_field => ... # hash (optional), default: {}
        add_tag => ... # array (optional), default: []
        break_on_match => ... # boolean (optional), default: true
        drop_if_match => ... # boolean (optional), default: false
        keep_empty_captures => ... # boolean (optional), default: false
        match => ... # hash (optional), default: {}
        named_captures_only => ... # boolean (optional), default: true
        overwrite => ... # array (optional), default: []
        patterns_dir => ... # array (optional), default: []
        remove_field => ... # array (optional), default: []
        remove_tag => ... # array (optional), default: []
        tag_on_failure => ... # array (optional), default: ["_grokparsefailure"]
    }
    }

       解析任意文本并且结构化他们。grok目前是logstash中最好的解析非结构化日志并且结构化他们的工具。这个工具非常适合syslog、apache log、mysql log之类的人们可读日志的解析。





    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    4

    主题

    0

    听众

    302

    金钱

    四袋长老

    该用户从未签到

    沙发
    发表于 2016-09-27 14:10:09 |只看该作者
    听起来挺厉害的                        
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表