Elasticsearch +Logstash+ Kibana+FileBeat搭建日志系统实战

 

 

1 安装elasticsearch

1.1安装elasticsearch

相关中文文档:https://es.xiaoleilu.com 下载:从https://www.elastic.co/downloads/elasticsearch 下载对应操作系统版本的elasticsearch解压:tar -zxvf elasticsearch-5.2.0.tar.gz启动:./bin/elasticsearch.sh验证:elasticsearch --version默认端口:9200配置elasticsearch:打开config/elasticsearch.yml修改以下配置:

 
  1. path.data: /Users/chenshunyang/tools/elasticsearch/data

  2. path.logs: /Users/chenshunyang/tools/elasticsearch/logs

  3. cluster.name: elktest //更改默认的名称为我们想要的名称

  4. node.name: node-elktest  //更改节点默认的名称

  5. network.host: localhost

1.2 安装插件:elasticsearch-head

elasticsearch 2.x 版本

elasticsearch 2.x版本中,直接使用/bin/plugin install mobz/elasticsearch-head安装即可验证:通过访问 http://localhost:9200/_plugin/head/

elasticsearch 5.1 版本

  • 安装:elasticsearch 5.1中,elasticsearch-head插件不能放在elasticsearch的 plugins、modules 目录下,不能使用 elasticsearch-plugin install,直接启动elasticsearch即可

 
  1. git clone https://github.com/mobz/elasticsearch-head.git

  2. cd elasticsearch-head/

  3. npm install grunt

  • 配置:修改elasticsearch/config/elasticsearch.yml 添加

 
  1. http.cors.enabled: true

  2. http.cors.allow-origin: "*"

打开elasticsearch-head-master/Gruntfile.js,找到下面connect属性,新增hostname: ‘0.0.0.0’:

 
  1. connect: {

  2.        server: {

  3.            options: {

  4.                hostname: '0.0.0.0',

  5.                port: 9100,

  6.                base: '.',

  7.                keepalive: true

  8.            }

  9.        }

  10.    }  

  • 启动插件:

 
  1. elasticsearch-head/ && ./node_modules/grunt/bin/grunt server

  • 查看 http://localhost:9100

2 安装kibana

下载:从https://www.elastic.co/downloads/kibana 下载对应操作系统版本的kibana解压: tar -xzvf kibana-5.2.0-darwin-x86_64.tar.gz配置kibana:进入kibana/config打开kibana.yml,设置elasticsearch.url 为es实例的地址eg:elasticsearch.url: "http://localhost:9200"启动:./bin/kibana.sh默认端口:5601访问:http://localhost:5601

3 安装logstash

下载:从https://www.elastic.co/downloads/logstash 下载对应操作系统版本的logstash解压:tar -zxvf logstash-5.2.0.tar.gz验证:./bin/logstah --version

3.1 最简单的logstash

 
  1. ./bin/logstash -e 'input { stdin { } } output { stdout {} }'

直到看到"Pipeline main started"。说明启动成功。这个例子,stdin控制台输入作为数据来源,stdout作为数据结果。输入 hello可以看到2017-12-14T09:37:29.287Z chenshunyang.local hello

3.2 通过配置文件加载

启动:./bin/logstash -f /home/push/logstash/conf/logstash.conf (logstash.conf为logstash的配置文件)

配置logstash:生成一个logstash.conf文件,配置示例内容如下

将数据写入es中

 
  1. input {

  2.  stdin {  

  3.    }

  4. }

  5.  

  6. output {

  7.  #写出到es

  8.  elasticsearch {

  9.    hosts => ["localhost:9200"]

  10.    index => "logstash-elktest-%{+YYYY.MM}"

  11.    document_type => "elktest"

  12.    workers => 1

  13.    flush_size => 20000

  14.    idle_flush_time => 10

  15.    template_overwrite => true

  16.  }

  17.  #写出到控制台

  18.  stdout {

  19.  codec => rubydebug

  20.  }

  21. }

3.3 加入过滤器

filters是一个行处理机制将提供的为格式化的数据整理成你需要的数据,让我们看看下面的一个例子,叫grok filter的过滤器。elktest-filter.conf

 
  1. input {

  2.  stdin {  

  3.    }

  4. }

  5.  

  6. filter {  

  7.  grok {  

  8.    match => { "message" => "%{COMBINEDAPACHELOG}" }  

  9.  }  

  10.  date {  

  11.    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]  

  12.  }  

  13. }  

  14.  

  15. output {

  16.  #写出到es

  17.  elasticsearch {

  18.    hosts => ["localhost:9200"]

  19.    index => "logstash-elktest-%{+YYYY.MM}"

  20.    document_type => "elktest"

  21.    workers => 1

  22.    flush_size => 20000

  23.    idle_flush_time => 10

  24.    template_overwrite => true

  25.  }

  26.  #写出到控制台

  27.  stdout {

  28.  codec => rubydebug

  29.  }

  30. }

  31.  

  32. 启动:./bin/logstash -f config/elktest-filter.conf

现在粘贴下面一行信息到你的终端(当然Logstash就会处理这个标准的输入内容):

 
  1. 127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"  

你会看到

 

从文件获取数据

eg:elktest-apache.conf

 
  1. input {

  2.  stdin {  

  3.  

  4.  }

  5.  #从文件获取数据

  6.  file {  

  7.    path => "/Users/chenshunyang/tools/logs/nginx.log"  

  8.    start_position => beginning  

  9.  }  

  10. }

  11.  

  12. filter {  

  13.  grok {  

  14.    match => { "message" => "%{COMBINEDAPACHELOG}" }  

  15.  }  

  16.  date {  

  17.    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]  

  18.  }  

  19. }  

  20.  

  21. output {

  22.  #写出到es

  23.  elasticsearch {

  24.    hosts => ["localhost:9200"]

  25.    index => "logstash-elktest-%{+YYYY.MM}"

  26.    document_type => "elktest"

  27.    workers => 1

  28.    flush_size => 20000

  29.    idle_flush_time => 10

  30.    template_overwrite => true

  31.  }

  32.  #写出到控制台

  33.  stdout {

  34.  codec => rubydebug

  35.  }

  36. }

准备好nginx.log文件

 
  1. 113.31.136.46 - - [14/Dec/2017:19:42:09 +0800] "POST /sendsms HTTP/1.1" 200 5 "-" "python-requests/2.18.4" "-" "0.012" "sendsms.jpushoa.com" "200" "192.168.250.220:8080" "0.012"

执行:./bin/logstash -f logstash-apache.conf 观察结果

关键配置词语解释:

  • Input 解释

作为 Consumer 端,插件使用的是 High-level-consumer API,请结合上述 kafka 基本概念进行设置:groupid消费者分组,可以通过组 ID 去指定,不同的组之间消费是相互不受影响的,相互隔离。topicid指定消费话题,也是必填项目,指定消费某个 topic ,这个其实就是订阅某个主题,然后去消费。resetbeginninglogstash 启动后从什么位置开始读取数据,默认是结束位置,也就是说 logstash 进程会以从上次读取结束时的偏移量开始继续读取,如果之前没有消费过,那么就开始从头读取.如果你是要导入原有数据,把这个设定改成 "true", logstash 进程就从头开始读取.有点类似 cat ,但是读到最后一行不会终止,而是变成 tail -F ,继续监听相应数据。decorateevents在输出消息的时候会输出自身的信息包括:消费消息的大小, topic 来源以及 consumer 的 group 信息。rebalancemaxretries当有新的 consumer(logstash) 加入到同一 group 时,将会 reblance ,此后将会有 partitions 的消费端迁移到新的 consumer 上,如果一个 consumer 获得了某个 partition 的消费权限,那么它将会向 zookeeper 注册, Partition Owner registry 节点信息,但是有可能此时旧的 consumer 尚没有释放此节点,此值用于控制,注册节点的重试次数。consumertimeoutms指定时间内没有消息到达就抛出异常,一般不需要改。以上是相对重要参数的使用示例,更多参数可以选项可以跟据 https://github.com/joekiller/logstash-kafka/blob/master/README.md 查看 input 默认参数。

  • output解释: Logstash 会努力攒到 20000 条数据一次性发送出去,但是如果 10 秒钟内也没攒够 20000 条,Logstash 还是会以当前攒到的数据量发一次。

4.使用filebeat收集数据

安装filebeat:从https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.0-darwin-x8664.tar.gz下载解压:tar zxvf filebeat-5.2.0-darwin-x8664.tar.gz版本:./filebeat --version默认端口:5043修改filebeat.yml为elktest.yml并添加内容

 
  1. filebeat:

  2.  prospectors:

  3.    - input_type: log

  4.      paths:

  5.        - /Users/chenshunyang/tools/logs/nginx.log

  6.      tail_files: true

  7.      tags: ["data-api"]

  8.  

  9. output.logstash:

  10.    hosts: ["localhost:9600"]

  11.    loadbalance: true

  12.    index: nginx-log

改为logstash接收,logstash服务端口为9600启动:./filebeat -e -c elktest.yml

修改logstash的配置,改为logstash接收filebeat的数据,并输出到控制台以及es中

 
  1. input {

  2.  beats {

  3.    port => 5043

  4.  }

  5. }

  6.  

  7. output {

  8.    elasticsearch {

  9.        hosts => ["localhost:9200"]

  10.        index => "logstash-elktest-%{+YYYY.MM}"

  11.        document_type => "elktest"

  12.        workers => 1

  13.        flush_size => 20000

  14.        idle_flush_time => 10

  15.        template_overwrite => true

  16.    }

  17.    stdout {

  18.        codec => rubydebug

  19.    }

  20. }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值