ELK初探
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
什么是ELK?
ELK又被称为ELK Stack,既然被称为Stack,说明它并不是某一种技术,它是Elastic公司推出的一整套日志收集、分析和展示的解决方案。ELK分别为3个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。下面我们分别来介绍这三个项目。
Elastic Search
Elastic Search(简称ES)毫无疑问是ELK的核心,他是一个分布式的开源搜索和分析引擎,适用于几乎所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。说到Elastic Search就不能不提Apache Lucene。Lucene是一个高性能、全功能的全文检索引擎库,但其仅仅是一个库,需要使用Java将Lucene集成到应用程序中,并且需要一定的信息检索学知识才能了解其工作原理。
而Elasticsearch 同样使用 Java 编写,其内部使用 Lucene 做索引与搜索,但它隐藏了Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API,从而使全文搜索变得简单。同时,针对大数据场景,ES可以分布式部署于上千台节点,处理PB级数据。下面介绍几个ES的基本概念
集群(Cluster)
集群是一个或多个节点(服务器)的集合,这些节点负责保存全部数据,并在所有节点之间提供联合索引和搜索功能。
节点(Node)
节点是一台服务器,它是群集的一部分,存储数据并参与群集的索引和搜索功能。
索引(Index)
索引是具有相似特征的文档的集合。 例如,可以为客户数据创建索引,为产品目录创建另一个索引,为订单数据创建另一个索引。 索引由名称标识(必须全为小写),并且对该索引中的文档执行索引,搜索,更新和删除操作时,该名称用于引用索引。
倒排索引(inverted index)
Elasticsearch 使用倒排索引(也称为反向索引)来进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。而一般关系型数据库所用的正向索引(forward index)如果需要通过关键词来所某个文档,需要遍历全部文档,对于全文检索来说,效率低下。
Logstash
Logstash是一个开源的数据收集引擎,可以为ES收集来自不同数据源的数据,并利用其丰富的过滤器,对数据进行实时解析和转换,而ES并不是logstash的唯一输出选择,它同样可以为数据库、消息队列、云存储等多种应用提供数据。
工作原理
如上图,Logstash事件处理管道包括三个阶段:输入→过滤→输出。输入会生成事件,过滤器会对其进行修改,输出会将它们发送到其他地方。输入和输出支持编解码器,使您可以在数据进入或退出管道时对其进行编码或解码,而不必使用单独的过滤器。
输入(Input)
Logstash可以在同一时间从不同的常用来源捕捉数据,比如日志、指标、Web应用和数据存储等。
筛选器(Filter)
筛选器是Logstash管道中的中间处理设备。如果事件符合特定条件,则可以将过滤器与条件语句结合使用,对事件执行操作。比如常用的过滤器插件grok,它可以将非结构化的日志机构化,将日志消息分解成逻辑命名的字段,便于查询、分析和可视化。
输出(Output)
输出是Logstash管道的最后阶段。一个事件可以通过多个输出,但是一旦完成所有输出处理,该事件就完成了执行。根据不同的用途,logstash的输出到不同的下游,比如这些经过筛选的数据如果用于分析,就会被输出到Elastic Search或者MongoDB,如果用于监控就会被输出到Nagios或者Zabbix,如果用于存档就会被输出到HDFS或者S3。
Kibana
Kibana是一个开源的分析和可视化平台,用来搜索、查看储存在ES所以含中的数据。Kibana强大的交互功能可以使用户轻松地执行高级数据分析,并且以各种图表、表格和地图的形式可视化数据,其展示界面基于浏览器,简单易懂,能够快速创建和共享动态仪表板,实时显示ES查询的变化。
Beats
Beats是ELK stack中后来加入的一个组件,它是一个轻量级的数据采器,我们知道logstash也具有数据采集功能,但由于logstash是基于java开发,需要依赖虚拟机,同时又要进行数据处理,因此在性能方面并不令人满意。而beats在数据收集层面上并不进行过于复杂的数据处理,只是进行数据采集并传输给下游,另一方便,由于beats采用go语言开发,go是一种系统编程语言,具有并发友好以及部署方便的特点,能够在不依赖虚拟机的情况下运行,因此在数据采集方面性能优于logstash。
Beats以libbeat为核心库的架构,方便用户创建出适合于不通类型数据采集的Beats。目前官方负责维护的Beats和所收集的数据有以下几种。
Auditbeat|审计数据|
Filebeat|日志文件|
Functionbeat |云端数据|
Heartbeat |可用性监测数据
Journalbeat |系统日志
Metricbeat |系统或服务的轻量型指标
Packetbeat |网络数据
Winlogbeat |Windows事件日志
通过Beats采集的数据可以直接传输到ES,如果需要事先处理,也可以先发送到Logstash进行解析,然后再传输给ES,下图是Beats的常见使用方法。
图片来源:https://www.elastic.co/guide/en/beats/libbeat/7.x/beats-reference.html#beats-reference
部署一个ELK
本例使用了滴滴云的虚拟机,因为是一个简单的demo,我们会把所有组件部署到一个虚机上,所以采用了配置较高的虚机,4核8G,40G高效云盘,操作系统为Centos 7.5。登陆后首先用sudo su命令切换到root用户。
- 安装JDK8并设置环境变量。
- 安装Elastic Search
编辑配置文件/usr/local/elasticsearch-5.3.0/config/elasticsearch.yml
一定要用非root用户来启动ES,这里用滴滴云默认的登录用户dc2-user,将ES文件的属组和属主变为dc2-user。
启动ES并在后台运行。
访问本机的9200端口:
说明ES已经正常运行。
安装Kibana
出于安全考虑,我们现在配置文件中设置仅允许访问本机地址。
启动Kibana并在后台运行。
如果看到以下输出,说明kibana启动成功。
这里之所以没有放开Kibana的外方访问是因为Kibana本身无法鉴权,任何人都可以直接访问,因此这里我们用nginx来做身份验证,可以直接用yum install nginx来安装。
编辑配置文件/etc/nginx/nginx.conf,在http模块中添加以下内容:
生成用户名和密码文件。
如果没有htpasswd命令,需要安装httpd-tools,yum install -y httpd-tools。
启动nginx,systemctl start nginx,通过外网IP的8081端口访问kibana。注意,在滴滴云上如果需要外网访问某端口,需要在安全组中打开相应端口。
输入用户名和密码后可以看到Kibana的页面。
我们现在尝试在ES中插入一条日志。
成功后,在Kibana中创建索引匹配规则。
创建完成后可以在discover中可以查看到这条日志。
安装Logstash
Logstash的主要功能就是对输入的数据进行处理然后输出,因此就要为这些数建立一个通道,通过修改一下配置文件来创建通道:
启动Logstash。
如果看到以下信息,说明Logstash启动成功。
安装Filebeat
本例中的Beats我们选择Filebeat来收集本机的/var/log/nginx/以.log结尾的日志。
下载安装Filebeat。
配置数据采集和输出属性:
默认配置是向ES输出:
修改为向logstash输出。
配置文件中采集/var/log/nignx下以.log结尾的文件。
启动Filebeat。
在Kibana中创建新的pattern。
创建完成后可以到Discover中看到日志信息。
点击source可以看到总共收集了2个日志,access.log和error.log。
展开可以看到日志的详细信息,比如我们要看error.log的详细信息。
这样error.log的详细信息就展示出来了。
总结
至此,我们完成了一个简单的ELK应用,其中还包含了Filebeat,符合官网的标准ELK+beat架构。
图片来源:https://www.elastic.co/cn/what-is/elk-stack
参考链接:
https://blog.csdn.net/u011142688/article/details/78499332
https://blog.csdn.net/u011142688/article/details/78499348
作者:贺子一
- Elastic中国开发者大会的精彩日程现已上线
- es-for-Laravel: Composer 包安装, Laravel 最简单的方式操作 Elasticsearch
- springboot整合elasticsearch全文检索入门
- Elasticsearch中mapping属性_source和_store
- ElasticSearch属性字段Doc Values 和 Fielddata
- elasticsearch的查询流程
- Elasticsearch Doc与Segment原理
- ElasticSearch(进阶概念)
- Elasticsearch中的倒排索引结构
- ElasticSearch复杂关系数据的存储方式
- 微服务业务日志收集方案
- Python插入Elasticsearch操作方法解析
- Flink漫谈