Elasticsearch+Logstash+Kibana搭建ELK日志分析平台(官方推荐BEATS架构)日志分析可以说是各种大小系统的标配,不知道有多少新手程序员这么喜欢日志。如果没有日志,就很难避免别人写的bug被别人发现;有了它,你可以自己消化所有的bug。当然,作为架构师,亲手搭建日志平台基本是必备技能。虽然我们说架构师基本不写代码,但是必要的时候,你还是可以带枪的。你可以看看架构师具备的能力:那些年薪50万却不写代码的程序员,他们赢在哪儿?原来年薪百万的架构师都是这样用redis的!ELK部署应用及工作机制3.1ELK日志分析平台简介ELK是三个开源软件的简称,分别为:Elasticsearch、Logstash和Kibana。Elasticsearch和Kibana上面我们已经讲解过了。Logstash主要是一个收集、分析、过滤日志的工具。适用于数据量大的场景。一般采用c/s模式。客户端安装在需要收集日志的主机上,服务器端负责接收各个节点的日志。进行过滤、修改等操作,然后发送给Elasticsearch进行数据分析。一个完整的集中式日志系统需要包括以下主要功能:采集——能够采集多源日志数据传输——能够稳定地将日志数据传输到中央系统存储——如何存储日志数据分析——能够支持UI分析警告——它可以提供错误报告,监控机制ELK提供了一套完整的解决方案,而且都是开源软件。它们相互配合使用,完美衔接,高效满足多种场合的应用。是目前主流的日志分析平台。.3.2ELK部署架构方式3.2.1简单架构这是最简单的ELK部署架构方式。Logstash收集各个节点上的相关日志和数据,经过分析过滤后发送到远程服务器上的Elasticsearch。贮存。优点是构建简单,使用方便。缺点是Logstash资源消耗大,依赖性强,没有消息队列缓存,存在数据丢失隐患。3.2.2消息队列架构队列架构引入KAFKA消息队列解决Logstash资源消耗过大,数据丢失的问题,每个终端节点上的LogstashAgent先将数据/日志传递给Kafka,消息队列再传递将数据传递给Logstash,Logstash对数据进行过滤分析后传递给Elasticsearch进行存储,通过Kibana将日志和数据呈现给用户。3.2.3BEATS架构该架构的终端节点使用Beats工具采集和发送数据,更加灵活,资源消耗更少,可扩展性更强。同时可以配置Logstash和Elasticsearch集群,支持大型集群系统的运维日志数据监控和查询。这个工具也是官方推荐的。本章我们使用这种架构模式来讲解配置(如果是生产环境,可以添加kafka消息队列,实现beats+消息队列的部署架构)。Beats工具包括四种:1.Packetbeat(收集网络流量数据)2.Topbeat(收集系统、进程和文件系统级别的CPU和内存使用数据)3.Filebeat(收集文件数据)4.Winlogbeat(收集WindowsEvent日志数据)3.3ELK工作机制3.3.1Filebeat工作机制Filebeat由两个主要组件组成:prospectors和harvesters。这两个组件协同工作以将文件更改发送到指定的输出。收割机(harvester):负责读取单个文件的内容。每个文件都会启动一个Harvester,每个Harvester会逐行读取每个文件,并将文件内容发送到指定的output。Harvester负责打开和关闭文件,这意味着当Harvester运行时,文件描述符是打开的。如果文件在收集过程中被重命名或删除,Filebeat将继续读取该文件。因此,在Harvester关闭之前,磁盘不会被释放。默认情况下,filebeat会一直保持文件打开状态,直到close_inactivefilebeat会关闭指定时间内不再更新的文件句柄,时间从harvester读取到最后一行的时间算起。如果文件句柄关闭后文件发生变化,将启动一个新的收割机。关闭文件句柄的时间不依赖于文件的修改时间。如果该参数配置不当,日志可能不是实时的。由scan_frequency参数决定,默认为10s。Harvester使用内部时间戳记录上次收集文件的时间。例如,如果设置5m,Harvester读取文件的最后一行后,将倒计时5分钟。如果文件在5分钟内没有变化,文件句柄将被关闭。默认为5m]。Prospector:负责管理Harvester,查找所有读取源。filebeat.prospectors:-input_type:logpaths:-/apps/logs/*/info.logProspector将查找/apps/logs/*目录下的所有info.log文件,并为每个文件启动一个Harvester。Prospector检查每个文件以查看Harvester是否已经启动、是否需要启动或文件是否可以忽略。如果Harvester关闭,Prospector将仅在文件大小发生变化时执行检查。只能检测到本地文件。Filebeat如何记录发送状态:在文件中记录文件状态(默认在/var/lib/filebeat/registry)。这个状态可以记住Harvester集合文件的偏移量。如果无法连接输出设备,如ES等,filebeat会记录发送前的最后一行,等可以再次连接时继续发送。Filebeat运行时,Prospector的状态会被记录在内存中。当Filebeat重启时,它会使用注册表中记录的状态重建并恢复到重启前的状态。每个Prospector记录每个找到的文件的状态,对于每个文件,Filebeat存储一个唯一的标识符以检测该文件之前是否被收集过。Filebeat如何保证数据发送成功:Filebeat之所以能够保证事件至少一次投递到配置的输出而不会丢失数据,是因为filebeat将每个事件的投递状态保存在一个文件中。当没有得到输出方的确认时,filebeat会尝试发送,直到得到响应。如果filebeat在传输过程中关闭,关闭前不会确认所有时间事件。filebeat关闭之前任何未确认的事件将在filebeat重新启动后重新发送。这确保它至少被发送一次,但可能会重复。关闭前等待事件响应的时间可以通过设置shutdown_timeout参数(默认禁用)来设置。3.3.2Logstash工作机制Logstash事件处理分为三个阶段:输入→过滤器→输出。它是接收、处理和转发日志的工具。支持系统日志、webserver日志、错误日志、应用日志等。输入:向logstash输入数据。支持的输入类型:file:从文件系统中的一个文件中读取,类似于tail-f命令syslog:监听514端口的系统日志消息,并按照RFC3164标准进行解析redis:readbeatsfromredisservice:read来自filebeat中的ReadFilters:数据中间处理,对数据进行操作。一些常用的过滤器有:grok:解析任意文本数据,Grok是Logstash最重要的插件。它的主要功能是将文本格式的字符串转换成特定的结构化数据,并与正则表达式一起使用。内置120多种解析语法。grok官方表达式mutate:转换字段。例如删除、替换、修改、重命名字段等。drop:丢弃一些事件,不做任何处理。clone:复制事件,在此过程中也可以添加或删除字段。geoip:添加地理信息(用于前端kibana图形显示)输出:输出是logstash处理管道的最终组成部分。一个事件在处理过程中可以通过多个输出,但是一旦所有输出都已执行,该事件就完成了它的生命周期。常见的输出有:elasticsearch:可以高效的保存数据,查询起来方便简单。文件:将事件数据保存到文件中。Graphite:向图形组件发送事件数据,非常流行的开源存储图形展示组件。编解码器:编解码器是基于数据流的过滤器,可以配置为输入和输出的一部分。编解码器可以帮助您轻松拆分发送的序列化数据。常用编解码器:json:使用json格式对数据进行编码/解码。多行:将来自多个事件的数据汇总到一行中。例如:java异常信息和堆栈信息。3.4Logstash安装配置在192.168.116.141机器节点上安装:下载并解压下载地址:cd/usr/localwgethttps://artifacts.elastic.co/downloads/logstash/logstash-7.10.2-linux-x86_64.tar.gz解压:tar-xvflogstash-7.10.2-linux-x86_64.tar.gz创建数据存储和日志目录[root@localhostlogstash-7.10.2]#mkdir-p/usr/local/logstash-7.10.2/data[root@localhostlogstash-7.10.2]#mkdir-p/usr/local/logstash-7.10.2/logs修改配置文件:vi/usr/local/logstash-7.10.2/config/logstash.yml配置内容:#数据存储路径path.data:/usr/local/logstash-7.10.2/data#监听主机地址http.host:"192.168.116.141"#日志存储路径path.logs:/usr/local/logstash-7.10.2/logs#启动监控插件xpack.monitoring.enabled:true#Elastic集群地址xpack.monitoring.elasticsearch.hosts:["http://192.168.116.140:9200","http://192.168.116.140:9201","http://192.168.116.140:9202"]创建监听配置文件:vi/usr/local/logstash-7.10.2/config/logstash.conf配置:input{beats{#监听端口port=>5044}}output{stdout{#输出编码插件codec=>ruby??debug}elasticsearch{#集群地址hosts=>["http://192.168.116.140:9200","http://192.168.116.140:9201","http://192.168.116.140:9202"]}}启动服务:with以root用户执行:##后台启动方式nohup/usr/local/logstash-7.10.2/bin/logstash-f/usr/local/logstash-7.10.2/config/logstash.conf#./logstash-f../config/logstash.conf启动成功后会显示如下日志:[2020-10-15T06:57:40,640][INFO][logstash.agent]SuccessfullystartedLogstashAPIendpoint{:port=>9600}access地址:http://192.168.116.141:9600/,可以看到返回信息:3.5192.168.116.141机器节点上运行Filebeat安装配置:下载解压与ElasticSearch相同的版本,下载7.10.2版本cd/usr/localwgethttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz解压:tar-xvffilebeat-7.10.2-linux-x86_64.tar.gz修改配置文件vi/usr/local/filebeat-7.10.2/filebeat.yml修改内容:#需要收集发送的日志文件filebeat.inputs:-type:logenabled:truepaths:-/var/log/messages#如果需要添加多个日志,只需添加-type:logenabled:truepaths:-/var/log/test.log#filebeat配置模块,可以加载多个配置filebeat.config.modules:path:${path.config}/modules.d/*.ymlreload.enabled:false#设置索引分片数量setup.template.settings:index.number_of_shards:2#kibana信息配置setup.kibana:host:"192.168.116.140:5601"#logstash信息配置(注意只能开启一个输出设置,如果使用logstash,请关闭output.elasticsearch)output.logstash:hosts:["192.168.116.141:5044"]#Additionalmetadata元数据信息处理器:-add_host_metadata:~-add_cloud_metadata:~startservice##在后台启动nohup/usr/local/filebeat-7.10.2/filebeat-e-c/usr/local/filebeat-7.10.2/filebeat.yml#./filebeat-e-c文件拍.yml启动成功后,日志显示:2020-12-15T07:09:33.922-0400WARNbeater/filebeat.go:367FilebeatisunabletoloadtheIngestNodepipelinesfortheconfiguredmodulesbecausetheElasticsearchoutputisnot配置/启用。如果您已经加载了IngestNode管道或正在使用Logstash管道,则可以忽略此警告。2020-12-15T07:09:33.922-0400INFOcrawler/crawler.go:72LoadingInputs:12020-12-15T07:09:33.923-0400INFOlog/input.go:148配置路径:[/var/log/messages]2020-12-15T07:09:33.923-0400INFOinput/input.go:114起始输入类型:log;ID:140567788757204626002020-12-15T07:09:33.924-0400INFOcrawler/crawler.go:106加载和启动输入完成。Enabledinputs:12020-12-15T07:09:33.924-0400INFOConfilecfgreloaderstarted我们监控/var/log/messages系统日志信息。当日志发生变化时,filebeat会通过logstash上报给Elasticsearch我们可以查看集群的所有索引信息:http://192.168.116.140:9200/_...可以看到,已经生成了一个名为logstash-2021.07.20-000001的索引。3.6Kibana配置及查看数据进入Kibana后台进行配置:http://192.168.116.140:5601进入【管理】-->在IndexPattern中输入“logstash-*”-->点击【下一步】,选择“@”时间戳”,点击【创建索引模式】创建。勾选数据,进入【Discover】,可以查看采集到的数据:如果没有显示,可以重新调整TimeRange时间范围。本文由传智教育博学谷-狂野建筑师教研团队发布,转载请注明出处!如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力
