ELK由Elasticsearch、Logstash、Kibana三部分组成:
- Elasticsearch 是一个开源分布式搜索引擎,特点是分布式、零配置、自动发现、索引自动分片、索引副本机制、RESTful风格接口、多数据源、自动搜索负载等。
- Logstash 是一个完全开源工具,可对日志进行收集、分析,并将其存储供日后使用。
- Kibana 是一个开源和免费的工具,可为Logstash和Elasticsearch提供日志分析友好的web界面,可帮助您汇总、分析、搜索重要数据日志。
ELK工作流程
在需手机日志的所有服务器部署Logstash,作为Logstash agent(Logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后Logstash indexer将日志收集在一起交给全文搜索服务Elasticsearch,可用Elasticsearch进行自定义搜索通过Kibana来结合自定义搜索进行页面展示。
tu开源实时日志分析ELK(ElasticSearch, Logstash, Kibana),方便收集日志,进行集中化管理方便进行日志的统计和检索。日志主要包括系统日志、应用程序日志和安全日志。通常日志被分散存储不同的设备上,若你管理多台服务器,可使用集中化的日志管理,例如开源syslog将所有服务器上的日志收集汇总。
集中化管理日志后,日志统计和检索又称为一件比较麻烦的事情,一般使用grep、awk、wc等命令实现检索和统计,但对于要求更高的查询、排序、统计等要求和庞大的机器数量,依然使用这样的方法难免力不从心。开源实时日志分析ELK平台能完美的解决上述问题。
图解:Logstash收集AppServer产生的Log,并存放到Elasticsearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给浏览器。
Logstash
Logstash其实就是一个收集器而已,需为其指定Input和Output。
The Elastic Stack不是一个软件而是Elasticsearch、Logstash、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案。可从任何来源、任何格式进行日志搜索,分析获取数据,并实时进行展示。像盾牌(安全)、监护者(警报)、Marvel(监测)一样为你的 产品提供更多的可能。
- Elasticsearch 搜索,提供分布式全文搜索引擎
- Logstash 日志搜集、管理、存储
- Kibana 日志过滤web显示
- Filebeat 监控日志文件、转发
集中式日志系统ELK协议栈
一个集中式日志系统特点
- 收集 能够采集多种来源的日志数据
- 传递 能够稳定的把日志数据传输到中央系统
- 存储 如何存储日志数据
- 分析 可支持UI分析
- 警告 能提供错误报告监控机制
解决方案
简单的 Rsyslog、Syslog-ng
商业的Splunk
开源的 Facebook的Scribe, Apache 的 Chukwa、Linkedin的Kafak、Cloudera的Fluented、ELK...
ELK协议栈
ELK其实并不是一款软件而是一整套解决方案。
Elasticsearch 是一个实时的分布式搜索和分析引擎,用于全文搜索,构化搜索和分析。它是一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,使用Java编写。
多个独立的Agent(Shipper)运行在不同的服务器终端,用来收集不同来源的数据,一个中心Agent(Indexer)用来负责汇总数据,在中心Agent前的Broker作为缓冲区,中心Agent后面ElasticSearch用于存储和搜索数据,前端Kibana用于提供UI展示。
Shipper表示收集日志,使用LogStash收集各种来源的日志数据,可能是系统日志、文件、redis、mq...
Broker作为远端Agent与中心Agent之间的缓冲区,使用Redis实现,用来提升系统性能与可靠性,当中心Agent提取数据失败时,数据保存在redis中不至于丢失。
中心Agent也是Logstash,从Broker中读取数据执行相关的分析和处理(Filter)。
ElasticSearch用于存储最终的数据(结果数据)并提供搜索功能。
Kibana提供一个简单丰富的Web界面,数据来自于ES,支持各种查询统计和展示。
这种搭配也不是绝对的,可不使用redis,可考虑kafka来做消息队列,也可让shipper直接从你希望的日志中获取数据,若你喜欢也可让数据存到ES后在存一份进入hdfs等。