Link : ELK 官网
Filebeat
概念
- Filebeat是由GO语言实现的轻量级的框架,开销相对Logstash小
- Filebeat由两个模块组成:prospectors, harvesters
- Prospector
- 负责找到所以匹配的文件,然后给每个文件启动一个Harvester的线程(如何保证大量日志文件时的多线程性能?)
- 当前支持两种类型的Prospector: log和stdin,每种都能配置多个Prospector,每个Prospector都是一个独立的进程
- 每个Prospector通过文件的“唯一标识符”管理自己找到的文件的状态,当Filebeat重启后,通过文件的数据恢复文件状态
- Harvester
- 负责读取文件内容,一个文件起一个Harvester线程,只能读取本地文件
- 当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
- Elasticsearch是一款基于Apache Lucene构建的开源分布式搜索引擎,目标是让全文搜索变得简单,开发者可以通过它简单明了的RESTFul API轻松地实现搜索功能,而不必去面对Lucene的复杂性。
- 如果你有数百万的文档需要通过关键词进行定位时,Elasticsearch肯定是最佳选择。当然,如果你的文档是JSON的,你就可以把Elasticsearch当作一种轻量级的“NoSQL数据库”。但是Elasticsearch不是一个合适的数据库引擎,对复杂的查询和聚合并不是很强
- [Elasticsearch、MongoDB和Hadoop比较] : http://www.jianshu.com/p/2c7b0c76fa04
- Kibana
- 用户界面,用于查询总结分析日志
- LogStash/FileBeat/Topbeat
- 日志收集
Filebeat
- filebeat.yml
- how to startup
- where to find port