基于Elasticsearch + Fluentd + Kibana(EFK)搭建日志收集管理系统

news2024/11/15 4:37:30

目录

1、EFK简介

2、EFK框架

2.1、Fluentd系统架构

2.2、Elasticsearch系统架构

2.3、Kibana系统架构

3、Elasticsearch接口

4、EFK在虚拟机中安装步骤

4.1、安装elasticsearch

4.2、安装kibana

4.3、安装fluentd

4.4、进入kibana创建索引

5、Fluentd配置介绍


       Elasticsearch,Fluentd和Kibana(EFK)可以进行收集,索引,搜索和可视化日志数据。Elasticsearch负责数据的存储和索引,Fluentd负责数据的调整、过滤、传输,Kibana负责数据的展示。今天就来详细介绍一下使用Elasticsearch,Fluentd和Kibana搭建日志管理系统的详细过程。

1、EFK简介

      Elasticsearch,Fluentd和Kibana(EFK)可以进行收集,索引,搜索和可视化日志数据。Elasticsearch负责数据的存储和索引,Fluentd负责数据的调整、过滤、传输,Kibana负责数据的展示。

       fluentd实时收集日志,把日志作为JSON stream,可以同时从多台server上收集大量日志,易于安装,有灵活的插件机制和缓冲,支持日志转发。它统一实现了每一环节的数据传输,只需要关注数据处理的逻辑,也不用学习各种API,通过配置就可以实现实时增量数据的流出和流入。

       Elasticsearch提供了一个分布式多用户能力的全文搜索引擎。基于RESTful web接口,且提供持久存储、统计等多项功能。可用于全文搜索、结构化搜索、分析以及将这三者混合使用,通过简单的配置就可以做数据复制和分片,并且,它在NRT(Near Real Time)方面做了一些优化,使得应用在实时性方面有很好的表现。

       Kibana 是一个基于浏览器页面的 ElasticSearch 前端展示工具,内置了各种查询和聚合操作,并拥有图形化展示功能。使用它对日志进行高效地搜索、可视化、分析等各种操作。可以通过各种图表进行高级数据分析及展示。

2、EFK框架

       EFK日志处理系统的流程框架如下所示:

具体的流程为:fluentd进行日志的收集,数据来源可以自己设置为容器日志或者存储在本地文件的日志文件,收集之后发送给Elasticsearch进行统一的管理、搜索等操作,最后kibana将结果展示在web界面上。

       日志的处理流程可以简化为:

当考虑健壮性时,需要复杂配置,如图:

多了一层fluentd,以及备选的点,这样日志收集的过程更加稳定以及可靠。

2.1、Fluentd系统架构

       fluentd系统如下图所示:

fluentd的数据流简单,从数据源获取,进行集中,然后发送到输出的地方,流程:输入input --> 处理filter(不是必须的) --> 输出output

input:读取日志内容。

output:输出,常见的有mongodb,elasticsearch,kafka等,只需安装相关的插件即可。

详细结构如下图所示:

2.2、Elasticsearch系统架构

         Elasticsearch作用:fluentd将过滤后的日志内容发给全文搜索服务ElasticSearch,提供检索功能。Elasticsearch 的rest请求的传递流程如下所示:

用户发起http请求,Elasticsearch 的9200端口接受请求后,传递给对应的RestAction。RestAction做的事情很简单,将rest请求转换为RPC的TransportRequest,然后调用NodeClient,相当于用客户端的方式请求RPC服务,只不过transport层会对本节点的请求特殊处理。

2.3、Kibana系统架构

        Kibana是一个强大的数据展示工具。大多数情况下,不需要开发任何代码,就可以得到一个Dashboard。使用 Kibana 来查询,浏览并且可以与存储在 Elasticsearch indices(索引)中的数据交互。需要做的是:

(1)把数据放到ES中

(2)是在Kibana页面上配置报表模版,或按照规则写一套报表模版。

kibana的工作流程如下:

3、Elasticsearch接口

        多种语言都可以使用 REST API 通过端口 9200 和 Elasticsearch 进行通信,REST请求和应答是典型的JSON(JavaScript对象 符号)格式。通常情况下,一个REST请求包含一个JSON文件,其回复也是一个JSON文件。

一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:

curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'。

其中被 < > 标记的部分分别为:

VERB:适当的 HTTP 方法 或 谓词 : GET`、 `POST`、 `PUT`、 `HEAD 或者 `DELETE`。

PROTOCOL:http 或者 https`(如果你在 Elasticsearch 前面有一个 `https 代理)。

HOST:Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。

PORT:运行 Elasticsearch HTTP 服务的端口号,默认是 9200。

PATH:API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm。

QUERY_STRING:任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)。

BODY:一个 JSON 格式的请求体 (如果请求需要的话)。

GET 可以用来检索文档,同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT。

       在请求的查询串参数中加上 pretty 参数,这将会调用 Elasticsearch 的 pretty-print 功能,该功能 使得 JSON 响应体更加可读。但是, _source 字段不能被格式化打印出来。相反,我们得到的 _source 字段中的 JSON 串,刚好是和我们传给它的一样。例如:

curl -XGET http://localhost:9200/website/blog/123 -d ‘{...}’

一个查询语句的典型结构:

curl -XGET http://localhost:9200/search -d ‘

{

    QUERY_NAME: {

        ARGUMENT: VALUE,

        ARGUMENT: VALUE,...

    }

} ‘

要启用表头,添加 ?v 参数即可。

       Elasticsearch集群个数:应该始终被配置为 master 候选节点的法定个数(大多数个)。法定个数就是 ( master 候选节点个数 / 2) + 1。Elasticsearch 自己会输出很多日志,都放在 ES_HOME/logs 目录下。默认的日志记录等级是 INFO。

4、EFK在虚拟机中安装步骤

4.1、安装elasticsearch

        首先,安装JDK或者openJDK(这里以openJDK为例),然后安装elasticsearch,最后启动elasticsearch:

[root@elk elk]# yum install java-1.8.0-openjdk -y

[root@elk elk]# wget -c https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.3/elasticsearch-2.3.3.rpm

[root@elk elk]# yum localinstall elasticsearch-2.3.3.rpm –y

[root@elk elk]# systemctl daemon-reload

[root@elk elk]# systemctl enable elasticsearch

[root@elk elk]# systemctl start elasticsearch

修改防火墙,开放9200和9300端口:

[root@elk elk]# firewall-cmd --permanent --add-port={9200/tcp,9300/tcp}

[root@elk elk]# firewall-cmd –reload

4.2、安装kibana

[root@elk elk]# wget https://download.elastic.co/kibana/kibana/kibana-4.5.1-1.x86_64.rpm

[root@elk elk]# yum localinstall kibana-4.5.1-1.x86_64.rpm –y

[root@elk elk]# systemctl enable kibana

[root@elk elk]# systemctl start kibana

修改防火墙,对外开放tcp/5601:

[root@elk elk]# firewall-cmd --permanent --add-port=5601/tcp

[root@elk elk]# firewall-cmd --reload

打开浏览器测试访问kibana的首页http://localhost:5601/

4.3、安装fluentd

        安装前查看当前最大打开文件数:

$ ulimit -n

如果查看到的是1024,那么这个数值是不足的,则需要修改配置文件提高数值

vi /etc/security/limits.conf

设置值如下:

root soft nofile 65536

root hard nofile 65536

* soft nofile 65536

* hard nofile 65536

然后重启系统。

4.3.1、安装fluentd

        执行如下命令(命令将会自动安装td-agent,td-agent即为fluentd):

$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

启动td-agent:

$ /etc/init.d/td-agent start

$ /etc/init.d/td-agent status

或者

$ systemctl start td-agent

$ systemctl status td-agent

        简单demo测试HTTP logs:

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

安装必要的插件:

$ /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch

$ /usr/sbin/td-agent-gem install fluent-plugin-typecast

$ /usr/sbin/td-agent-gem install fluent-plugin-secure-forward

$ systemctl restart td-agent

如果上面直接安装不了,则要gem插件(安装rubygems)。

4.3.2、配置td-agent

        使docker生成的日志输出到elasticsearch,修改td-agent的配置

$ vi /etc/td-agent/td-agent.conf

修改内容为如下(这里没有填写端口,默认使用9200端口)

<source>

  @type forward

  port 24224

  bind 0.0.0.0

</source>

<match alpine:**>

  @type elasticsearch

  logstash_format true

  flush_interval 10s # for testing

  host 127.0.0.1

</match>

       重启td-agent:

$ systemctl restart td-agent

启动docker镜像,这里使用alpine做测试:

docker run --log-driver=fluentd --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" alpine:3.3 echo "helloWorld"

检查fluentd是否正常转发数据,检查td-agent日志,如果最后出现如下一行,则表明正常连接elasticsearch。/var/log/td-agent/td-agent.log中最后一行如下:

2017-12-26 00:40:37 -0500 [info]: #0 Connection opened to Elasticsearch cluster => {:host=>"127.0.0.1", :port=>9200, :scheme=>"http"}

2017-12-26 01:22:42.071896593 -0500 debug.test: {"json":"message"}

4.3.3、fluentd使用

       td-agent默认将配置收集来自http的日志,并将日志转储到/var/log/td-agent/td-agent.log,如果需要配置fluent接收docker日志,则在/etc/td-agent/td-agent.conf中增加,并重启td-agent,systemctl restart td-agent

<match docker.**>

          type stdout

 </match>

配置docker使用fluent为log-driver,有两种方法,指定特定的容器或者配置docker daemon将所有容器日志均存储到fluent中。

方法1:指定容器

docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224

方法2: 设置全局log-driver

docker daemon --log-driver=fluentd

至此,已经成功将docker的日志交给fluent处理。

4.4、进入kibana创建索引

       访问页面:http://localhost:5601/

点击“create”,即可看到如下设置:

5、Fluentd配置介绍

       配置文件为vi /etc/td-agent/td-agent.conf,配置文件主要由以下指令组成:

1)source  决定输入源.

2)match  决定输出目的地.

3)filter  决定事件处理管道.

4)system  设置系统广泛的配置.

5)label  输出分组和筛选内部路由

6)@include  包括其他文件.

       source: 输入源包括http和forward,http将fluentd转换为http端点以接收传入的http消息,forward将fluentd转换为TCP端点,以接受TCP包。当然,它可以同时出现。每个源指令必须包含一个类型参数,类型参数指定要使用的输入插件。

       match: 告诉fluentd做什么,match指令使用匹配的标记查找事件,并处理它们。最常用的匹配指令是将事件输出到其他系统。Fluentd的标准输出插件包括文件file和转发forward。让我们将这些添加到配置文件中。每个匹配指令必须包含匹配模式和类型参数。只有带有与模式匹配的标记的事件才会被发送到输出目的地. 广泛的匹配模式应该在严格的匹配模式之后定义。

       流程就是source 收集日志,然后由串联的 filter 做流式的处理,最后交给 match 进行分发。同时还可以用 label 将任务分组,用 error 处理异常,用 system 修改运行参数。日志存储的格式,根据源不同,比如源是docker的syslog,格式就是syslog的日志形式按配置修改,主要的格式化配置都在配置文件中的 format 这段配置里,主要采用正则表达式拆分数据到自定义的以 <> 包围起来的属性中。

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

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

相关文章

2023年最受欢迎和最佳WordPress主题(专家精选)

您在找2023年最佳WordPress主题吗&#xff1f; 免费和高级WordPress主题有数以千计&#xff0c;初学者很难为他们的网站选择合适的WordPress主题。 在本文中&#xff0c;我们将分享我们专家精选的2023年所有最受欢迎和最佳的WordPress主题。 本文网址: 2023年最受欢迎和最佳…

Nautilus Chain 推出全新 Layer3 DID 公民身份,限量 10 万枚免费发放

Nautilus Chain 是目前行业内首个模块化的 Layer3 机构链&#xff0c;该链此前基本完成了测试网的早期测试&#xff0c;并有望在近期上线主网。Nautilus Chain 近阶段市场活动频频&#xff0c;除了此前举办全球行活动推广 Layer3 概念外&#xff0c;其也在同期联合 Stanford Bl…

wps文档忘记保存关闭了怎么恢复

1、点击WPS左上角小箭头&#xff0c;点击下拉菜单中的工具选项&#xff0c;然后点击里面的备份中心。 2、在WPS的右侧会看到备份中心的小窗口&#xff0c;里面有自动备份的文件&#xff0c;还可以点击一键恢复即可复原之前的文件内容。 可以对之前时间段的文件打开。

什么是内存溢出,什么是内存泄漏?

文章目录 一、什么是内存溢出&#xff1f;二、什么是内存泄漏&#xff1f;三、如何避免&#xff1f; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么是内存溢出&#xff1f; 假设我们 JVM 中可用的内存空间只剩下 3M&#xff0c;但是我们要创…

Maven manual

Download maven Download 设置 system env… E:\apache-maven-3.9.3\bin查看版本信息 mvn -v Apache Maven 3.9.3 (21122926829f1ead511c958d89bd2f672198ae9f) Maven home: E:\apache-maven-3.9.3与Eclipse integrate Referrence&#xff0c;通常Eclipse原本就已经集成&am…

[STC32F12K54入门第三步]USART1+Modbus RTU从机

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Modbus RTU是什么?二、Modbus RTU程序展示1.串口配置2.Timer定时器配置3.配置CRC16校验位和Modbus RTU发送函数4.主函数5.效果展示总结提示:以下是本篇文章正文内容,下面案例可供参考 一、…

WebMvcConfigurationSupport 和 WebMvcConfigurer 区别和同时使用产生的问题-解决

在Spring Boot 1.5版本都是靠重写WebMvcConfigurerAdapter的方法来添加自定义拦截器&#xff0c;消息转换器等。SpringBoot 2.0 后&#xff0c;该类被标记为Deprecated&#xff08;弃用&#xff09;。 在Spring Boot 2.0后用自己的的配置类继承WebMvcConfigurerAdapter时&…

python多维数据可视化

文章目录 数据数据可视化平行坐标RadViz雷达图Andrews曲线矩阵图相关系数热力图参考文献多维度(3维以上)数据的可视化,用常规的方法不太好实现。本文介绍几种用Python实现的将多维数据展示在二维平面中的方法。 数据 以经典的鸢尾花数据集为例。 以下是5条经过格式处理的数…

[MAUI]用纯C#代码写两个漂亮的时钟

文章目录 时钟1绘制锯齿表盘绘制指针绘制沿路径文本 时钟2绘制表盘绘制指针项目地址 谷歌在2021年5月份推出的Android 12给我们带来了新的UI设计规范Material You&#xff0c;你是否已经体验到了Material You设计的魅力了呢&#xff1f; 在原生主屏幕启动器中&#xff0c;有一个…

【杂谈理解】STM32F103引脚反转速度时间

前言 事情的起因是最近我在使用F103编写WS2812彩灯的时序时遇到了一些小问题。具体来说&#xff0c;我发现WS2812的1码的低电平部分的时序无法达到要求的220ns~380ns&#xff0c;而只能到大约580ns左右。因此&#xff0c;我开始对引脚的反转速度进行了一些测试。下面数据仅是我…

Docker一键安装个人基础开发环境-MySQL、Redis、MongoDB

Docker Compose 在个人开发环境中&#xff0c;使用 Docker Compose 可以极大地简化和优化应用程序的部署和管理过程。 Docker Compose 的配置文件通常采用 YAML 格式&#xff0c;使其易于阅读和编写。我们可以在配置文件中指定所需的容器镜像、端口映射、环境变量、数据卷挂载…

张量分解中Tucker分解和CP分解的区别与联系

CP分解图示&#xff1a; Tucker分解图示&#xff1a; 两者的区别如下&#xff1a; 主要区别&#xff1a;核张量&#xff08;core tensor&#xff09; Tucker分解的结果会形成一个核张量&#xff0c;即PCA中的主成分因子&#xff0c;来表示原张量的主要性质&#xff0c;而CP分解…

【添加anaconda环境变量】

Win11操作系统&#xff0c;首先进入到编辑环境变量界面 分别添加以下这三个&#xff0c;保存。 最后关闭pycharm,重启&#xff0c;打开Terminal&#xff0c;输入conda --version&#xff0c;成功&#xff01;

Linux删除文件夹时,报错“Error: EBUSY:resource busy or locked, unlink……”该如何解决?

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在linux上&#xff0c;想要删除一个文件夹&#xff0c;总是报错如下图&#xff0c;一直删除不掉。明明感觉自己并没有执行这个文件夹下的内容&#xff0c;却一直删除失败。 问题解决&#xff1a; 不得不…

如何在小程序中引入使用vant框架

一、vant框架 vantUI框架常用于移动端页面组件的基础库构建&#xff0c;为了让用户获得更趋向于原生的体验&#xff0c;它是一种相当不错的方案选择。 关于这个框架&#xff0c;它不仅有适用于移动端vue脚手架的版本&#xff0c;同时还存在可以兼容小程序开发的webapp版本。在…

业务逻辑一定要紧密执行,希望大家引以为戒!——记一次惨痛的教训【伸手党福利】【又是贷款上班的一天】

切记一定要先执行业务逻辑再进行其他操作&#xff01; 程序员的教训 问题现象 后台传来报警&#xff0c;充值平台余额不足&#xff0c;发现大量充值记录。 分析 先看一下代码&#xff1a; 发起http的post请求&#xff0c;然后将返回体显示&#xff0c;并用logs记入日志&a…

STM32F4_nRF24L01无线通讯

目录 前言&#xff1a; 1. nRF24L01无线模块简介 2. nRF24L01状态机 3. nRF24L01模式 4. nRF24L01的SPI配置 4.1 nRF24L01 Rx 和 Tx 的初始化配置 4.2 nRF24L01相关寄存器 5. 硬件连接 6. 实验程序 6.1 main.c 6.2 NRF24L01.c 6.3 NRF24L01.h 前言&#xff1a; S…

10-切片是什么?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 10-切片是什么&#xff1f;

主成分分析系列(二)为何特征向量是主成分

在主成分分析系列&#xff08;一&#xff09;概览及数据为何要中心化这篇文章中介绍了PCA算法的大概想法及数据为何要中心化&#xff0c;在这篇文章具体推导PCA算法的过程。 1. 首先 PCA 最原始的想法是&#xff1a; 设 V \mathbf{V} V 为 d {d} d 维 线性空间&#xff08;即…

单表-DQL

注意&#xff1a;这张图还包含了对于的顺序&#xff0c;先分组再排序&#xff0c;再分页&#xff0c;顺序不能乱 基本查询 # 1.基本查询 # 查询全部行 select * from tb_emp; select id, user_name, password, name, gender, image, job, entry_date, create_time, update_ti…