使用Logstash + Elasticsearch作为大数据索引、分析工具

logstash(1.4.0)是一个不错的日志监控与分析工具,数据通过logstash使用后端的ElasticSearch(1.1.1)集群完成数据索引,以供后续的查询、分析使用。


logstash提供了一个geoip的filter,如果发送的事件数据中有IP地址之类的数据,就可以通过这个过滤器将对应的国家、城市等信息添加到数据中,为以后的上卷或下钻操作提供数据基础。我们的应用场景是这样的:


Python Producer => Redis 消息队列(logstash input,默认支持)=> Filter(geoip,默认支持)=> ElasticSearch集群 => Kibana3


1. 搭建ES集群

其中,ES集群的搭建是非常简单的,装好JDK1.7之后(并设置好JAVA_HOME, PATH等环境变量),只需要下载官方软件包(elasticsearch-1.1.1.tar.gz)解压即可启动,具体启动命令:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. bin/elasticsearch -d  

在默认配置下,在局域网中启动多个这样的实例,就可以自动组建一个ES集群了,这个集群是去中心化的,非常简单。


2. 安装Kibana3

这实际上就是ES集群的一个查询引擎,也可以说是一层皮,其默认的配置(安装路径/config.js )中,只需要关心: elasticsearch: "http://"+window.location.hostname+":9200", 即可,不过如果你是在ES集群中的一个节点上部署的kibana,那么默认的配置就可以完美工作。Kibana3实际上就是纯粹的Javascript和CSS代码,只需要在Nginx设置一下对应的虚拟主机,使之能够访通过web访问即可,以下是我的Nginx配置:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #  
  2. # The default server  
  3. #  
  4. server {  
  5.     listen       8080 default_server;  
  6.     server_name  _;  
  7.   
  8.     #charset koi8-r;  
  9.   
  10.     location / {  
  11.         root   /opt/kibana;  
  12.         index  index.html index.htm;  
  13.     }  
  14.   
  15.     error_page  404              /404.html;  
  16.     location = /404.html {  
  17.         root   /usr/share/nginx/html;  
  18.     }  
  19.   
  20.     # redirect server error pages to the static page /50x.html  
  21.     #  
  22.     error_page   500 502 503 504  /50x.html;  
  23.     location = /50x.html {  
  24.         root   /usr/share/nginx/html;  
  25.     }  
  26.   
  27. }  

这样,在重新加载Nginx配置之后,就可以通过访问服务器的8080端口来访问到kibana的页面了。


3。 配置logstash

logstash的配置主要分成以下几个部分: input, codec, filter, output(具体请参见:http://logstash.net/docs/1.4.1/)。

顾名思义,input就是logstash的输入端,这个端口可以是一个队列,一个文件,标准输出也可以;codec就是数据的编码格式,logstash自己实现了多种编码格式,不过我们比较常用的还是JSON格式;filter就是数据过滤器,在这里我们可以过滤掉我们不想要的数据,或者为数据添加某些字段,比如我们这里要geoip;output一般是到Elasticsearch,不过logstash也提供了多种输出。


在我们的应用场景下,我们使用如下的配置启动logstash即可:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. input {  
  2.   redis {  
  3.     host => "a00"  
  4.     port => "6379"  
  5.     key => "events"  
  6.     data_type => "list"  
  7.     codec => "json"  
  8.     type => "logstash-redis-demo"  
  9.     tags => ["logstashdemo"]  
  10.   }  
  11. }  
  12.   
  13. filter {  
  14.   geoip {  
  15.     source => "[extra][ip]"  
  16.     add_tag => [ "geoip" ]  
  17.   }  
  18. }  
  19.   
  20.   
  21. output {  
  22.   elasticsearch {  
  23.     host => "a01"  
  24.     flush_size => 10240  
  25.   }  
  26. }  

我们从一个redis队列(a00:6379)中获取数据,通过geoip过滤器,从ip信息得到对应的地理位置信息之后,最后将数据导入到elasticsearch集群中,对数据做索引。其中需要注意的是,对于嵌套字段的引用方式是:[parent][child]的方式引用。


最后来张效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值