分布式日志收集之Logstash 笔记(一)

2020腾讯云7月秒杀活动,优惠非常大!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1040

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

推荐:日志收集分析工具logstash + elasticsearch

[Your logs are your data: logstash + elasticsearchby Andrey Redkoon February 25th, 2013| Filed in: Enterprise JavaTags: Elasticsearch,Logging,LogstashTopic of t



(一)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]   view plain copy
  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  

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

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


(3)常用的数据模块 
[java]   view plain copy
  1. <pre name="code" class="java">input{     
  2. .....     
  3. }     
  4. filter{     
  5. ......     
  6. }     
  7. output{     
  8. .......     
  9. }    
(4)监听文件,支持通配符,写入文件 [java]   view plain copy
  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. }    
(5)logstash插件支持数据类型  [java]   view plain copy
  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. }    

推荐:分布式日志收集之Logstash 笔记(二)

[ 今天是2015年11月06日,早上起床,北京天气竟然下起了大雪,不错,最近几年已经很少见到雪了,想起小时候冬天的样子,回忆的影子还是历历在目。 进入正题吧,上篇介绍了L

相关推荐