-
2022-07-06 20:16:28
引言
随着业务量的增长,每天业务服务器将会产生上亿条的日志,单个日志文件达几个GB,这时我们发现用Linux自带工具,cat grep awk 分析越来越力不从心了,而且除了服务器日志,还有程序报错日志,分布在不同的服务器,查阅繁琐。
一、ELK简介
ELK是三个软件的统称,即Elasticsearch、Logstash和Kibana三个开源软件的缩写。这三款软件都是开源软件,通常配合使用,并且都先后归于Elastic.co企业名下,故被简称为ELK协议栈。ELK主要用于部署在企业架构中,收集多台设备上多个服务的日志信息,并将其统一整合后提供给用户。它可以从任何来源、任何格式进行日志搜索、分析与可视化展示。
ELK官网网址如下:https://www.elastic.co/cn/。
1、ELK日志分析系统组成
在ELK架构中,Elasticsearch、Logstash和Kibana三款软件作用如下:
- elasticsearch (es) :通过搭建群集;存储日志数据,索引日志数据
- logstash :收集日志,收集到了后给es存储
- kibana :视图形式展现日志信息,更加人性化
1.1 Elasticsearch(es)
Elasticsearch是一个高度可扩展的全文搜索和分析引擎,基于Apache Lucence(事实上,Lucence也是百度所采用的搜索引擎)构建,能够对大容量的数据进行接近实时的存储、搜索和分析操作。
1.2 Logstash
Logstash是一个数据收集引擎,它可以动态的从各种数据源搜集数据,并对数据进行过滤、分析和统一格式等操作,并将输出结果存储到指定位置上。Logstash支持普通的日志文件和自定义Json格式的日志解析。
1.3 Kibana
Kibana是一个数据分析和可视化平台,通常与Elasticsearch配合使用,用于对其中的数据进行搜索、分析,并且以统计图标的形式展示。
2、日志处理步骤
- 将日志进行集中化管理
- 将日志格式化(Logstash)并输出到Elasticsearch
- 对格式化后的数据进行索引和存储(Elasticsearch)
- 前端数据的展示(Kibana)
二、Elasticsearch
1、Elasticsearch概述
提供了一个分布式多用户能力的全文搜索引擎
2、Elasticsearch核心概念
2.1 接近实时(NRT)
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
2.2 cluster集群,ES是一个分布式的系统
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。 —个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。es具有集群机制,节点通过集群名称加入到集群中,同时在集群中的节点会有一个自己的唯一身份标识(自己的名称)
2.3 Node节点,就是集群中的一台服务器
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。 节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。
2.4 index索引
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引、一个产品目录的索引、还有一个订单数据的索引。一个索引用一个名字来标识(必须全部是小写字母组合),并且当我们要对相应的索引中的文档进行索引、收缩、更新和删除的时候,都要用到这个名字。在一个集群中,可以定义多个索引。(索引相对于关系型数据库的库)
类型相对于关系型数据库的表 ——》索引(库)-》类型(表)-》文档(记录)
2.5 类型(type)
类型(type)在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类分区,其寓意完全由你来定义。通常,会为具有一组共同字段的文档定义一个类型。比如:我们假设运营一个博客平台并且将所有的数据存储到一个索引中,在这个索引中,你可以为用户数据定义一个类型,为博客数据定义一个类型,也可以为评论数据定义另一个类型。(类型相对于关系型数据库的表)
2.6 文档(document)
文档就是最终的数据了,可以认为一个文档就是一条记录。是ES里面最小的数据单元,就好比表里面的一条数据
2.7 分片和副本(shards & replicas)
在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
三、Logstash
1、Logstash简介
- —款强大的数据处理工具
- 可实现数据传输、格式处理、格式化输出
- 数据输入(从业务输入)、数据加工(如过滤、改写等)以及数据输出(输出到Elasticsearch群集)
2、Logstash的主要组件
- shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
- indexer:日志存储者,负责接收日志并写入到本地文件
- broker:日志hub,负责连接多个shipper和多个indexer
- search and storage:允许对事件进行搜索和存储
- web interface:基于Web的展示界面
以上组件在Logstash架构中可以独立部署,因此提供了很好的集群扩展性
四、Kibana
1、Kibana简介
- 一个针对Elasticsearch的开源分析及可视化平台;
- 搜索、查看存储在Elasticsearch索引中的数据;
- 通过各种图标进行高级数据分析及展示;
- 让海量数据更容易理解;
- 操作简单,基于浏览器地用户界面就可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态;
- 设置安装Kibana非常简单,无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch监测。
2、Kibana主要功能
(1)Elasticsearch无缝之集成。Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。
(2)整合数据:Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。
(3)复杂数据分析:Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。
(4)让更多团队成员受益:强大的数据库可视化接口让各业务岗位都能够从数据集合受益。
(5)接口灵活,分享更容易:使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。
(6)配置简单:Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行。
(7)可视化多数据源:Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache Flume、Fluentd等。
(8)简单数据导出:Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。五、ELK架构
如上图所示,Logstash安装在各个设备上,用于收集日志信息,收集到的日志信息统一汇总到Elasticsearch上,然后由Kibana负责web端的展示。其中,如果终端设备过多,会导致Elasticsearch过载的现象,此时,我们可以采用一台Redis设备作为消息队列,以暂时缓存数据,避免Elasticsearch压力突发。六、ELK优点
- 处理方式灵活。 Elasticsearch是全文索引,具有强大的搜索能力。
- 配置相对简单。 Kibana的配置非常简单,Elasticsearch则全部使用Json接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单。
- 检索性能高。 ELK架构通常可以达到百亿级数据的查询秒级响应。
- 集群线性扩展。 Elasticsearch本身没有单点的概念,自动默认集群模式,Elasticsearch和Logstash都可以
- 灵活扩展。
- 页面美观。 Kibana的前端设计美观,且操作简单。
未完待续
下章会讲解如何搭建部署ELK日志分析系统,敬请期待!!!
更多相关内容 -
Centos7下搭建ELK日志分析系统
2020-11-02 15:17:00本文档记录了个人在centos7环境下搭建ELK日志分析系统的步骤及遇到的问题、处理记录。明细罗列了本次搭建的系统环境和软件版本,操作系统为centos7.6,elk对应版本为7.9.3, redis版本为6.0.6。受限于更明细的环境差别... -
ELK日志分析系统
2018-04-30 09:54:55进行日志处理分析,一般需要经过一下几步: (1)将日志进行集中化管理 (2)将日志格式化(Logstash)并输出到Elasticsearch (3)对格式化后的数据进行索引和存储(Elasticsearch) (4)前端数据的展示(Kibana) -
快速搭建ELK日志分析系统
2021-01-07 10:36:39官网地址:...ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结 -
ELK 日志分析系统
2021-11-18 14:13:41文章目录前言一、ELK 日志分析系统简介1.日志服务器2.ELK 日志分析系统2.1Elasticsearch(ES 数据库):2.2Logstash:2.3Kibana:3.日志处理步骤4.将日志进行集中化管理(beats )二、Elasticsearch 介绍1.概述2.核心...前言
- 日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志应用程序日志和安全日志,
- 当你管理上百台服务器时,再使用传统的方法查询日志,既费时又费力,为了处理这些问题,我们可以使用ELK(日志分析系统)
- ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求
一、ELK 日志分析系统简介
1.日志服务器
- 提高安全性:仅是基于日志来恢复和定位故障,是很困难的
- 集中存放日志,即集中化管理
- 缺陷:对日志的分析困难,因为集中化管理,所以信息量更加巨大
2.ELK 日志分析系统
由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成
2.1Elasticsearch(ES 数据库):
- 是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志
- 最重要的两个功能在于索引与存储
2.2Logstash:
- 收集日志
- 转存至 ES
2.3Kibana:
- 是一个展示界面
- 数据源来自 ES
3.日志处理步骤
- 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash
- Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中
- Elasticsearch 对格式化后的数据进行索引和存储
- Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示
4.将日志进行集中化管理(beats )
beats是–组轻量级采集程序的统称,这些采集程序包括并不限于:
- filebeat: 进行文件和目录采集,主要用于收集日志数据。 (elk -》elfk)
- metricbeat:进行指标采集,指标可以是系统的,也可以是众多中间件产品的,主要用于监控系统和软件的性能。
- packetbeat:通过网络抓包、协议分析,对–些请求响应式的系统通信进行监控和数据收集,可以收集到很多常规方式无法收集到的信息。
- winlogbeat: 专门针对windows的event log进行的数据采集
- Heartbeat: 系统间连通性检测,比如icmp, tcp, http等系统的连通性监控。
二、Elasticsearch 介绍
1.概述
- 提供了一个分布式多用户能力的全文搜索(索引)引擎,开源,使用 Java 开发
- 分布式即数据不会放在一个地方
2.核心概念
2.1 接近实时(NRT)
- 指索引和数据处理的能力,即从索引一个文档直到这个文档能够被搜索到仅有一个轻微的延迟(一般是1秒)
2.2 集群(Cluster)
- 一个内部组件 ES 的架构(特性:ES 具有集群机制,节点通过集群名称加入到集群时,同时在集群中的节点会有一个自己的唯一身份标识)
- 一个集群就是由一个或多个节点组织在一起,它们共同持有你的整个的数据,并一起提供索引和搜索功能,其中一个节点为主节点,其可通过选举产生,并提供跨节点的联合索引和搜索的功能
- 集群有一个唯一性的标示的名字,默认为 Elasticsearch,集群的名字很重要!每个节点都是基于集群的名字加入到集群中的。因此,确保在不同环境中使用不同的集群名字
2.3 节点(node)
- 有集群必定有节点
- 节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识的,默认是在节点启动时随机分配的字符名
- 节点名字也很重要,用于在集群中识别服务器对应的节点
- 节点可以通过指定集群名字加入到集群中。默认情况下,每个节点被设置为加入到 Elasticsearch 群集
- 如果启动了多个节点,假设能自动发现对方,那么他们将会自动组件一个名为 Elasticsearch 的集群
2.4 索引(index)
索引(库)→索引类型(表)→索引的具体文档(记录)
索引根据以上这个方式来进行数据(位置)定位
- 一个索引就是一个拥有几分相似特征的文档的集合
- 一个索引由一个名字来标识(必须是全小写),每当我们需要对这个索引中的文档进行索引、搜索、更新和删除的时候,都需要使用到这个名字
- 相当于关系数据库中的库
2.5 类型(type)
- 在一个索引中,你可以定义一种或多种类型
- 一个类型是你的索引的一个逻辑上的分类/分区,其语义由你自定义
- 类比与关系数据库中的表
2.6 文档(document)
- 一个文档是一个可被索引的基础信息单元
- 类比于关系数据中的列
2.7 分片(Shard)
- 在实际情况下,索引存储的数据可能超过单个节点的硬件限制,如一个巨大的文档需要1TB的空间,可能并不需要存储在单个节点的磁盘上,或者这样子从单个节点上搜索请求速度会非常慢。为了解决这个问题,Elasticsearch 提供将索引分层多个分片的功能
- 如,一个40G的文件,分为两份20G的文件,存放至两个节点上,这样读取这个40G的文件时,会效率更快
- 当在创建索引时,可以定义想要分片的数量,每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上
- 分片的两个最主要特点就是: 水平分割扩展,增大存储量
- 能够分布式并行跨分片操作,提供性能和吞吐量
- 分布式分片的机制和搜索请求的文档如何汇总是有 ES 进行控制的,且对用户完全透明
2.8 副本(Replicas)
-
网络问题等很多方面的风险可能会接踵而来,为了健壮性,强烈建议要有一个故障切换机制,无论何种遇到何种故障,都能防止分片或节点不可用(单点故障)
-
为此,ES 让我们将索引分片复制一份或多份,称之为分片副本或副本
-
核心是为了容灾,不过也可以处理任务
-
分片加上副本的使用:例如,四台主机同时处理一项任务,理论上效率可以提高四倍!
副本也有两个最重要的特点:
- 高可用性,以应对分片或节点故障,故此,分片副本要在不同的节点上
- 高性能,增加吞吐量,搜索可以在所有的副本上执行
2.9 小结
- 总之,每个索引可以被分成多个分片,且一个索引也可以被复制0次(即没有复制)或多次
- 一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别
- 分片和副本的数量可以在索引创建的时候指定,在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量
- 默认情况下,ES 中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片
三、Logstash 介绍
- 一款强大的数据处理工具,完全开源,基于消息(message-based)的简单架构,并运行在 java 虚拟机(JVM)上
它只做三件事:
- 实现数据传输(input)
- 格式处理(filter)
- 格式化输出(output)
数据输入、数据加工(如过滤,改写等)以及数据输出,即收集日志和输出日志,供以后使用(如搜索)
四、Kibana 介绍
1.概述
- 一个针对 Elasticsearch 的分析及提供友好、可视化的 Web 平台,开源免费!
- 用于搜索、查看存储在 Elasticsearch 索引中的数据
- 可以通过各种图表进行高级数据分析及展示,让海量数据更容易被理解
- 它操作简单,基于浏览器的用户界面,可以快速创建仪表板(Dashboard)实时显示 ES 查询动态
- 设置简单
2.主要功能
- 与 Elasticsearch 无缝之集成:ELK 初始是由 ES 收购了另外两家个技术(Logstash+Kibana),把其糅合在一起进行开发整合,形成了一个完整的技术
- 整合数据,复杂数据分析:能够很好的处理海量数据,节省我们分析日志数据的时间,降低其复杂度
- 让更多团队成员受益:有了这么一个公共的展示界面,只要有权限就都能进去查看,强大的数据可视化接口让各岗各业都能够从数据集合中收益
- 接口灵活,分享更容易: API 可以很方便的被调用,并将可视化数据快速交流,方便查看
- 配置简单,可视化多数据源:配合和启动非常简单,用户体验良好,可以对不止一种数据或日志类型进行展示,并且是精细化展示
- 简单数据导出:可以很方便的导出感兴趣的数据,与其他数据集合并融合后快速建模分析,从而发现新结果
五、拓展:EFK
ELK 的构成:
- Elasticsearch(数据库)
- Logstash(数据处理工具)
- Kibana(展示界面,数据来源于 ES)
EFK 的构成(功能性分离 + 抗高并发):
- Elasticsearch
- Logstash(↓仅做数据格式处理的工作,并发量太大时仅靠 Logstash 很难承受,而且它很吃资源)
- Filebeat (↑搜集文件数据,轻量级的日志收集工具,性能比上者强)
- Kafka(服务之间传递数据的消息代理,承载数据的交互及传输,抗高并发能力相对而言较强,每秒能处理几十万的并发量)
- Kibana
- Redis(缓存,减压)
EFK 是 ELK 的 plus 版,多用于业务体量非常大,及对日志收集、格式转换并且处理的一个复杂程度非常大的架构
-
ELK日志分析系统.pptx
2022-01-04 08:34:29ELK日志分析系统.pptx -
elk日志分析系统
2017-02-16 00:06:33 -
ELK日志分析系统搭建
2018-05-01 15:54:31ELK(Elasticsearch、Logstash和Kibana) 日志分析 系统搭建 -
ELK企业日志分析系统部署实战!理论+实战!
2021-01-09 10:08:57文章目录前言一:理论部分1.1:什么是ELK日志分析系统?有什么作用?1.2:什么原因催生了ELK日志分析系统?1.3:ELK日志分析系统的开源工具解析1.3.1:Logstash解析1.3.2:ElasticSearch解析1.3.3:Kiabana解析1.4:... -
windows安装ELK日志分析系统
2018-12-28 09:01:43windows系统安装ELK日志分析系统,主要包括elasticsearch,logstash,kibana,nssm,nxlog -
ELK 日志分析系统的部署
2022-04-26 20:08:54文章目录一、ELK前言1.1 需要...系统日志:为监控做准备,要收集tomcat系统日志,tomcat所在节点的日志 服务日志:比如数据库mysql,收集慢查询日志、错误日志、普通日志,要收集tomcat服务日志。 业务日志(业务日
一、ELK前言
1.1 需要收集的日志
-
系统日志:为监控做准备,要收集tomcat系统日志,tomcat所在节点的日志
-
服务日志:比如数据库mysql,收集慢查询日志、错误日志、普通日志,要收集tomcat服务日志。
-
业务日志(业务日志必须收集):业务口子日志在log4j,log4j是由java环境开发的,跑在tomcat上
1.2 日志收集后,如何可视化
-
kibana
-
grafana:可以以地图的方式展示,功能更全面一些,界面会好看一些
1.3 日志收集可视化后,怎么使用
-
用于给大数据分析,作为立体化展示的一个数据源
-
给研发去使用(排障、解决bug等)
-
统计数据流量,作为分析报告的数据源
1.4 要怎么收集日志
我们需要有针对性的去收集日志,日志收集是根据我们设置的日志级别来看的,对于不是很重要的日志,日志级别调高一点。比如error的时候报给我,普通日志不用报。这样可以有效降低日志量。像这种业务日志,我们不适合调error级别,我们需要调成warning级别。
二、ELK简介
2.1 ElasticSearch介绍
Elasticsearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,快速,安装使用方便操作。
2.2 ElasticSearch核心概念
- 接近实时
ElasticSearch是一个接近实时的搜索平台
这就是说,我们从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
- 集群化
集群每一台服务器都有自己的一个唯一标识,比如说id,标识自己在集群中的一个定位。
个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。
- 节点
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。
- 索引
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品日录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
- 类型
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑.上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
- 文档
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON 格式来表示,而JSON是一个到处存在的互联网数据交互格式。 在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。
- 分片和副本(默认情况下是5个分片、1个副本,这意味着,如果你的集群至少有两个节点,你的索引将会有5个分片和另外5个副本,)
在正常情况下,单个节点的存储和索引以及I/O读写效率是很容易遇到瓶颈的。为了提高瓶颈上限,所以在这里,对于存储进行一个分布式,多个节点做一个任务。可以提高存储上线,可以提高搜索上限,同时可以减轻压力均摊。
elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
-
分片的两个最主要原因:
(1)水平分割扩展,增大存储量
(3)分布式并行跨分片操作,提高性能和吞吐量 -
分布式分片的机制和搜索请求的文档如何汇总完全是由elasticsearch控制的,这些对用户而言是透明的。
-
网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。
-
副本也有两个最主要原因:
(1)高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。
(2)增加了读写性能(qps性能),增大吞吐量。搜索可以并行在所有副本上执行。
2.2 ELK里面有哪些组件
Logstash(日志收集):主要用于收集、输出、格式化数据
Elasticsearch(日志存储和搜索):用于建立索引,因为它的副本和分片,他的搜索能力很强。
PS:(ES版本 7.10 和 7.20),特性是:启动时,必须为非root用户。es启动时很吃内存,可能会卡很久。Kibana(展示):作为展示用的,展示的话在于日志收集后、由es创建建立索引,并且最后传给kibana,通过kibana展现出来。他的兼容性特别好。
2.3 ELK的工作原理
-
在所有需要收集日志的服务器上部署Logstash; 或者先将日志进行集中化管理在日志服务器上, 在日志服务器上部署 Logs tash。
-
Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
-
Elasticsearch 对格式化后的数据进行索引和存储。
-
Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
三、 ELK日志分析系统集群部署
需求环境: 服务器类型 系统和IP地址 需要安装的组件 硬件方面 Node1节点 CentOS7 192.168.24.20 Elasticsearch 、 Kibana 2核4G Node2节点 CentOS7 192.168.24.30 Elasticsearch 2核4G Apache节点 CentOS7 192.168.24.40 Logstash Apache 2核4G
3.1 ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)
3.1.1 前期准备
#更改主机名 Node1节点: hostnamectl set-hostname node1 Node2节点: hostnamectl set-hostname node2 Apache节点: hostnamectl set-hostname httpd #配置域名解析 vim /etc/hosts 192.168.24.20 node1 192.168.24.30 node2 192.168.24.40 httpd #查看Java环境,如果没有安装,yum -y install java java -version
#更改主机名
#配置域名解析
#查看Java环境
3.1.2 部署 Elasticsearch 软件
(1)#上传elasticsearch-5.5.0.rpm到/opt目录下 cd /opt rpm -ivh elasticsearch-5.5.0.rpm (2)#加载系统服务 systemctl daemon-reload systemctl enable elasticsearch.service (3)#修改elasticsearch主配置文件 cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak vim /etc/elasticsearch/elasticsearch.yml --17--取消注释,指定集群名字 cluster.name: my-elk-cluster --23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2 node.name: node1 --33--取消注释,指定数据存放路径 path.data: /data/elk_data --37--取消注释,指定日志存放路径 path.logs: /var/log/elasticsearch/ --43--取消注释,改为在启动的时候不锁定内存 bootstrap.memory_lock: false --55--取消注释,设置监听地址,0.0.0.0代表所有地址 network.host: 0.0.0.0 --59--取消注释,ES 服务的默认监听端口为9200 http.port: 9200 --68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2 discovery.zen.ping.unicast.hosts: ["node1", "node2"] #查看主配置文件 grep -v "^#" /etc/elasticsearch/elasticsearch.yml ###node2的配置与node1相同####### (4)#创建数据存放路径并授权 mkdir -p /data/elk_data chown elasticsearch:elasticsearch /data/elk_data/ (5)#启动elasticsearch是否成功开启 systemctl start elasticsearch.service netstat -antp | grep 9200 (6)#查看节点信息 浏览器访问 ,查看节点 Node1、Node2 的信息 http://192.168.24.20:9200 http://192.168.24.30:9200 #原谅色:green http://192.168.24.20:9200/_cluster/health?pretty http://192.168.24.30:9200/_cluster/health?pretty
#上传elasticsearch-5.5.0.rpm到/opt目录下
#加载系统服务
#修改elasticsearch主配置文件
修改node1上的配置文件:
#修改node2上的配置文件:
#创建数据存放路径并授权
#启动elasticsearch是否成功开启
#查看节点信息
#检查群集状态信息
3.1.3 安装 Elasticsearch-head 插件
- Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
- 安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
(1) node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
(2) phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
(1)#编译安装 node #上传软件包 node-v8.2.1.tar.gz 到/opt yum install gcc gcc-c++ make -y cd /opt tar zxf node-v8.2.1.tar.gz cd node-v8.2.1/ ./configure make -j4 && make install (2)#安装 phantomjs #上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到 cd /opt tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/ cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin cp phantomjs /usr/local/bin (3)#安装 Elasticsearch-head 数据可视化工具 #上传软件包 elasticsearch-head.tar.gz 到/opt cd /opt tar zxf elasticsearch-head.tar.gz -C /usr/local/src/ cd /usr/local/src/elasticsearch-head/ npm install (4)#修改 Elasticsearch 主配置文件 vim /etc/elasticsearch/elasticsearch.yml ...... --末尾添加以下内容-- http.cors.enabled: true #开启跨域访问支持,默认为 false http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有 systemctl restart elasticsearch (5)#启动 elasticsearch-head 服务 #必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。 cd /usr/local/src/elasticsearch-head/ npm run start & #elasticsearch-head 监听的端口是 9100 netstat -lnutp | grep 9100 netstat -lnutp | grep 9200 (6)#通过 Elasticsearch-head 查看 Elasticsearch 信息通过浏览器访问 http://192.168.24.20:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。访问有问题 可以将localhost 改成ip地址 (7)#插入索引 ##登录192.168.24.20 node1主机##### 索引为index-demo,类型为test,可以看到成功创建 [root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}' ####在本机 刷新浏览器输入看索引信息### node1信息动作 01234 node2信息动作 01234 ●上面图可以看见索引默认被分片5个,并且有一个副本 点击数据浏览--会发现在node1上创建的索引为index-demo,类型为test, 相关的信息
#编译安装 node
#安装 phantomjs
#安装 Elasticsearch-head 数据可视化工具
#修改 Elasticsearch 主配置文件(node1和node2相同)
#启动 elasticsearch-head 服务
#浏览器访问:http://192.168.24.20:9100/
#插入索引
3.2 ELK Logstash 部署(在 httpd 节点上操作)
3.2.1 安装 Logstash
(1)#安装httpd并启动 yum -y install httpd systemctl start httpd (2)#安装java环境 yum -y install java java -version (3)#安装logstash cd /opt rpm -ivh logstash-5.5.1.rpm systemctl start logstash.service systemctl enable logstash.service cd /usr/share/logstash/ ls ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
#安装httpd并启动
#安装java环境 检查一下没有就yum
#安装 logstash
3.2.2 测试 Logstash(httpd)与elasticsearch(node)功能是否正常,做对接
Logstash这个命令测试 字段描述解释: ● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash ● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是“空”则默认使用stdin做为输入、stdout作为输出) ● -t 测试配置文件是否正确,然后退出 logstash -f 配置文件名字 去连接elasticsearch (1)#输入采用标准输入 输出采用标准输出---登录192.168.24.20 在Apache服务器上 logstash -e 'input { stdin{} } output { stdout{} }' 22:55:45.980 [[main]-pipeline-manager] INFO logstash.pipeline - Pipeline main started The stdin plugin is now waiting for input: 22:55:46.049 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com ###手动输入 2022-04-26T14:56:14.790Z httpd www.baidu.com www.sina.com ###手动输入 2022-04-26T14:56:27.284Z httpd www.sina.com (2)#使用 rubydebug 输出详细格式显示,codec 为一种编解码器 logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }' 23:01:54.558 [[main]-pipeline-manager] INFO logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500} 23:01:54.584 [[main]-pipeline-manager] INFO logstash.pipeline - Pipeline main started The stdin plugin is now waiting for input: 23:01:54.671 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com { "@timestamp" => 2022-04-26T15:02:09.849Z, "@version" => "1", "host" => "httpd", "message" => "www.baidu.com" (3)##使用logstash将信息写入elasticsearch中 logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.24.20:9200"] } }'
#输入采用标准输入 输出采用标准输–登录192.168.24.20 在 httpd 服务器上
#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
#使用 logstash 将信息写入 elasticsearch 中
3.2.3 定义 logstash 配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。 (1)#给日志目录可读权限 chmod o+r /var/log/messages #让 Logstash 可以读取日志 (2)#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。 vim /etc/logstash/conf.d/system.conf input { file{ path =>"/var/log/messages" #指定要收集的日志的位置 type =>"system" #自定义日志类型标识 start_position =>"beginning" #表示从开始处收集 } } output { elasticsearch { #输出到 elasticsearch hosts => ["192.168.24.20:9200"] #指定 elasticsearch 服务器的地址和端口 index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式 } } (4)#重启服务 systemctl restart logstash (5)#打开浏览器 输入http://192.168.24.20:9100/ 查看索引信息### 多出 system-xxxx
#给日志目录可读权限
#修改 Logstash 配置文件
#重启服务
#浏览器打开http://192.168.24.20:9100/
3.3 ELK Kiabana 部署(在 Node1 节点上操作)
(1)#安装 Kiabana #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm (2)#设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释,Kiabana 服务的默认监听端口为5601 server.port: 5601 --7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址 server.host: "0.0.0.0" --21--取消注释,设置和 Elasticsearch 建立连接的地址和端口 elasticsearch.url: "http://192.168.24.20:9200" --30--取消注释,设置在 elasticsearch 中添加.kibana索引 kibana.index: ".kibana" (3)#启动 Kibana 服务 systemctl start kibana.service systemctl enable kibana.service netstat -natp | grep 5601 (4)#验证 Kibana 浏览器访问 http://192.168.24.20:5601 第一次登录需要添加一个 Elasticsearch 索引: Index name or pattern //输入:system-* #在索引名中输入之前配置的 Output 前缀“system” 单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。 数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果 (5)#将 httpd 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示 vim /etc/logstash/conf.d/apache_log.conf input { file{ path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file{ path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } } output { if [type] == "access" { elasticsearch { hosts => ["192.168.24.20:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.24.20:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } } cd /etc/logstash/conf.d/ /usr/share/logstash/bin/logstash -f apache_log.conf 6.#浏览器访问http://192.168.24.20:9100/测试,查看索引信息能发现 apache_error-2019.04.16 apache_access-2019.04.16 #浏览器访问http://192.168.24.20:5601 点击左下角有个management选项---index patterns---create index pattern ----分别创建apache_error-* 和 apache_access-* 的索引
#安装 Kiabana
#设置 Kibana 的主配置文件
#启动 Kibana 服务
#验证 Kibana,浏览器访问 http://192.168.24.20:5601
#浏览器访问http://192.168.24.20:9100/测试,查看索引信息能发现两个日志
-
-
13-ELK日志分析系统.pdf
2019-08-27 14:58:56这个里面讲了,elk集群部署环境,各个组件的安装以及各个插件的使用,以及如何去分析日志。 -
ELK日志分析平台搭建全过程
2021-02-24 20:27:13当生产环境有很多服务器、很多业务模块的日志需要每时每刻查看时系统:centos6.5JDK:1.8Elasticsearch-5.0.0Logstash-5.0.0kibana-5.0.01、安装JDK下载JDK:...将安装包拷贝至安装服务器/usr/local目录[root@localhost... -
运维必备——ELK日志分析系统
2021-03-30 08:45:10日志分析是运维工程师解决系统故障、发现问题的主要手段目录
前些天发现了一个巨牛的人工智能学习网站,内容通俗易懂、风趣幽默,忍不住想分享一下。对人工智能感兴趣的同学可以去看看哦
点击跳转到网站。一、ELK日志分析系统概述
(1)传统日志服务器的优点与缺点和为什么要使用ELK日志分析系统
通常来说,日志被分散的存储在各自的不同的设备上,如果说需要管理上百台机器,那么就需要使用传统的方法依次登录这上百台机器进行日志的查阅,这样会使得工作效率即繁琐且效率低下。所以就引出了把日志集中化的管理方法。
例如: 开源的syslog,将所有的日志都放在一台服务器上进行汇总。下面就是传统日志服务器的优点和缺点:
- 优点:
(1)提高安全性
(2)集中存放日志 - 缺点:
因为是集中存放日志,所有说对日志的分析是比较困难的
由上得知传统日志服务器的缺点就是不方便工作人员进行日志的统计、检索,那么一般工作人员会使用grep、awk和wc等linux命令进行统计和检索,但是对于更高要求的查询、排序、统计,再加上庞大的机器数量,再让工作人员使用这种方法就显得力不从心了。
而ELK日志分析系统就完美的解决了上面的问题。它是一个开源、实时的日志分析系统。
官方网站是: https://www.elastic.co/products(2)ELK日志分析系统日志的分类
- 系统日志
- 应用程序日志
- 安全日志
日志分析是运维工程师解决系统故障,发现问题的主要手段。系统运维和开发人员可以通过日志了解服务器的软硬件信息,并且可以检查配置过程中的错误以及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时的采取措施纠正错误。
(3)ELK日志分析系统的分类
ELK日志分析系统是由三个完全开源的软件组合而成: Elasticsearch、Logstash、Kibana
——Elasticsearch:
Elasticsearch是一个开源的分布式搜索引擎, 特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 它是基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎。java开发,并且作为apache许可条款下的开放源码发布, 是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定、可靠、快速、安装使用方便。
概念:- 接近实时:(NRT)
Elasticsearch是一个接近实时的搜索平台,这意味着,从一个索引到一个文档直到这个文档能够被搜索到会有一个轻微的延迟(通常是一秒)
- 集群:(cluster)
一个集群就是由一个或者多个几点组织在一起,它们共同持有整个的数据,并且一期提供索引和搜索功能。集群中会有一个节点作为主节点,这个主节点可以通过选举产生,并提供跨节点的联合索引和搜索的功能。
集群会有一个唯一性的标识名称,默认就是elasticsearch,集群的名称很重要,每个节点都是基于集群名称而加入到指定集群的,因此,必须确保在不同环境中使用不同的集群名称。
一个集群可以只有一个节点。
最好在配置elasticsearch的时候,就配置成集群模式
- 节点:(node)
节点就是一台单一的服务器,它是集群的一部分,进行存储数据并且参与集群的索引和搜索功能。
和集群相同,节点也是通过名称来进行标识,默认是在节点启动时随机分配的字符名。也可以进行自定义,该名称用于在集群中识别服务器对应的节点,所以也很重要- 索引:(index)
一个索引就是一个拥有相似特征的文档的集和。
例如: 就像在网上买东西,如果要买裤子,那么你会搜索裤子,然后就会出现各式各样的关于裤子的商品,或者在网上搜索某个明星的名字,就会出现这个明星相关的信息。
在一个集群中,一个索引由一个名字来进行标识,这个名称必须全部都是小写字母,也可以自定义索引。
索引相当于关系型数据库的库
索引(库)——类型(表)——文档(数据)
- 类型:(type)
在一个索引中,用户可以定义一种或者多种类型,一个类型是你的索引的一个逻辑上的分类分区,其语义会完全由用户来定义。
通常来说,会为具有一组共同字段的文档定义一个类型。
例如: 上面说的要买裤子,这个时候如果搜索的是牛仔裤、休闲裤,这种的,其实就是加了一个类型。
类型相当于关系型数据库的表
索引(库)——类型(表)——文档(数据)
- 文档:(document)
一个文档是一个可以被索引的基础信息单元。
例如: 搜索牛仔裤,出来的各式各样的牛仔裤,就可以看作是一个个信息。
在一个索引和类型里面,只要用户需要,可以存储任意多的文档,但是,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和给这个文档分配一个类型
文档相当于关系型数据库的数据
索引(库)——类型(表)——文档(数据)
- 分片和副本:(shards and replicas)
分片: 在实际情况下,索引存储的数据可能超过单个节点的硬件限制,例如:存储10亿个文档需要1tb的空间,1tb的空间可能不适合存储在单个节点的磁盘上,或者说10亿个文档在单个节点的搜索请求太慢了。而为了解决这个问题,elasticsearch提供将索引分成多个分片的功能,当在创建索引时,可以自定义想要分片的数量,每一个分片就是一个全功能的独立的索引,可以位于集群中的任何节点上。
分片的两个最主要的原因:
(1)水平分割扩展,增大存储量
(2)分布式并行跨分片操作,提高了性能和吞吐量副本: 分布式分片的机制和搜索请求的文档如何汇总完全是由elasticsearch控制的,这些对于用户而言是透明的。为了防止网络问题和其他的各种问题在任何时候的不请自来,一些用户建议要有一个故障切换机制,来应对任何故障而导致的分片或者节点的不可用。为此,elasticsearch让用户将索引分片进行复制一份或者多分,而这个就称之为分片副本或者副本。
副本的两个最主要的原因:
(1)高可用性,以应对分片或者节点出现故障,因为这个原因,分片副本要在不同的节点上
(2)增大吞吐量,搜索可以并行在所有副本上执行总的来说,每个索引可以被分成多个分片,一个索引也可以被复制0次(即没有复制)或者多次,一旦复制了,每个索引就有了主分片 (即作为复制源的原来的分片) 和复制分片 (即主分片的拷贝) 的分别。
(也就是 说只要索引被复制了一次,那么就会产生主分片和复制分片也就是两个分片)
分片和副本的数量可以在索引创建的时候指定,在索引创建之后,用户可以在任何时候动态的改变副本的数量,但是之后用户无法改变分片的数量。
默认情况下,Elasticsearch中的每个索引都被分片成5个主分片和1个副本,这意味着,如果用户的集群中至少有两个节点,那么你的索引将会有5个主分片和另外5个副本分片还有一个索引的完全拷贝,这样的化每个索引总共就有10个分片——Logstash:
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤并且将其进行存储。 它是由JRuby语言编写,基于消息(message-based)的简单架构,并且运行在java虚拟机上(即JVM),不同于分离的代理段(agent)或者主机端(server),LogStash可以配置单一的代理段(agent)于其他开源软件结合,来实现不同的功能。
其实Logstash的理念很简单,只做三件事情:
(1)Collect:数据输入
(2)Enrich:数据加工,例如:过滤、改写等
(3)Transport:数据输出别看Logstash只做三件事情,但是通过组合输入和输出,可以变化出多种架构从而实现各种需求。
Logstash主要组件:
- Shipper:
日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
- Indexer:
日志存储者,负责接收日志并且写入到本地文件
- Broker:
日志Hub(中心转发器), 负责连接多个Shipper和多个Indexer
- Search and Storage:
运行对事件进行搜索和存储
- Web Interface:
基于Web的展示界面
正因为上面的组件在Logstash架构中可以独立部署,才提供了更好的集群扩展性
Logstash主机分类
- 代理主机(agent host):
作为事件的传递着(Shipper),将各种日志数据发送至中心主机,只需要运行logstash代理程序(agent) - 中心主机(central host):
可以运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web interface)在内的各个组件,以实现对日志数据的接收、处理和存储。
——Kibana:
Kiabna是一个完全开源的工具,它可以为Logstash和Elasticsearch提供可视化的web界面。 并且可以帮助用户进行汇总、分析和搜索重要的数据日志。使用Kibana,可以通过各种图表进行高级数据分析以及展示。它让海量数据更容易理解,操作简单,基于浏览器的用户界面可以快速创建仪表盘(dashboard,一种图表)实时显示Elasticsearch查询动态。设置Kibana非常简单,无需编写代码,几分钟之内就可以完成Kibana的安装并且启动Elasticsearch索引监测。
Kibana主要功能:-
Elasticsearch无缝之集成:
Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。它还充分利用了Elasticsearch强大的搜索和分析功能 -
整合数据:
Kibana能够更好的处理海量的数据,并且创建柱形图、折线图、直方图等各种图表 -
复杂数据分析:
Kibana提升了Elasticsearch的分析能力,能够更加智能的分析数据,执行数学转换并且根据要求对数据切割分块 -
让更多团队成员收益:
强大的数据库可视化接口让各个业务岗位都能够从数据集和中收益 -
接口灵活,分享更容易:
使用Kibana可以更加方便的创建、保存、分享数据,并且将可视化数据进行快速交流 -
配置简单,可视化多数据源:
KIbana可以非常方便的把来自Logstash、ES-Hadoop、Beats或者第三方技术的数据整合到Elasticsearch,支持的第三方技术包括apache flume、fluentd等 -
简单数据导出:
Kibana可以方便的导出用户感兴趣的数据,并且与其他数据集和、融合后快速建模分析,发现新结果
(4)日志处理的步骤
Logstash收集AppServer产生的log,并且存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据并且生成图表,再返回给Browser。总的来说,整个的过程需要进行以下几个步骤:
(1)将日志进行集中化管理
(2)将日志格式化(Logstash)并且输出到Elasticsearch
(3)对格式化后的数据进行索引和存储(Elasticsearch)
(4)前端数据的展示(Kibana)
二、部署ELK日志分析系统
(1)实验环境
本次实验全部采用centos7.*系统
主机名称 ip地址 扮演角色 内存 node1 192.1683.100.1 node节点 >=2G建议4G node2 192.168.100.2 node节点 >=2G建议4G - node1部署:
(1)elasticsearch:端口 9200
(2)elasticsearch——head插件:端口 9100
(2)Kibana 日志分析平台: 端口 5601 - node部署:
(1)elasticsearch:端口 9200
(2)logstash——日志采集
(2)实验目的
- 配置ELK日志分析集群
- 使用logstash收集日志
- 使用Kibana查看分析日志
(3)实验步骤
1、node1配置
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname node1 [root@Centos7 ~]# su [root@node1 ~]# systemctl stop firewalld [root@node1 ~]# setenforce 0 setenforce: SELinux is disabled [root@node1 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)添加地址到hosts文件,可以解析elk-2主机 [root@node1 ~]# echo '192.168.100.1 elk-1' >> /etc/hosts [root@node1 ~]# echo '192.168.100.2 elk-2' >> /etc/hosts [root@node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.100.1 node1 192.168.100.2 node2 [root@node1 ~]# bash (换一个bash环境更新配置)
2、node2配置
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname node2 [root@Centos7 ~]# su [root@node2 ~]# systemctl stop firewalld [root@noded2 ~]# setenforce 0 setenforce: SELinux is disabled [root@node2 ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)添加地址到hosts文件,可以解析elk-1主机 [root@node2 ~]# echo '192.168.100.1 node1' >> /etc/hosts [root@node2 ~]# echo '192.168.100.2 node2' >> /etc/hosts [root@node2 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.100.1 node1 192.168.100.2 node2 [root@node2 ~]# bash
3、node1和node2共同配置
******(1)安装java环境 [root@node1 ~]# yum -y install java 。。。。。。 完毕! [root@node1 ~]# java -version openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode) ******(2)上传软件包并且安装 [root@node1 ~]# ll 总用量 69660 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 33396354 3月 30 22:08 elasticsearch-5.5.0.rpm -rw-r--r-- 1 root root 37926436 3月 30 22:08 elasticsearch-head.tar.gz [root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm (使用rpm安装) 。。。。。。 ******(3)加载系统服务 [root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch.service Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service. ******(4)更改主配置文件 [root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak (先做一个备份) [root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 。。。。。。 16 # 17 cluster.name: my-elk-cluster #集群名称 18 # 。。。。。。 22 # 23 node.name: node1 #节点服务器名称,node2写node2即可 24 # 。。。。。。 32 # 33 path.data: /data/elk_data #数据存放路径 34 # 。。。。。。 36 # 37 path.logs: /var/log/elasticsearch/ #日志存放路径 38 # 。。。。。。 42 # 43 bootstrap.memory_lock: false #在启动时不锁定内存 44 # 。。。。。。 54 # 55 network.host: 0.0.0.0 #提供服务绑定的ip地址,0.0.0.0表示所有地址 56 # 。。。。。。 58 # 59 http.port: 9200 #侦听端口 60 # 。。。。。。 67 # 68 discovery.zen.ping.unicast.hosts: ["node1", "node2"] #集群发现通过单播传输实现 69 # 保存退出 ******(5)利用scp传输到node2主机,修改部分内容即可 [root@node1 ~]# scp /etc/elasticsearch/elasticsearch.yml root@192.168.100.2:/etc/elasticsearch/elasticsearch.yml The authenticity of host '192.168.100.2 (192.168.100.2)' can't be established. ECDSA key fingerprint is SHA256:VhTZ5YxS5af2rHtfCvyc6ehXh3PD2A8KY2MyE6rHjiU. ECDSA key fingerprint is MD5:e8:41:d2:8a:7e:e9:a9:47:a3:f0:29:be:e9:6d:df:51. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.2' (ECDSA) to the list of known hosts. root@192.168.100.2's password: elasticsearch.yml 100% 2853 3.7MB/s 00:00 ******(6)创建数据存放路径并且授权 [root@node1 ~]# mkdir -p /data/elk_data [root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data/ ******(7)启动elasticsearch并且查看是否成功开启 [root@node1 ~]# systemctl start elasticsearch.service [root@node1 ~]# netstat -anpt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 15622/java
现在就可以使用客户机先验证一下,访问:http://192.168.100.1:9200
查看集群的健康状态,显示:status:‘green’ 则节点健康运行,访问:http://192.168.100.1:9200/_cluster/health?pretty
查看集群状态信息,访问:http://192.168.100.1:9200/_cluster/state?pretty
因为这种查看方式及其不方便,所以可以考虑安装elasticsearch-head插件,方便管理集群4、安装elasticsearch-head插件——node1和node2
可以先等node1安装完这个插件之后,node2在安装,安装时过程较长,node2可以先做上面的步骤 —————————————————————————————————扩展——————————————————————————————————— elasticsearch在5.0版本之后,elasticsearch-head插件需要作为独立服务进行安装 需要使用npm安装,并且需要提前安装node和phantomjs node:基于chrome V8引擎和javascript运行环境 phantomjs:基于webkit的javascriptAPI。这个可以理解为一个隐形的浏览器,可以做到webkit浏览器的作用 ———————————————————————————————————————————————————————————————————————— ******(1)编译安装node,需要四十分钟左右 [root@node1 ~]# ll (上传node和phantomjs的软件包) 总用量 122152 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 33396354 3月 30 22:08 elasticsearch-5.5.0.rpm -rw-r--r-- 1 root root 37926436 3月 30 22:08 elasticsearch-head.tar.gz -rw-r--r-- 1 root root 30334692 3月 30 23:13 node-v8.2.1.tar.gz -rw-r--r-- 1 root root 23415665 3月 30 23:13 phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 ~]# tar xf node-v8.2.1.tar.gz [root@node1 ~]# cd node-v8.2.1 [root@node1 node-v8.2.1]# ./configure && make && make install (时间较长,大约半小时左右) ******(2)安装phantomjs [root@node1 ~]# ll 总用量 122156 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 33396354 3月 30 22:08 elasticsearch-5.5.0.rpm -rw-r--r-- 1 root root 37926436 3月 30 22:08 elasticsearch-head.tar.gz drwxr-xr-x 10 502 games 4096 3月 30 23:45 node-v8.2.1 -rw-r--r-- 1 root root 30334692 3月 30 23:13 node-v8.2.1.tar.gz -rw-r--r-- 1 root root 23415665 3月 30 23:13 phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 ~]# tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src/ [root@node1 ~]# cp /usr/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/ ******(3)安装elasticsearch-head [root@node1 ~]# tar xf elasticsearch-head.tar.gz -C /usr/src/ (解压) [root@node1 ~]# cd /usr/src/elasticsearch-head/ [root@node1 elasticsearch-head]# npm install (使用npm安装) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/karma/node_modules/chokidar/node_modules/fsevents): npm WARN network SKIPPING OPTIONAL DEPENDENCY: request to https://registry.npmjs.org/fsevents failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org registry.npmjs.org:443 npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression up to date in 2.707s [root@node1 elasticsearch-head]# cd ******(4)修改elasticsearch主配置文件 [root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 。。。。。。 末尾添加 http.cors.enabled: true #开启跨域访问支持,默认为false,所以需要改成true http.cors.allow-origin: "*" #跨域访问允许所有的域名地址 保存退出 [root@node1 ~]# systemctl restart elasticsearch (重启服务) ******(5)启动elasticsearch-head服务 ————————————————————注意!!!!————————————————— 此操作必须在解压的目录下启动,进程会读取目录中的gruntfile.js文件,否则可能会失败 监听端口为:9100 ———————————————————————————————————————————————— [root@node1 ~]# cd /usr/src/elasticsearch-head/ (进入解压目录) [root@node1 elasticsearch-head]# ll Gruntfile.js (查看指定文件) -rw-r--r-- 1 root root 2231 7月 27 2017 Gruntfile.js [root@node1 elasticsearch-head]# npm start & (挂到后台启动) [1] 61130 [root@node1 elasticsearch-head]# > elasticsearch-head@0.0.0 start /usr/src/elasticsearch-head > grunt server Running "connect:server" (connect) task Waiting forever... Started connect web server on http://localhost:9100 [root@node1 elasticsearch-head]# netstat -anpt | grep 9100 (检查是否成功启动) tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 61140/grunt [root@node1 elasticsearch-head]# netstat -anpt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 1154/java
使用浏览器进行访问:http://192.168.100.1:9100
在最上面输入http://192.168.100.1:9200,点击连接,就可以看到node1节点了
******(6)插入索引,进行测试,索引名称为index-demo,类型为test [root@node1 elasticsearch-head]# curl -XPUT '192.168.100.1:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type:application/json' -d'{"aaa":"bbb","ccc":"ddd"}' { "_index" : "index-demo", "_type" : "test", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "created" : true } ———————————————————选项—————————————————————— -X 指定命令,默认的命令是get -P 通过ftp进行传输 -U 指定上传用户和密码 -T 指定上传 -H http协议的头部信息 -d 提交的数据信息 —————————————————————————————————————————————
使用浏览器查看
点击数据浏览,就会看到添加的索引
这个0-4就是五个分片
5、node2配置——安装logstash
Logstash使用管道方式进行日志的搜集处理和输出,有点像linux系统中的管道符"|",即执行完一个执行下一个
在Logstash中,包括了三个阶段:
输入input——处理filter(不是必须的)——输出output这三个阶段都会有很多的插件来配置,比如:file、elasticsearch、redis等
每个阶段也可以指定多种方式,比如输出既可以输出到elasticsearch中,也可以指定到stdout在控制台打印,由于这种插件式的组织方式,使得logstash变得易于扩展和定制logstash常用命令:
-f 通过这个命令可以指定logstash的配置文件,根据配置文件来配置logstash -e 后面跟着字符串,该字符串可以被当作logstash的配置,如果是""则默认使用stdin作为输入,stdout作为输出 -t 测试配置文件是否正确,然后退出
******(1)安装logstash,安装这个需要java环境,之前两台node已经装过了 [root@node2 ~]# ll (上传logstash的rpm包) 总用量 161612 -rw-------. 1 root root 1264 1月 12 18:27 anaconda-ks.cfg -rw-r--r-- 1 root root 33396354 3月 30 22:08 elasticsearch-5.5.0.rpm -rw-r--r-- 1 root root 37926436 3月 30 22:08 elasticsearch-head.tar.gz -rw-r--r-- 1 root root 94158545 3月 30 23:17 logstash-5.5.1.rpm [root@node2 ~]# rpm -ivh logstash-5.5.1.rpm (使用rpm安装) 警告:logstash-5.5.1.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:logstash-1:5.5.1-1 ################################# [100%] Using provided startup.options file: /etc/logstash/startup.options OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N Successfully created system startup script for Logstash [root@node2 ~]# systemctl start logstash.service (开启服务) [root@node2 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ (添加软连接,优化命令执行路径) ******(2)输入采用标准输入,输出采用标准输出 [root@node2 ~]# logstash -e 'input{stdin{}}output{stdout{}}' 。。。。。。 等待一段时间,当下面这段文字出现后再进行操作 The stdin plugin is now waiting for input: 01:47:27.213 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com (手动输入) 2021-03-30T17:51:24.294Z node2 www.baidu.com (这个就是标准输出) www.sina.com (手动输入) 2021-03-30T17:51:28.962Z node2 www.sina.com (标准输出) Ctrl+C退出 ******(3)使用rubydebug显示详细输出,dodec是一种编码器 [root@node2 ~]# logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug } }' 。。。。。。 再次等待一段时间,出现下面字段后进行操作 01:56:30.916 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com (标准输入) { "@timestamp" => 2021-03-30T17:56:36.133Z, (这个就是处理过后的输出) "@version" => "1", "host" => "node2", "message" => "www.baidu.com" } Ctrl+C退出 ******(4)使用logstash将信息写入到elasticsearch中,并且远程主机192.168.100.1:9200 [root@node2 ~]# [root@node2 ~]# logstash -e 'input { stdin{} } output { elasticsrch { hosts=>["192.168.100.1:9200"] } }' 。。。。。。 02:01:27.882 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.baidu.com (三个标准输入,会发现没有进行输出,这是因为发送到了elasticsearch中了) www.sina.com www.aaa.com
浏览http://192.168.100.1:9100查看结果
点击数据浏览,就会看到
******(5)编辑logstash配置文件,收集系统日志,输出到elasticsearch中 ————————————————————————————————华丽分割线———————————————————————————————————— logstash配置文件基本上是由三部分组成的,input、output以及用户需要时才添加的filter 标准的配置文件格式为: input{。。。。} filter{。。。。} output{。。。。} 在每个部分中,可以指定多个访问方式,例如:想要指定两个日志来源文件,那么就可以这样写,指定多个也是这种格式即可 input { file { path => "/var/log/messages" type => "sylog" } file { path => "/var/log/apache/access.log" type => "apache" } } ————————————————————————————————————————————————————————————————————————————— [root@node2 ~]# ll /var/log/messages -rw-------. 1 root root 1184764 3月 31 02:06 /var/log/messages [root@node2 ~]# chmod o+r /var/log/messages (给系统日志添加其他用户的只读权限) [root@node2 ~]# ll /var/log/messages -rw----r--. 1 root root 1185887 3月 31 02:07 /var/log/messages [root@node2 ~]# ls /etc/logstash/conf.d/ [root@node2 ~]# vim /etc/logstash/conf.d/system.conf (编写一个新文件) input { file { #从文件中读取 path => "/var/log/messages" #文件路径 type => "system" start_position => "beginning" #是否从头开始读取 } } output { elasticsearch { #输出到elasticsearch中 hosts => ["192.168.100.1:9200"] #指定elasticsearch的主机地址和端口 index => "system-%{+YYYY.MM.dd}" #索引名称,这个是日期 } } 保存退出 [root@node2 ~]# systemctl restart logstash (重启服务)
浏览器访问http://192.168.100.1:9100进行验证,查看是否有系统日志存在
6、node1安装Kibana
******(1)使用rpm方式安装kibana [root@node1 ~]# ll kibana-5.5.1-x86_64.rpm (上传rpm包) -rw-r--r-- 1 root root 52255853 3月 31 02:22 kibana-5.5.1-x86_64.rpm [root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 。。。。。。 [root@node1 ~]# systemctl enable kibana (设置为开机自启) Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service. ******(2)配置kibana主配置文件 [root@node1 ~]# vim /etc/kibana/kibana.yml 。。。。。。 2 server.port: 5601 #打开kibana的端口 3 。。。。。。 7 server.host: "0.0.0.0" #kibana侦听的地址,0.0.0.0为侦听所有 8 。。。。。。 21 elasticsearch.url: "http://192.168.100.1:9200" #和elasticsearch的主机建立连接,指定地址和端口 22 。。。。。。 30 kibana.index: ".kibana" #再elasticsearch中添加.kibana索引 31 。。。。。。 保存退出 ******(3)启动Kibana服务 [root@node1 ~]# systemctl start kibana [root@node1 ~]# netstat -anpt | grep 5601 tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 1373/node
浏览器访问http://192.168.100.1:5601,进入kibana控制台
第一次登录需要添加一个elasticsearch索引,添加前面的索引即可
依次点击:
management——index patterns——create index pattern
index name or pattern选项是索引名称,随便起就行,我这里添加system*
time filter field name选项是设置时间过滤,选择I don't want to use the time filter
填写完后点击Create
点击Discover进行查看
可以点击这些选项进行筛选,想要筛选什么就点击该选项的”add“即可,然后会进行筛选
如果添加后想要取消这个筛选条件,点击指定选项的×号即可
三、扩展——添加apache日志
要求:将apache服务器的日志添加到elasticsearch并且通过kibana显示
添加一个主机,用于安装apacheapache 192.168.100.3 安装httpd和logstash -步骤
******(1)先做基础配置 [root@Centos7 ~]# hostnamectl set-hostname apache [root@Centos7 ~]# su [root@apache ~]# systemctl stop firewalld [root@apache ~]# setenforce 0 setenforce: SELinux is disabled [root@apache ~]# mount /dev/cdrom /mnt/ mount: /dev/sr0 写保护,将以只读方式挂载 mount: /dev/sr0 已经挂载或 /mnt 忙 /dev/sr0 已经挂载到 /mnt 上 ******(2)安装摇晃httpd,并且写一个网页 [root@apache ~]# yum -y install httpd 。。。。。。 完毕! [root@apache ~]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@apache ~]# systemctl start httpd [root@apache ~]# echo "<h1>aaaaaaa</h1> " > /var/www/html/index.html ******(3)安装java [root@apache ~]# yum -y install java 。。。。。。 完毕! [root@apache ~]# java -version openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode) ******(4)上传logstash的rpm包,进行安装、配置 [root@apache ~]# ls anaconda-ks.cfg logstash-5.5.1.rpm [root@apache ~]# rpm -ivh logstash-5.5.1.rpm [root@apache ~]# systemctl daemon-reload [root@apache ~]# systemctl enable logstash.service Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service. [root@apache ~]# vim /etc/logstash/conf.d/apache_log.conf input { file { path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file { path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } } output { if [type] == "access" { elasticsearch { hosts => ["192.168.100.1:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.100.1:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } } 保存退出 [root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ [root@apache ~]# logstash -f /etc/logstash/conf.d/apache_log.conf 。。。。。。 03:07:07.932 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600} www.aaaa.com (随便输入几个域名) www.bbbbb.com abc.www.com
-验证
登录kibana,访问http://192.168.100.1:9100查看索引是否存在
登录kibana界面添加索引,访问http://192.168.100.1:5601
和上面相同的方法,添加一个新的apache索引
至此,ELK日志分析平台搭建完成!!!!!
- 优点:
-
ELK日志分析系统讲解
2021-08-16 09:15:37ELK日志分析系统ELK日志分析系统简介日志服务器介绍ELK日志分析系统ELK组成日志处理步骤Elasticsearch的基础核心概念1.接近实时(NRT)2.集群(cluster)3.节点(node)4.索引5.类型6.文档7.分片和副本logstash介绍1.... -
ELK日志分析系统docker搭建
2022-06-14 14:54:48使用docker分别搭建logstash,elasticsearch,kibana服务。 -
ELK日志分析系统及相关
2021-11-19 18:43:441、ELK日志分析系统 2、ELK中日志处理步骤 二、Elasticsearch介绍 1、Elasticsearch的基础核心概念 2、mysql关系型数据库与Elasticsearch对应的关系 三、LogStash概述 1、常用插件:Input、Filter Plugin、...