Filebeat

概念

  • Filebeat是由GO语言实现的轻量级的框架,开销相对Logstash小
  • Filebeat由两个模块组成:prospectors, harvesters
  • Prospector
    1. 负责找到所以匹配的文件,然后给每个文件启动一个Harvester的线程(如何保证大量日志文件时的多线程性能?)
    2. 当前支持两种类型的Prospector: log和stdin,每种都能配置多个Prospector,每个Prospector都是一个独立的进程
    3. 每个Prospector通过文件的“唯一标识符”管理自己找到的文件的状态,当Filebeat重启后,通过文件的数据恢复文件状态
  • Harvester
    1. 负责读取文件内容,一个文件起一个Harvester线程,只能读取本地文件
    2. 当Harvester在读取文件的时候文件移动、删除或重命名,文件的空间在Harvester关闭的时候才被释放
  • Filebeat通过注册文件里的“Event Delivery State”来保证每个事件至少被读取一次
  • 如果Filebeat在交付事件时关闭,那些没有得到output响应的事件会在启动的时候再次交付
  • 可以通过shutdown_timeout配置Filebeat在shutdown之前等待的时间,从而尽可能的避免重复交付
  • 如果文件内容在被读取之前文件或内容就被删除,内容丢失,比如日志循环写入太快,或者在output阻塞的时候日志被删除
  • Filebeat传输数据可以通过配置SSL加密

配置输入输出

  • ELK使用YAML数据格式进行配置,filebeat.yml

  • 输入配置

      filebeat.prospectors:
      - input_type: log
        paths:
          - /var/log/*.log
    
  • 输出到logstash

      output.logstash:
        hosts: ["localhost:5044"]
    

启动filebeat

  • nohup ./filebeat -c filebeat.yml >> startup.log 2>&1 &
  • filebeat会一直尝试通过TCP连接localhost:5044,直到成功

Logstash

概念

  • Logstash是Ruby写的,用JRuby跑在JVM上,插件编写方便快捷
  • Logstash由于跑在JVM上,消耗资源较大,所以可以用Elastic Beats进行日志收集工作,任何与Elastic Beats framework整合的Beats都能使用,比如Filebeat,使用go语言写的轻量级框架,资源消耗小
  • Logstash由input,filter和output组成一个pipeline流程,实际上是一个多线程间的数据读写

Hello world

  • 下载zip包解压,5+版本需要java 8+
  • bin/logstash -e 'input { stdin { } } output { stdout {} }',输入:Hello world,输出:2013-11-21T01:22:14.405+0000 0.0.0.0 hello world

Products

  • ElasticSearch
    1. Elasticsearch是一款基于Apache Lucene构建的开源分布式搜索引擎,目标是让全文搜索变得简单,开发者可以通过它简单明了的RESTFul API轻松地实现搜索功能,而不必去面对Lucene的复杂性。
    2. 如果你有数百万的文档需要通过关键词进行定位时,Elasticsearch肯定是最佳选择。当然,如果你的文档是JSON的,你就可以把Elasticsearch当作一种轻量级的“NoSQL数据库”。但是Elasticsearch不是一个合适的数据库引擎,对复杂的查询和聚合并不是很强
    3. [Elasticsearch、MongoDB和Hadoop比较] : http://www.jianshu.com/p/2c7b0c76fa04
  • Kibana
    • 用户界面,用于查询总结分析日志
  • LogStash/FileBeat/Topbeat
    • 日志收集

Filebeat

  • filebeat.yml
  • how to startup
  • where to find port