codecamp

LogStash+ElasticSearch简单使用(CentOS)

为了更加方便的分析Api使用情况,为了更具化的统计Api使用数据,决定使用LogStash和ElasticSearch结合搭建一套Log分析平台。

准备

作为最火的开源大数据分析平台,ElasticSearch成功的降低了大数据分析的入门门槛。既然决定使用它来分析日志,必然得要先安装ElasticSearch和LogStash。【Elastic系列软件依赖jvm,所以得先安装jvm,我为了方便直接使用yum安装了JDK】安装软件很简单,Elastic系列软件有自己的rpm仓库,直接使用yum安装就可以,详细的安装方法

几点说明

  1. LogStash的默认配置文件路径为/etc/logstash/
  2. ElasticSearch的默认配置文件路径为/etc/elasticsearch/
  3. Yum安装的LogStash默认的文件路径为/usr/share/logstash/
  4. Yum安装的ElasticSearch默认的文件路径为/usr/share/elasticsearch/

反向代理(不是必须)

为了安全性考虑,我们将Es的9200端口绑定在127.0.0.1上,所以为了让外部也可以借助API来实现数据检索,我采用Nginx做了一个反向代理,这样就可以完美的在外部使用Es啦。相关的nginx配置如下

server {
        listen       80;
        server_name  your-server-name;


        location / {
          proxy_redirect off;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_pass http://127.0.0.1:9200;
        }
    }

LogStash配置

LogStash作为抓取数据的小伙伴,我们需要对它的配置进行修改,已适配自己的Log格式,当然如果你要分析Nginx_access日志或者Apache日志这类公用日志,官方也提供有现成的正则模版,可以直接使用。最后,我强烈建议每个人都要使用 Grok Debugger 来调试自己的 grok 表达式。另外 Grok Debugger 也提供了很多Grok的内建规则说明。

#适配ApiAdmin的Log分析的LogStash配置
input {
  file {
    path => "/data/apiLog/*.log"
    start_position => "beginning"
  }
}


filter {
    grok {
      match => { "message" => "%{DATA:real_class}###%{DATA:api_hash}###%{DATA:request_time}###%{DATA:request_data}###%{DATA:access_token}###%{DATA:user_token}###%{DATA:version}###%{DATA:cas}###%{NUMBER:code}###%{DATA:response_data}###%{DATA:filter_request_data}###%{DATA:app_id}###%{DATA:app_name}###%{DATA:device_id}###%{DATA:user_info}$" }
    }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}


output {
 elasticsearch { 
     hosts => ["127.0.0.1:9200"]
     index => "api_admin"
     document_type => "logs"
 }
}


#LogStash做为服务后台运行的示例命令
nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/log.conf > /root/logstash.log 2>&1 &

ElasticSearch配置

对于Es,目前我只是把它当成一个数据库来用,所以这部分的配置暂时先留空,我们对于数据的检索是基于HTTP API。

API日志
无标题文章
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }