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
修改配置文件:
#-e标准启动 -c指定配置文件
./filebeat -e -c gp.yml
这个时候在界面上输入hello,这个时候我们可以看到我返回的信息。message,还有我们的版本号以及一些其他信息。
现在有一个nginx的日志需要读取,修改对应的配置文件:
这个时候,启动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
「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系统结构以及工作原理:
-
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中进行设计饼状图,最后进行展示
随后启动ES与kibana,创建索引,就可以看见的结构化数据了。
来源:https://blog.csdn.net/qq_35958391/article/details/124516788
点分享
点收藏
点点赞
点在看