赞
踩
链接:
elastic官网
ELK中文官方文档:
Elastic Stack 技术栈,别是Elasticsearch、logstash、kibana
组成,简称ELK
。在发展的过程中,又有新成员Beats
的加入。包含的核心组件是Beats(Filebeat、Metricbeat等)、Logstash、Elasticsearch、Kibana。
本次使用的组件版本号:
注:
目前Elastic Stack所有组件,官网都是建议使用同一版本号,目前使用的都是7.8.0。
大概流程:beats(采集数据,可集群)–》Redis【可选】 –》Logstash(ETL数据过滤【可省】,可集群)–》Elasticsearch(存储与搜索,可集群)–》Kibana(数据可视化)
可以在filebeat和logstash之间安装一层Redis。安装了Redis后,日志的导入速率有明显提升。
Filebeat是日志收集器。用于监控、收集服务器日志文件。主要有以下三个重要概念:输入,收集器和输出。
输入可以指定:file, stdin, redis, udp, docker, tcp, syslog。
5G小基站采集日志指定的输入为file,直接读取日志文件。
1)对于每个单独的文件,会启动一个收集器按行读取文件,并发送到输出端。
2)收集器负责管理文件描述符,即使一个文件被重命名了,它仍会继续读该文件。
3)当日志内容一段时间没有变化时,收集器会关闭。
输出可以指定:elasticsearch, logstash, kafka, redis, file, console, cloud
。
5G小基站日志的输出为logstash,采集的日志会平均发往多个logstash进行过滤。
Filebeat使用一个内部队列来暂时存储消息,有内存队列和磁盘队列两种形式。消息队列会等待输出的应答,如果队列满了,就不再接收新消息。
5G小基站采集日志使用内存队列。
Filebeat由两个主要组件组成:prospector 和 harvester。
harvester
prospector
Filebeat如何保持文件的状态
输入、采集规则、输出均可在filebeat.yml中配置,配置文件说明如下:
#======================= Filebeat inputs ============================= filebeat.inputs: - type: log #输入类型 enabled: true #启用或禁用这段配置 paths: #日志文件名正则匹配 - ${ACSDIR}/logs/*.log - ${ACSDIR}/logs/*.log.20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] encoding: gbk #日志编码 include_lines: ['WARN -', 'ERROR-', 'INFO -', 'DEBUG-'] #采集包含指定内容的行 exclude_files: ['\.swp$'] #需要排除日志文件的正则表达 tags: ["init-serice"] #标识 - type: log #同上 enabled: true paths: - ${ACSDIR}/logs/record/*.[0-9]*.log - ${ACSDIR}/logs/record/*.[0-9]*.log.20[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] encoding: gbk exclude_files: ['\.swp$'] tags: ["init_service_record"] #======================= Filebeat modules=========================== filebeat.config.modules: #filebeat内部模块的配置 path: ${path.config}/modules.d/*.yml reload.enabled: false #========================= Outputs ================================ #----------------------------- Logstash output -------------------------------- output.logstash: #指定Logstash作为输出 enabled: false #启用或禁用 hosts: ["10.17.0.8:5044","10.17.0.6:5044"] #ip、port #loadbalance: true #负载均衡 #------------------------------- Redis output --------------------------------- output.redis: #指定redis作为输出 enabled: true #启用或禁用 hosts: ["10.17.0.6:7001"] #ip、port #=========================Xpack Monitoring ========================= xpack.monitoring: #监控配置 enabled: true #启用或禁用 elasticsearch: hosts: ["10.17.0.6:9200"] #ip、port username: beats_system password: beatspassword
注:以上配置是列举的一些常用配置,并不是项目中使用的实际配置。
Logstash作为日志转发与过滤模块,主要由输入,过滤器和输出三部分组成。
输入可以指定file, syslog, redis, beats,从输入采集消息送至过滤器。支持的输入
5G小基站日志收集过程中Logstash指定的输入为Filebeat。
过滤器使Logstash可以对消息进行各式各样的处理,功能非常丰富,但是指定了过多过滤条件的话,CPU使用率也有直线上升,所以日记格式在定义的时间尽量统一简单,这样可以最大限度减少过滤处理逻辑。
Logstash过滤器由几十个插件组成,详细信息可以查看链接https://www.elastic.co/guide/en/logstash/current/filter-plugins.html。
发送过滤后的消息,输出可以指定为file, elasticsearch等。
5G小基站日志采集过程中Logstash指定的输出为Elasticsearch,消息会被送往后者处进行存储,并为用户提供搜索功能。
输入、过滤规则、输出均可在app-dashboard.conf中进行配置,配置文件说明如下:
input { beats { port => "5044" client_inactivity_timeout => 36000 } } filter { if "init_service" in [tags] { grok { match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] -- \[%{DATA:level}\] -- \[%{NOTSPACE:class}\] -- %{GREEDYDATA:message}" } overwrite => ["message"] } } else if "init_service_record" in [tags] { grok { match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] -- \[%{DATA:level}\] -- \[%{DATA:recordtype}\] -- %{GREEDYDATA:message}" } overwrite => ["message"] } json { source => "message" target => "jsoncontent" } } } output { if "init_service" in [tags] { elasticsearch { hosts => ["10.17.0.8:9200"] index => "app_run_access-%{+YYYY.MM.dd}" } } if "init_service_record" in [tags] { elasticsearch { hosts => ["10.17.0.8:9200"] index => "app_record_access-%{+YYYY.MM.dd}" } } elasticsearch { hosts => ["10.17.0.8:9200"] index => "app_default_access-%{+YYYY.MM.dd}" } }
注意:grok插件使用的是正则表达式,具体含义可以参见附录grok-patterns
Elasticsearch是一个分布式的搜索和分析引擎,主要用于检索与分析日志。
Elasticsearch的发展是非常快速的,所以在ES5.0之前,ELK的各个版本都不统一,出现了版本号混乱的状态,所以
从5.0开始,所有Elastic Stack中的项目全部统一版本号。目前使用版本是7.8.0
1)节点(node):一个elasticsearch实例,通过指定集群名可以加入到特定的集群中。
2)集群(cluster):节点的集合。
3)文档(document):数据的基本单元,格式为JSON。
4)索引(index):文档的集合,通过创建不同的索引可以区分不同种类的文档。
5)映射(mapping):决定一个文档(ducument)的组成,比如规定某字段的类型为文本或者数字。映射可以自动生成,但是手动指定可以减轻索引过程的压力,对于不需要进行全文搜索的字段,可以直接指定为keyword类型,这样该字段就不需要进行分词。
6)分片(shard):一个索引内的数据可以分成多个分片存储,集群方式部署时,多个分片会存在不同的主机上。默认情况下一个索引会创建5个分片。
副本(replica):分片的副本。默认情况下每个分片有一个副本。
1)主节点备选节点(master eligible node):在一个集群中,主节点主要做一些轻量级的操作,比如创建和删除索引、管理新节点的加入和分片的分布。而主节点备选节点就是有资格成为主节点的节点,系统会在启动时从主节点备选节点中选举出主节点。如果主机点停止工作了,会从主节点备选节点中重新选举一个主节点。
2)数据节点(data node):数据节点是存储索引分片的节点,主要对文档进行增删改查等操作。数据节点对IO、内存、CPU要求较高。
3)预处理节点(ingest node):进行预处理相关操作的,小集群环境下一般不用。
4)仅协调节点(coordination):主要功能为处理路由请求、处理搜索聚合、分发批量索引请求。小集群环境下一般不用。
6、Kibana
Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等,kibana能够很轻易地展示高级数据分析与可视化。
这是最简单的一种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 集群用于支持大集群系统的运维日志数据监控和查询。
具体安装和配置请参考 【安装与配置】
转载:
文档参考1:https://blog.csdn.net/qq_45425667/article/details/114702529
文档参考2:https://blog.csdn.net/baiwenjiebwj/article/details/119781642
视频参考:https://blog.csdn.net/baiwenjiebwj/article/details/119781642
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。