本文是本人基于互联网找到的相关资料进行总结整理而成的,并添加了个人的理解。本文旨在对ELK有一个总体的认识,知道他是个什么东西,能干什么。以及干的时候去哪里找资料。不会涉及搭建过程。
现在学习时候经常会遵循3点:什么东西干什么的,怎么用或怎么干,原理。
任何一个东西的出现都是有他的意义的,就像一个类,人们创建他说明他肯定是有一定作用的。你只要想明白开发者为什么会写他,要用他来干什么,怎么用。这样思考可以理解的比较快。
服务器开发,会涉及到各种各样的很多的日志。可以说elk系统就是收集管理这些日志的,来达到监控系统状态的目的。
日志的管理非常重要。所以市场上也有很多日志系统的产品或方案。ELK就是其中的一种。他是开源免费的。由Elasticsearch,Logstash 和 Kibana这三款开源软件组成。通常是配合使用。
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
可以看作一个MVC模型,logstash是controller层,Elasticsearch是一个model层,kibana是view层。 因为Logstash收集性能不好,所以往往用Filebeat来收集,而logstash只是做处理。
Elasticsearch
Elasticsearch是一个基于Apache Lucene(TM)(java编写的可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库)的开源搜索引擎。Elasticsearch也是用java开发的。关键是他通过简单的RESTful API隐藏了Lucene的复杂性,从而让全文搜索变得简单。
Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。
可以总结3个特点:
- 分布式。他的每个字段都被索引,并且可搜索
- 实时搜索与数据分析
- 可扩展
所有的这些功能被集成到一个服务里面,你的应用可以通过简单的RESTful API、各种语言的客户端甚至命令行与之交互。
他易学易用学习和部署的成本低。
官方网站:https://www.elastic.co/products
Logstash
Logstash 是用来收集分析存储数据的。使用 JRuby 语言编写。
使用的时候我们需要为它指定Input和Output(当然Input和Output可以为多个)。由于我们需要把Java代码中Log4j的日志输出到ElasticSearch中,因此这里的Input就是Log4j,而Output就是ElasticSearch。
Kibana
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
参考:
elastic 官网文档: https://www.elastic.co/guide/cn/elasticsearch/guide/current/distributed-cluster.html
Elasticsearch权威指南:https://es.xiaoleilu.com/010_Intro/05_What_is_it.html
ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台: https://my.oschina.net/itblog/blog/547250