vlambda博客
学习文章列表

ELFK 日志监控架构实践

大家好,我是方木

ELFK 日志监控

「一、概述」

随着业务的增加,以及项目架构的演变以及分布式相关技术的演变,包括每个服务划分的越来越精细。在微服务架构下,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、分布式数据库、分布式缓存等,使得后台服务构成了一种复杂的分布式网络。

这样一个场景下,对于用户的每一次请求调用,后端执行了多少组件间的调用无法知晓,由于分布式的调用,增加了程序调用异常的错误率,在这样的应用场景下,新的架构技术给我们问题排查上带来了难题。

传统的项目发生问题时,比如系统异常或者系统性能出现问题时,通常都是从系统记录的日志文件中找出问题所在,而对于微服务架构下的分布式部署,日志文件的分散,想从日志中查找问题工作量很大。对于用户某一次请求调用后端哪些服务,每个服务执行情况,想从日志中获得更是不可能的事,如果没有一种办法来解决日志问题是一件很痛苦的事情。

「二、ELFK」

以nginx的日志来进行demo演示

「2.1、部署nginx」

#解压文件夹,前面的下载步骤就不写进去了
tar -zxvf nginx-1.18.0.tar.gz
#安装make
yum -y install gcc automake autoconf libtool make
#安装g++
yum install gcc gcc-c++
#安装pcre是为了重写rewrite,安装zlib是为了gzip压缩
yum -y install pcre-devel zlib-devel
#使用configure 跟make install就可以得到编译好的nginx程序,减轻跨平台的负担。
./configure
#同上
make install
#编译好的程序默认会在/usr/local/nginx下面
cd /usr/local/nginx/
#启动
./sbin/nginx
#通过浏览器访问页面并且查看日志 ,如果访问不到,请定位自己的错误,因为一般情况下都是因为防火墙的
问题,请参考我们的笔记2
#访问地址:
http://127.0.0.1/
#查看300行日志 习惯300行
tail -300f /usr/local/nginx/logs/access.log

「2.2、Beats到底是什么呢?」官网

Beats是轻量级(资源高效,无依赖性,小型)和开放源代码日志发送程序的集合,这些日志发送程序充当安装在基础结构中不同服务器上的代理,用于收集日志或指标(metrics)。这些可以是日志文件(Filebeat),网络数据(Packetbeat),服务器指标(Metricbeat)等。

「Filebeat」

Filebeat用于收集和传送日志文件,它也是最常用的Beat。Filebeat如此高效的事实之一就是它处理背压(后端的压力)的方式-因此,如果Logstash繁忙,Filebeat会减慢其读取速率,并在减速结束后加快节奏。Filebeat几乎可以安装在任何操作系统上。

「Packetbeat」
网络数据包分析器Packetbeat是第一个引入的beat。Packetbeat捕获服务器之间的网络流量,因此可用于应用程序和性能监视。Packetbeat可以安装在受监视的服务器上,也可以安装在其专用服务器上。

「Metricbeat」
Metricbeat是一种非常受欢迎的beat,它收集并报告各种系统和平台的各种系统级度量。Metricbeat还支持用于从特定平台收集统计信息的内部模块。您可以使用这些模块和称为指标集的metricsets来配置Metricbeat收集指标的频率以及要收集哪些特定指标。

「Heartbeat」

Heartbeat是用于“uptime monitoring”的。本质上,Heartbeat是探测服务以检查它们是否可访问的功能,我们要做的就是为Heartbeat提供URL和正常运行时间指标的列表,以直接发送到ES或Logstash以便在建立索引之前发送到您的堆栈。

「FileBeat工作原理」

  • 采集器 「harvester」 的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。也 就是我们的输出。
    每个文件启动一个 harvester,harvester 负责打开和关闭文件,这意味着在运行时 文件描述符保持打开状态。如果文件在读取时被删除或重命名,Filebeat 将继续读取文件。
  • 探测器 「prospector」 的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。

「Filebeat如何保持文件状态?」

Filebeat保存每个文件的状态,并经常刷新状态到磁盘上的注册表文件(registry)。状态用于记住harvester读取的最后一个偏移量,并确保所有日志行被发送(到输出)。

「Filebeat如何确保至少投递一次(at-least-once)?」

因为它将每个事件的投递状态存储在注册表文件(registry)中,在定义的输出被阻塞且没有确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认收到事件为止。

「部署fileBeat」

#创建一个属于Beats的文件夹
mkdir beats
#将filebeat-7.9.1-linux-x86_64.tar.gz上传Beats文件夹并解压
tar -zxvf filebeat-7.9.1-linux-x86_64.tar.gz

修改配置文件:
ELFK 日志监控架构实践

#-e标准启动 -c指定配置文件
./filebeat -e -c gp.yml

这个时候在界面上输入hello,这个时候我们可以看到我返回的信息。message,还有我们的版本号以及一些其他信息。

现在有一个nginx的日志需要读取,修改对应的配置文件:
ELFK 日志监控架构实践

这个时候,启动ES 及 kibana随后直接在看板上进行索引创建fileBeat-7.9.1*,nginx的日志数据默认都是在我们的message里面的,但是这里面的数据格式非常的难看。内容并没有经过处理,只是读取到原数据,那么对于我们后期的查看以及数据分析是非常不利的。

其实FileBeat中有大量的 module,也就是我们已经配置好的模块,我们只需要直接去启用我们的模块,就可以简化我们的配置,并且可以直接获取到我们解析好的结构化数据

./filebeat modules list

./filebeat modules enable nginx #启动
./filebeat modules disable nginx #禁用

同时,还需要对module.d进行配置

cd modules.d/
vi nginx.yml #请注意,nginx.yml的状态为disable的话,这个文件名为nginx.yml.disable

ELFK 日志监控架构实践

「Logstash 背景」

简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。Logstash常用于日志关系系统中做日志采集设备。

「部署logstash」

#检查jdk环境,要求jdk1.8+ java -version
#解压安装包
tar -xvf logstash-6.5.4.tar.gz
#第一个logstash示例
bin/logstash -e 'input { stdin { } } output { stdout {} }'

Logstash系统结构以及工作原理:
ELFK 日志监控架构实践

  • inputs:必须,负责产生事件(Inputs generate events)
    • file:从文件系统上的文件读取,就像UNIX命令一样 tail -f
    • syslog:在已知端口514上监听syslog消息,并根据RFC3164格式进行解析
    • Beats:用来做进程的事件发送
  • filters:可选,负责数据处理与转换(filters modify them)
    • grok:解析和构造任意文本。当前,Grok是Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方法。Logstash内置了120种模式,很可能会找到满足您需求的模式!
    • mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
    • drop:完全删除事件,例如调试事件。
    • clone:复制事件,可能会添加或删除字段。
    • geoip:添加有关IP地址地理位置的信息(还在Kibana中显示惊人的图表!)
  • outpus:必须,负责数据输出(outputs ship them elsewhere)
    • elasticsearch:将事件数据发送到Elasticsearch
    • file:将事件数据写入磁盘上的文件

Logstash与FileBeat的对比

「获取日志可以直接使用FileBeat,为什么还要使用Logstash呢?EFK架构好像也能干同样的事情。」

FileBeat 并没有Logstash的过滤功能。所以一般来说,一般结构都是filebeat采集日志,然后发送到消息队列,redis,kafaka。然后logstash去获取,利用filter功能过滤分析,然后存储到elasticsearch中。如果一般就是to B 或者to G 的 场景的话,用「EFK」架构也可以。

「ELFK一站式集成」

  • 1.模拟应用APP生产日志,用来记录用户的操作。(生产日志切分更复杂,这里只做模拟)
  • 2.通过Filebeat读取日志文件中的内容,并且将内容发送给Logstash,原因是需要对内容做处理
  • 3.Logstash接收到内容后,进行处理,如分割操作,然后将内容发送到Elasticsearch中
  • 4.Kibana会读取Elasticsearch中的数据,并且在Kibana中进行设计饼状图,最后进行展示

ELFK 日志监控架构实践
ELFK 日志监控架构实践
随后启动ES与kibana,创建索引,就可以看见的结构化数据了。

来源:https://blog.csdn.net/qq_35958391/article/details/124516788














END












ELFK 日志监控架构实践

点分享

ELFK 日志监控架构实践

点收藏

点点赞

点在看