ELFK日记分析架构,新手看这一篇就够了

铁佛  金牌会员 | 2024-12-27 00:29:33 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 988|帖子 988|积分 2964

一、ELFK架构原理

   
     ELFK架构图    ELFK日记分析架构,是使用的一整套的开源产物,一般由 filebeat 、kafka、logstash、elasticsearch、kibana构成。
1、filebeat收罗器

        根据上面的架构,使用logstash虽然也可以实现数据的收集存储和可视化,但使用logstash服务队数据进行收罗,其为Java语言开发的重量型服务,不顺应与大型集群架构的资源使用,而采用filebeat就比力便利了。
        filebeat,其为go语言开发的,轻量级服务,占用资源较少,其组件拥有input、output等功能,可以将收罗的数据写入到Kafka集群,甚至ES集群中(但无法直接识别,需要基于索引模板才可以直接到入ES中)。并且,其没有logstash服务中的fileter功能,不能使用正则表达式对数据格式进行处置惩罚,没有索引能力,因此其仅仅顺应于日记展现,不做分析。
2、Kafka分布式集群

        相对于大量的数据请求来说,内部的功能主机之间、功能模块之间等,通报的数据量是无法想象的,因为一个用户请求,就会涉及到各种内部的业务逻辑跳转等操作。消息队列,就用来包管全部的内部业务逻辑请求都处于稳固而且快捷的数据通报。
        消息队列是一种异步的服务间通讯方式,适用于无服务器和微服务架构。消息在被处置惩罚和删除之前一直存储在队列上。每条消息仅可被一位用户处置惩罚一次。消息队列可被用于分离重量级处置惩罚、缓冲或批处置惩罚工作以及缓解高峰期工作负载。
        其主要的作用有:
                削峰填谷:如电商业务中的秒杀、抢红包、企业开门红等大型活动时皆会带来较高的流量
                 异步解耦:生意业务系统作为淘宝等电商的最核心的系统,每笔生意业务订单数据的产生会引起几百个下游业务系统的关注,包括物流、购物车、积分、流计算分析等等,团体业务系统庞大而且复杂,消息队列可实现异步通讯和应用解耦,确保主站业务的连续性。        
                  顺序收发:需要包管顺序的应用场景非常多,例如证券生意业务过程时间优先原则,生意业务系统中的订单创建、支付、退款等流程,航班中的旅客登机消息处置惩罚等      
                分布式事件一致性:生意业务系统、支付红包等场景需要确保数据的最终一致性,大量引入消息队列的分布式事件,既可以实现系统之间的解耦,又可以包管最终的数据一致性。
                大数据分析:用消息队列与流式计算引擎相结合,可以很方便的实现业务数据的实时分析。
                分布式缓存同步:电商的大促,各个分会场琳琅满目标商品需要实时感知价格变化,大量并发访问数据库导致会场页面响应时间长,集中式缓存因带宽瓶颈,限定了商品变更的访问流量,通过消息队列构建分布式缓存,实时通知商品数据的变化
                蓄流压测:线上有些链路不方便做压力测试,可以通过堆积肯定量消息再放开来压测
3、logstash数据收集引擎

        logstash是一个基于Java语言开的的开源服务,其主要作为服务器端数据处置惩罚管道,可以通过插件实现日记的收集和转发,支持日记过滤,支持普通日记,自界说json格式的日记解析,最终把颠末处置惩罚的日记转发给elasticsearch搜刮引擎。
4、Elasticsearch搜刮引擎

        Elasticsearch是一个分布式的开源搜刮和分析引擎,其适用于包括文本、数字、地理空间、布局化、和非布局化等在内的全部范例数据。
        其主要特点:
                实时搜刮、实时分析
                分布式架构、实时文件存储
                文档导向,全部对象都是文档
                高可用,易扩展,支持集群,分片与复制
                接口友好,支持 json
5、kibana管理工具

        Kibana 是一款适用于 Elasticsearch 的基于Javascript语言实现的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和舆图。Kibana 同时还包括诸如 Canvas 和 Elastic Maps 等高级应用程序;
        Canvas 允许用户基于自身数据创建定制的动态信息图表,而 Elastic Maps 则可用来对地理空间数据进行可视化。
二、架构摆设

1、摆设测试应用服务

这里将使用之前摆设的tomcat服务作为测试使用。
tomcat使用指南(进阶)_tomcat配置-CSDN博客
2、kafka集群的摆设

这里使用的是Kafka集群的新版,kraft模块,不依赖zookeeper的一套Kafka集群,详细摆设请看下面一篇文章。
抛弃zookeeper的Kafka集群,看这一篇就可以了_kafka不用zk 安装-CSDN博客
3、Elasticsearch集群的摆设

本次架构使用的是一套较新版本的Elasticsearch,其修复了很多老版本所存在的毛病。详细摆设请看下面的一篇文章。
Elasticsearch最新版快速入门看这个就可以了-CSDN博客
这里使用的是比上面的低一个版本的最新款。
其配置如下:
master节点
cluster.name: chen
#设置集群名称,需统一
node.name: chen4
#设置节点名称,需唯一
network.host: _site_
# 绑定到全部网络接口
node.roles: ["master"]
indices.fielddata.cache.size: 20%
http.port: 9200
# HTTP端口范围,避免冲突
transport.port: 9300
#tcp端口
#Elasticsearch 将在节点间的 TCP 通讯中使用压缩来减少数据传输量。启用会增长CPU开销
transport.compress: true
# 初始发现节点列表
discovery.seed_hosts: ["192.168.10.110:9300", "192.168.10.120:9300", "192.168.10.130:9300"]
# 初始化主节点列表
cluster.initial_master_nodes: ["chen2", "chen3", "chen4"]
#界说了集群启动大概重启后,需要多少个数据节点加入集群后才开始恢复过程
gateway.recover_after_data_nodes: 2
#数据文件,多个用“,”隔开,日记文件位置
path.data: /usr/local/elasticsearch/data
path.logs: /usr/local/elasticsearch/logs
#服务启动的时候立即分配(锁定)富足的内存,防止数据写入swap,提高启动速率
#bootstrap.memory_lock: true
#安全认证,测试时未开启
xpack.security.enabled: false
#xpack.ml.enabled: false
xpack.security.transport.ssl.enabled: false
xpack.security.http.ssl.enabled: false
#xpack.security.transport.ssl.verification_mode: certificate
#xpack.security.transport.ssl.keystore.path: /app/elasticsearch-7.1.1-master/elasticsearch-server/config/certs/elastic-certificates.p12
#xpack.security.transport.ssl.truststore.path: /app/elasticsearch-7.1.1-master/elasticsearch-server/config/certs/elastic-certificates.p12
http.cors.enabled: true
http.cors.allow-origin: "*"
4、filebeat收罗器的摆设

下载路径:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.14.3-linux-x86_64.tar.gz
包管版本一致,防止不兼容题目

将收罗器解压到指定的目录下
tar -xf filebeat-8.14.3-linux-x86_64.tar.gz -C chen/
mv chen/filebeat-8.14.3-linux-x86_64 chen/filebeat

修改配置文件 filebeat.yml
vim filebeat.yml

name: 'tomcat-test'
filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /usr/local/tomcat/logs/*.log
  parsers:
    - ndjson:
        keys_under_root: true
        overwrite_keys: true
        add_error_key: true
        ignore_decoding_error: true
output.kafka:
  hosts: ["192.168.10.110:9092","192.168.10.120:9092"]
  topic: 'tomcat-test'
  partition.round_robin:
    reachable_only: true
  required_acks: 1
  compression: gzip
  max_message_bytes: 104857600

传输前需要将tomcat的日记自界说成json格式。
修改tomcat服务的配置文件,将下面配置更换原本配置
vim conf/server.xml
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="tomcat_access_log" suffix=".log"
               pattern="{"clientip":"%h","ClientUser":"%l","authenticated":"%u","AccessTime":"%t","method":"%r","status":"%s","SendBytes":"%b","Query?string":"%q","partner":"%{Referer}i","AgentVersion":"%{User-Agent}i"}" />

重启服务,并访问验证,检察日记

修改完成,启动收罗器filebeat,并将收罗的数据输出出来方便观察
./filebeat -e   

5、Kafka集群管理工具kafka-console-ui

下载地址:Gitee.com
https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2Fxxd763795151%2Fkafka-console-ui%2Freleases%2Fdownload%2Fv1.0.11%2Fkafka-console-ui-1.0.11.zip
摆设以及使用较为简单,这里就不做过多介绍。
测试验证:

tomcat-test topic已创建,检察topic中的数据模式



从测试所得数据,为正常访问所产生的,收罗成功
6、logstash摆设

下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-8.14.3-linux-x86_64.tar.gz
摆设logstash需要提前摆设jdk运行环境,详情请看Kafka集群那篇摆设。
将下载的安装包,解压到指定目录下
tar -xf logstash-8.14.3-linux-x86_64.tar.gz -C chen/

修改logstash配置
vim config/logstash.conf
input { 
        kafka{
          bootstrap_servers => "192.168.10.110:9092,192.168.10.120:9092"
                topics => ["tomcat-test"]
                group_id => "tomcat-test"
                auto_offset_reset => "earliest"
                consumer_threads => 1
                decorate_events => true
                client_id => 'tomcat-test'
                tags => ["filebeat-tag"]
        }               
filter{         
}       
output {
        if "filebeat-tag" in [tags] {
                elasticsearch {
                        #user => elastic
                        #password => "dbtQDc5qhcN5ikUmdg13856"
                        #ssl_certificate_verification => true
                        #truststore => "/app/elk/app/es/elasticsearch-6.5.3/config/truststore.jks"
                        #truststore_password => "12345678"
                  hosts => ["192.168.10.110:9200","192.168.10.120:9200","192.168.10.130:9200"]
                        index => "tomcat-test-%{+YYYY_MM_dd}"
                        manage_template => false
                }
        }
}

Input 部分
        kafka:
                bootstrap_servers: Kafka 集群的地址。
                topics: 要消费的 Kafka 主题列表。
                group_id: 消费者组 ID,确保每个消费者组有一个唯一的 ID。
                codec: 使用 JSON 编解码器来解析消息内容。
                auto_offset_reset: 当没有初始偏移量或当前偏移量在服务器上不存在时,从最早的偏移量开始消费。
                enable_auto_commit: 启用主动提交偏移量。
                consumer_threads: 消费线程数,可以根据需要调解。
Filter 部分
                json: 将消息内容解析为 JSON 格式,并将结果存储在 parsed_message 字段中。
                date: 解析 @timestamp 字段为 ISO8601 格式的时间戳。
Output 部分
        elasticsearch:
                hosts: Elasticsearch 集群的地址。
                index: 索引名称,这里使用日期格式。
                document_id: 文档 ID,可以基于元数据或其他字段。
                user 和 password: 如果 Elasticsearch 启用了安全特性(如 X-Pack),则需要提供用户名和密码。
启动logstash消费,并在ES集群中进行验证
bin/logstash -f config/logstash.conf

搭建成功


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表