zoukankan      html  css  js  c++  java
  • 分布式日志收集之Logstash 笔记(一)



    (一)logstash是什么?

    logstash是一种分布式日志收集框架,开发语言是JRuby,当然是为了与Java平台对接,不过与Ruby语法兼容良好,非常简洁强大,经常与ElasticSearch,Kibana配置,组成著名的ELK技术栈,非常适合用来做日志数据的分析。

    当然它可以单独出现,作为日志收集软件,你可以收集日志到多种存储系统或临时中转系统,如MySQL,redis,kakfa,HDFS, lucene,solr等并不一定是ElasticSearch。

    官网下载地址:https://www.elastic.co/downloads/logstash
    官网文档地址:https://www.elastic.co/guide/en/logstash/current/index.html


    (二)logstash的的安装

    logstash的目前的最新版本是2.0.0,建议安装在Linux平台,虽然它也支持Windows平台,但可能会有问题
    下载:
    wget https://download.elastic.co/logstash/logstash/logstash-2.0.0.tar.gz

    解压:
    tar -zxvf logstash-2.0.0.tar.gz

    进入根目录,执行bin/logstash -h 可查看帮助文档
    参数介绍如下:

    使用命令模板:
        /bin/logstash 命令参数  选项

    选项:
        -f , 指定加载一个后缀为.conf文件的logstash配置模块
        -e  , 命令行指定参数 , 通常用来调试
        -w,  指定logstash的工作线程数
        -l,   指定logstash的默认日志写入到一个文件中,如果不指定,默认是标准输出
        --quiet                       静默模式,仅仅只有error级别信息输出
        --verbose                   info级别的log输出
        --debug                      debug 级别的log输出.
        -V, --version                查看logstash的版本
        -p, --pluginpath PATH         加载自定义的logstash插件
        -t, --configtest               检查logstash配置是否有效
        -h, --help                    打印帮助


    (三)logstash的数据处理模型

    (1)input  =》 output
    (2)input =》 filter =》 output

    其中input常用的输入源有:file,syslog,redis,log4j,apache log或nginx log,或者其他一些自定义的log格式,业务log,搜索log,订单log等等

    filter常用的选项有:
    grok:支持正则提取任何非结构化数据或结构化数据,其中logstash内置120多种正则,比如常见的时间,ip,用户名,等等也支持自定义正则解析
    mutate:修改字段名,删除,更新等操作,转换字段类型等
    drop: 删除某些时间,如debug
    clone:拷贝一份事件副本,用来添加或删除字段
    geoip : 通过ip获取地理位置信息,在做kibana区域统计图非常炫
    ruby: 支持原生的ruby代码,操作事件,实现强大的其他功能

    output常用的输出有:
    elasticsearch 比较常用
    file:写入文件
    redis:写入队列
    hdfs:写入HDFS,需插件支持
    zabbix: zabbix监控
    mongodb:写入mongodb库

    除此之外还有个编码插件codecs也比较常用
    常用来处理json数据或者多行数据源



    (四)logstash一些简单例子

    (1)使用命令行命令调试:

    Java代码 复制代码 收藏代码
    1. [search@h3 logstash-2.0.0]$ bin/logstash -e "input{stdin{}} output{stdout{}}"  
    2. Default settings used: Filter workers: 1  
    3. Logstash startup completed   
    4. hello   
    5. 2015-11-04T15:16:02.747Z h3 hello   
    6. test   
    7. 2015-11-04T15:16:08.108Z h3 test  
    [search@h3 logstash-2.0.0]$ bin/logstash -e "input{stdin{}} output{stdout{}}"
    Default settings used: Filter workers: 1
    Logstash startup completed
    hello
    2015-11-04T15:16:02.747Z h3 hello
    test
    2015-11-04T15:16:08.108Z h3 test
    




    (2)命令行参数仅适合简单的配置,如果配置比较多,我们一般会写入一个以.conf结尾的配置文件里,然后使用
    -f命令加载,将(1)中的配置,写入hello.conf

    然后使用bin/logstash -f hello.conf  执行加载,即可达到同样效果


    (3)常用的数据模块



    Java代码 复制代码 收藏代码
    1. input{   
    2. .....   
    3. }   
    4. filter{   
    5. ......   
    6. }   
    7. output{   
    8. .......   
    9. }  
    input{
    .....
    }
    filter{
    ......
    }
    output{
    .......
    }
    




    (4)监听文件,支持通配符,写入文件

    Java代码 复制代码 收藏代码
    1. input{   
    2.   
    3. file => ["/var/log/file","/var/solr/log/*"]   
    4.   
    5. }   
    6.   
    7. output{   
    8.   
    9. file => "/sys/collect/log"  
    10.   
    11.   
    12. }  
    input{
    
    file => ["/var/log/file","/var/solr/log/*"]
    
    }
    
    output{
    
    file => "/sys/collect/log"
    
    
    }
    




    (5)logstash插件支持数据类型

    Java代码 复制代码 收藏代码
    1. 数组: path=> ["a","b"]   
    2. 布尔:ssl_enable => true  
    3. 字节:   
    4. my_bytes =>"1113"#1113 bytes    
    5. my_bytes =>"10MiB"#10485760 bytes   
    6. my_bytes =>"100kib"#102400 bytes   
    7. my_bytes =>"180 mb"#180000000 bytes   
    8. 编码:   
    9. codec => "json"  
    10. 哈希表:   
    11. match => {   
    12.   
    13. "k1" => "v1"  
    14. "k2" => "v2"  
    15. "k3" => "v3"  
    16.   
    17. }   
    18. 数值:   
    19. port=> 33  
    20. 密码:   
    21. pwd=> "password"  
    22. 路径:   
    23. path=> "/tmp/logstash"  
    24. 字符串:   
    25. name => "hello wordld"  
    26. 注释:   
    27. input{   
    28. # 号开头,与shell脚本注释一样   
    29. }  
    数组: path=> ["a","b"]
    布尔:ssl_enable => true
    字节:
    my_bytes =>"1113"#1113 bytes 
    my_bytes =>"10MiB"#10485760 bytes
    my_bytes =>"100kib"#102400 bytes
    my_bytes =>"180 mb"#180000000 bytes
    编码:
    codec => "json"
    哈希表:
    match => {
    
    "k1" => "v1"
    "k2" => "v2"
    "k3" => "v3"
    
    }
    数值:
    port=> 33
    密码:
    pwd=> "password"
    路径:
    path=> "/tmp/logstash"
    字符串:
    name => "hello wordld"
    注释:
    input{
    # 号开头,与shell脚本注释一样
    }
    



    最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
    本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!  

  • 相关阅读:
    tcp/ip 卷一 读书笔记(1)tcp/ip 概述
    python项目使用jsonschema进行参数校验
    设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开
    OpenStack中memcached的使用和实现
    Ironic中pxe driver和agent driver的区别
    tcp/ip 卷一 读书笔记(2)物理层和链路层网络
    C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
    软件测试Ron Patton
    实例: 创建一个欢迎cookie
    C/C++中Static的作用详述
  • 原文地址:https://www.cnblogs.com/qindongliang/p/4938728.html
Copyright © 2011-2022 走看看