ELK日志收集系统简述

news2024/11/15 10:52:29

一、概述

(一)ELK由三个组件构成

ELK是三个开源软件的缩写,分别是Elasticsearch、Logstash、Kibana

ELK 架构基本组成

(二)作用

1、日志收集

2、日志分析

3、日志可视化

(三)为什么使用ELK?

1、日志对于分析系统、应用的状态十分重要,但一般日志的量会比较大,并且比较分散。

2、如果管理的服务器或者程序比较少的情况我们还可以逐一登录到各个服务器去查看、分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。目前比较有名成熟的有,Splunk(商业)、FaceBook 的Scribe、Apache的Chukwa Cloudera的Fluentd、还有ELK等等。

二、ELK的工作流程简介

在需要收集日志的所有服务上部署Logstash,作为Logstash Agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis(消息队列缓存,避免数据丢失隐患),然后Logstash Indexer将日志收集在一起再交给ElasticSearch即全文搜索服务,可以用ElasticSearch进行自定义搜索,可以通过Kibana来结合自定义搜索进行页面展示。

 三、组件简介

(一)elasticsearch

1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。

2、它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。

(二)logstash

1、Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。

2、一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

3、Logstash是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

4、Logstash工作原理:

Logstash事件处理有三个阶段:Inputs → Filters → Outputs。是一个接收、处理、转发日志的工具。支持系统日志、Webserver日志、应用日志等,几乎包含了可以抛出来的所有日志类型。

 5、Input:输入数据到Logstash。

一些常用的输入为:
①File:从文件系统的文件中读取,类似于tial -f命令
②Syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析
③Redis:从redis service中读取
④Beats:从filebeat中读取

6、Filters:数据中间处理,对数据进行操作。

一些常用的过滤器为:
①Grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。
②官方提供的grok表达式:logstash-patterns-core/patterns at main · logstash-plugins/logstash-patterns-core · GitHub
③Grok在线调试:Grok Debugger
④Mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。
⑤Drop:丢弃一部分Events不进行处理。
⑥Clone:拷贝Event,这个过程中也可以添加或移除字段。
⑦Geoip:添加地理信息(为前台kibana图形化展示使用)

7、Outputs:Outputs是Logstash处理管道的最末端组件。一个Event可以在处理过程中经过多重输出,但是一旦所有的Outputs都执行结束,这个Event也就完成生命周期。

一些常见的Outputs为:
①Elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。
②File:将Event数据保存到文件中。
③Graphite:将Event数据发送到图形化组件中,踏实一个当前较流行的开源存储图形化展示的组件。

(三)Kibana

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

四、ELK优点

(一)处理方式灵活。

Elasticsearch是全文索引,既有强大的搜索能力

(二)配置相对简单。

Kibana的配置非常简单,Elasticsearch则全部使用JSON接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单

(三)检索性能高。

ELK架构通常可以达到百亿级数据的查询秒级响应

(四)集群线性扩展。

Elasticsearch本身没有单点的概念,自动默认集群模式,Elasticsearch和Logstash都可以

(五)灵活扩展

(六)页面美观。

Kibana的前端设计美观,且操作简单

四、ELK常见的架构举例

(一)架构一

 这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用服务器CPU和内存较高。另外其没有消息队列缓存,存在数据丢失隐患。
此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询等操作。用户还可以通过配置Kibana Web方便地对日志进行查询、生成报表等。

(二)架构二

 此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据、日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志等数据呈现给用户。因为引入了Kafka(Redis),所以即使远端Logstash Server因宕机,数据也将会先被存储下来,从而避免了数据丢失。

(三)架构三

 此种架构将收集端Logstash替换为Beats,更灵活且消耗资源更少、扩展性更强。同时可配置Logstash和Elasticsearch集群用于支持大集群系统的运维日志数据监控和查询。

(四)使用ELK可以灵活的组织一套日志分析架构,再此之前需要了解一些概念或术语

  • shipper, 托运的意思,作用是收集和转发日志事件,作为agent端部署在服务器上,可用使用logstash、filebeat作为shiper
  • broker,接收日志事件数据,作为缓冲,可以使用redis、rabbitmq、kafka之类的作为broker
  • indexer    索引数据,如logstash、elasticsearch
  • storage  存储数据,如elasticsearch
  • web interface   用户接口,提供web页面展示、汇总数据,比如kibana

(五)架构四

 在每台服务器上部署logstash实例,对日志进行收集或处理后输出到elasticsearch、elasticsearc进行存储、索引,kibana关联索引,展示、分析数据,这种架构是常见的构架,缺点是在每台服务器上要部署logstash实例,而且还得依赖jdk,所以跑起来比较重,对资源消耗比较大,另外es是单个节点,存在单点故障,所以这种架构比较适合日志数据不大、机器少的场景.

(六)架构五

 相比架构四引入broker作为缓冲, 可以使用redis、rabbitmq、kafka作为broker, 带来的好处即使后面的elaticserach挂了也不会丢数据,缺点也是一样,要在每台服务器上安装logstash,比较消耗系统资源,另外都是所有的组件都是单点,如果做集群适合日志数据比较大的场景

(七)架构六

 

使用filebeat代替logstash作为日志的收集和转发, filebeat是一个相比logstash更为轻量的日志收集和转发工具,filebeat收集日志并转发给logstash,logstash过滤或处理给elastic进行存储与索引。

这种架构是logstash和elasticsearch都是单点,可以做成集群

(八)架构七

相比架构六,logstash和elastic都做集群,好处是都可以横向扩展,我在生产环境就是用这种架构。这种架构比较适合日志数据很大的场景, 缺点就是服务器要求比较多, 当然实际的环境中可以跑多实例。

也可以在filebeat后面加一道borker(集群),数据先到borker然后到logstash,这样的话得要更多的机器

 

小结:

推荐使用filebeat作为日志的收集和转发端

如果机器预算充足可以做成集群,参加架构七

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/658670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计网之应用层

因特网协议概述 常用协议应用层HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、DNS(域名系统)、DHCP(动态主机配置协议)、SNMP&#xff…

15-6.自定义组件的代码共享

在微信小程序中使用 behaviors 进行代码共享,功能类似于vue的mixins 每个behavior可以包含一组属性、数据、生命周期函数和方法 每个组件可以引用多个behavior,behavior也可以引用其他的behavior 目录 1 创建behavior 2 使用behavior 3 behavio…

机器学习融合模型stacking14条经验总结和5个成功案例(互联网最全,硬核收藏)

我看了很多关于融合模型stacking文章,很多作者倾向于赞美融合模型stacking,对其缺点轻描淡写,这容易误导初学者。一叶障目就是这意思。 我的很多学员喜欢用融合模型作为论文或专利创新点,这是一个热门技术。 最近有个同学在论文…

MySQL:七种 SQL JOINS 的实现(图文详解)

MySQL:7种SQL JOINS的实现 前言一、图示表示二、代码举例1、INNER JOIN(内连接)2、LEFT JOIN(左连接)3、RIGHT JOIN(右连接)4、OUTER JOIN(全连接)5、LEFT EXCLUDING JOI…

微信小程序入门学习02-TDesign中的自定义组件

目录 1 显示文本2 自定义组件3 变量定义4 值绑定总结 我们上一篇讲解了TDesign模板的基本用法,如何开始阅读模板。本篇我们讲解一下自定义组件的用法。 1 显示文本 官方模板在顶部除了显示图片外,还显示了一段文字介绍。文字是嵌套在容器组件里&#xf…

数据库的操作

前言 在之前的文章中,我们已经了解了什么是数据库,以及为什么有数据库,和数据库有什么作用,有了这些宏观概念之后,本章为大家进一步详细介绍对于数据库在Linux上如何具体操作。 1.创建数据库 1.1创建数据库语法 语法…

读书:《敏捷软件开发工具----精益开发方法》

《敏捷软件开发工具----精益开发方法》(Lean Software Development: An Agile Toolkit)由Mary Poppendieck和Tom Poppendieck合著,2003年出版,尽管已经有20个年头了,但书中的理念和方法仍然具有很高的实践价值&#xf…

SpringBoot2概览-运维实用篇

知识点 使用SpringBoot提供的maven插件可以将工程打包成可执行jar包然后执行&#xff0c;即java –jar xxx.jar&#xff0c;下面的图是MANIFEST.MF文件的内容&#xff1a; <build><plugins><plugin><groupId>org.springframework.boot</groupId>…

【MySQL】如何速通MySQL(3)

&#x1f4cc;前言&#xff1a;本篇博客介绍如何速通MySQL的第二篇&#xff0c;主要介绍Mysql中主要的基础的入门&#xff0c;学习MySQL之前要先安装好MySQL&#xff0c;如果还没有安装的小伙伴可以看看博主前面的博客&#xff0c;里面有详细的安装教程。或者看一下下面这个链接…

136-nago

PEID查看你程序有没有壳&#xff0c;发现是汇编语言程序 打开程序&#xff0c;我们发现程序是由Nag提示窗口的。 我们先进行去Nag提示。 进入回调函数&#xff0c;进行分析 保存修改到文件。 重新打开文件&#xff0c;我们发现没有Nag窗口。 再次使用OD进行附加进行分析。…

项目中遇到的问题总结(四)

GateWay和Nginx的相同点和不同点在哪里&#xff1f; Gateway 和 Nginx 都是常见的反向代理服务器&#xff0c;它们的相同点和不同点如下&#xff1a; 相同点&#xff1a; 都可以作为反向代理服务器&#xff0c;接收来自客户端的请求并转发到后端服务器进行处理。 都支持负载均…

67、C#调用Visual Studio 2019生成的Paddle+OCR(使用ncnn库),去完成业务任务

基本思想&#xff1a;这里使用飞哥写的android代码&#xff0c;将其取出纯c代码逻辑&#xff0c;自己尝试转了paddleocr模型&#xff0c;可以成功转换&#xff0c;不在详细阐述生成ncnn模型的过程和写后处理ocr识别过程&#xff0c;这里要实现的目的是使用c#调用ncnn的ocr工程&…

Ps修改文字

第一步&#xff1a;打开ps软件&#xff0c;选择菜单栏“文件”中的“打开”选项。 第二步&#xff1a;在弹出的“打开”对话框中&#xff0c;选择一张需要修改文字的图片&#xff0c;单击“打开”按钮。 第三步&#xff1a;在左侧工具栏中&#xff0c;选择“仿制图章工具”。 第…

【Python 随练】输出 9*9 口诀

题目&#xff1a; 输出 9*9 口诀 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用 Python 代码输出 9*9 口诀表。口诀表是一个常见的数学乘法表格&#xff0c;用于展示从 1 到 9 的乘法结果。我们将给出问题的解析&#xff0c;并提供一个完整的代码示例来生成这个口诀…

全志V3S嵌入式驱动开发(USB camera驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 soc和mcu的一个重要区别&#xff0c;就是soc会涉及到大量的音视频操作&#xff0c;当然音视频也就包括了camera摄像头这部分。v3s本身支持csi接口和…

webpack优化代码运行之Code split

一、 什么是code split Webpack的code split是一种技术&#xff0c;它能够将代码分割成多个块&#xff0c;从而优化应用程序的性能。这样做可以实现按需加载和并行加载&#xff0c;从而减少初始化时间和请求次数。Code split在Webpack中通过使用entry语法和各种Loader和插件来…

享元模式:减少内存占用的诀窍

一&#xff0c;概要 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它主要通过共享对象来降低系统中对象的数量&#xff0c;从而减少内存占用和提高程序性能。这听起来有点像单例模式&#xff0c;但它们在实现和用途上有很大的区别。享元…

JavaScript Day01 初识JavaScript

文章目录 1.初识JavaScript1.1.什么是JavaScript1.2.JavaScript的组成部分1.3.JavaScript的历史-JavaScript发展历史-系统环境-编辑器-运行环境-调试&#xff1a; 2. js组成2.1 ECMAScrpt 【js标准】&#xff08;兼容性100%&#xff09; (类似于CoreJava&#xff0c;制定了基础…

【备战秋招】每日一题:2023.05-B卷-华为OD机试 - 阿里巴巴找黄金宝箱(III)

为了更好的阅读体检&#xff0c;可以查看我的算法学习博客阿里巴巴找黄金宝箱(III) 题目描述 贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0-N的箱子&#xff0c;每个箱子上面贴有一个数字。 阿里巴巴念出一个咒…

SpringMVC 学习整理

文章目录 一、SpringMVC 简介1.1 什么是MVC1.2 什么是Spring MVC1.3 Spring MVC的特点 二、SpringMVC 快速入门三、RequestMapping注解说明四、SpringMVC获取请求参数4.1 通过ServletAPI获取请求参数4.2 通过控制器方法的形参获取请求参数4.3 通过RequestParam接收请求参数4.4 …