目录
1.7 缓存/消息队列(redis. kafka. RabbitMQ等)
2. ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)
3.1 上传elasticsearch-5.5.0.rpm到/opt目录下
4.1 编译安装 node,这边只演示node2上,node1上的操作相同
4.3 安装 Elasticsearch-head 数据可视化工具
4.4 修改 Elasticsearch 主配置文件(这边展示node1的,node2与之相同)
4.6 浏览器访问:http://192.168.119.20:9100/
5. ELK Logstash 部署(在 Apache 节点上操作)
5.2 测试 Logstash(Apache)与elasticsearch(node)功能是否正常,做对接Logstash这个命令测试
6. ELK Kiabana 部署(在 Node1 节点上操作)
6.4 验证 Kibana,浏览器访问 http://192.168.119.20:5601
6.5 将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
6.6 浏览器访问http://192.168.119.20:9100/测试,查看索引信息能发现两个日志
6.7 浏览器访问http://192.168.119.20:5601
一. ELK概述
1. 概述
1.1 ElasticSearch
ElasticSearch是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志
Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档
1.2 Kiabana
Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总. 分析和搜索重要数据
1.3 Logstash
Logstash作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤. 分析. 丰富. 统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch
Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输. 格式处理. 格式化输出。Logstash 具有强大的插件功能,常用于日志处理
- input:设置数据来源
- filter:可以对数据进行加工处理过滤,可以做复杂的处理逻辑。这个步骤不是必须的
- output:设置输出目标,如elasticSearch等
1.4 Filebeat
Filebeat 是一款轻量级的开源日志文件数据搜索器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 Logstash 进行解析,或是直接发给 ES 存储,性能上相比运行于 JVM 上的 Logstash 优势明显,是对它的替代。
1.5 filebeat 结合 logstash 带来好处
- 通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
- 从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
- 将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
- 使用条件数据流逻辑组成更复杂的处理管道
1.6 日志的集中化管理 beats 包括四种工具
Packetbeat(搜索网络流量数据)
Topbeat(搜索系统. 进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集 Windows 时间日志数据)
1.7 缓存/消息队列(redis. kafka. RabbitMQ等)
可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。
1.8 Fluentd
Fluentd是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低. 资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用. 资源消耗更少. 性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案
在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件. 过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储
2. 完整日志系统的基本特征
- 收集:能够采集多种来源的日志数据
- 传输:能够稳定的把日志数据解析过滤并传输到存储系统
- 存储:存储日志数据
- 分析:支持 UI 分析
- 警告:能够提供错误报告,监控机制
3. ELK工作原理
- AppServer 是一个类似于 Nginx、Apache 的集群,其日志信息由 Logstash 来收集
- 往往为了减少网络问题所带来的瓶颈,会把 Logstash 服务放入前者的集群内,减少网络的消耗
- Logstash 把收集到的日志数据格式化后输出转存至 ES 数据库内(这是一个将日志进行集中化管理的过程)
- 随后,Kibana 对 ES 数据库内格式化后日志数据信息进行索引和存储
- 最后,Kibana 把其展示给客户端
总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理
二. Elasticsearch的介绍
提供了一个分布式多用户能力的全文搜索引擎
Elasticsearch的核心:
1. 接近实时(NRT)
Elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
2. 集群(cluster)
一个集群就是由一个或者多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索功能。
集群有一个唯一性标示的名字,默认是Elasticsearch,集群的名字很重要,每个节点是基于集群名字加入到集群中的。因此,确保在不同的环境中使用不同的集群名字。
一个集群可以只有一个节点,建议在配置Elasticsearch时,配置成集群模式。
Elasticsearch具有集群机制,节点通过集群名称加入到集群中,同时在集群中的节点会有一个自己唯一的身份标识(自己的名称)
3. 节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。也可自己定义,名字很重要,在集群中用于识别服务器对应的节点
节点可以通过指定集群名字来加入到集群中。默认情况下,每个节点被设置成加入到Elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为Elasticsearch的集群。
4. 索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。
一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对对应于这个索引中的文档进行索引. 搜索. 更新和删除的时候。都要使用到这个名字。在一个集群中,可以定义任意多的索引。
5. 类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。
通常会为具有一组共同字段的文档定义一个类型。
6. 文档(document)
一个文档是一个可被索引的基础信息单元
在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型
7. 分片和副本(shards & replicas)
也是es作为搜索引擎比较快的原因
实际情况下,索引存储的数据可能超过单个节点的硬件限制。为了解决这个问题,Elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要的分片数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
7.1 分片的主要原因
水平分割扩展,增大存储量
分布式并跨越分片操作,提高性能和吞吐量
分布式分片机制和搜索请求的文档如何火鬃完全是由Elasticsearch控制的,这些对用户是完全透明的
为了健壮性,建议有一个故障切换机制,为此,Elasticsearch让我们将索引分片复制一份或多份,称之为分片副本
7.2 分片副本的原因
- 高可用性,以应对分片或者节点故障。处于这个原因,分片副本要在不同的节点上
- 增大吞吐量,搜索可以并行在所有副本上执行
总之,每个索引可以被分成多个分片。一个索引可以被复制0次或者多次。一旦复制了,每个索引就有了主分片 (作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在指定任何时候动态的改变副本的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外的5个副本分片(一个完全拷贝),这样的话每个索引总共有10个分片。
8. 关系型数据库和ElasticSearch中的对应关系
关系型数据库 | Elasticserch |
---|---|
数据库database | 索引index,支持全文索引 |
表table | 类型type |
数据行row | 文档document。但不需要固定结构,不同文档可以具有不同字段集合 |
数据列cloumn | 字段field |
模式schema | 映像mapping |
三. Logstash
1. Logstash简介
Logstash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),Logstash可配置单一的代理端与其他开源软件结合,以实现不同的功能
- 是一款强大的数据处理工具、
- 可实现数据传输,格式处理,格式化输出
- 数据输入、数据加工(如过滤,改写等)以及数据输出
-
1.1 常用插件
- input:收集源数据(访问日志、错误日志等)
- Filter Plugin:用于过滤日志和格式处理
- Output:输出日志