ELFK、卡夫卡+EFLFK

本文详细介绍了ELK集群的部署,Logstash的过滤模块,特别是grok插件的使用。接着讲解了Zookeeper的工作机制、特点和应用场景。然后阐述了消息队列Kafka的特性、系统架构,以及Kafka与ELK的整合,实现EFLFK数据流的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ELFK

1.1 部署ELK集群

注意:ELFK集群环境下,Logstash 组件所在节点的/etc/logstash/conf.d目录下,不需要创建system.conf配置文件,即Logstash不需要收集系统日志,因为系统日志将由filebeat收集后发送给Logstash。(安装filebeat后,Logstash会创建filebeat.conf配置文件获取filebeat传来的数据)

1.2 安装 Filebeat(在apache节点操作)

#上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目录
 tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
 mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat

1.3 设置 filebeat 的主配置文件

cd /usr/local/filebeat
 ​
 vim filebeat.yml
 filebeat.prospectors:
 - type: log         #指定 log 类型,从日志文件中读取消息
   enabled: true
   paths:
     - /var/log/messages       #指定监控的日志文件
     - /var/log/*.log
   tags: ["sys"]     #设置索引标签
   fields:           #可以使用 fields 配置选项设置一些参数字段添加到 output 中
     service_name: filebeat
     log_type: syslog
     from: 192.168.121.30
 ​
 --------------Elasticsearch output-------------------
 (全部注释掉)
 ​
 ----------------Logstash output---------------------
 output.logstash:
   hosts: ["192.168.121.30:5044"]      #指定 logstash 的 IP 和端口
 ​
 #启动 filebeat
 nohup ./filebeat -e -c filebeat.yml > filebeat.out &
 #-e:输出到标准输出,禁用syslog/文件输出
 #-c:指定配置文件
 #nohup:在系统后台不挂断地运行命令,退出终端不会影响程序的运行

1.4 在 Logstash 组件所在节点上新建一个 Logstash 配置文件

 cd /etc/logstash/conf.d
 ​
 vim filebeat.conf
 input {
     beats {
         port => "5044"
     }
 }
 output {
     elasticsearch {
         hosts => ["192.168.121.10:9200","192.168.121.20:9200"]
         index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
     }
     stdout {
         codec => rubydebug
     }
 }
 ​
 #启动 logstash
 logstash -f filebeat.conf

二、Logstash的过滤模块

2.1 Logstash配置文件中的模块

1、input {}

  • 指定输入流,通过file、beats、kafka、redis中获取数据

2、filter {}

常用插件:

  • grok:对若干个大文本字段进行再分割,分割成一些小字段 (?<字段名>正则表达式) 字段名:正则表示匹配到的内容
  • date:对数据中的时间进行统一格式化
  • mutate:对一些无用的字段进行剔除,或增加字段
  • mutiline:对多行数据进行统一编排,多行合并和拆分

3、ourput {}

  • elasticsearch stdout

2.2 Filter(过滤模块)中的插件

而对于 Logstash 的 Filter,这个才是 Logstash 最强大的地方。Filter 插件也非常多,我们常用到的 grok、date、mutate、mutiline 四个插件。

grok插件(通过grok插件实现对字段的分割,使用通配符)

这里就要用到 logstash 的 filter 中的 grok 插件。filebeat 发送给 logstash 的日志内容会放到message 字段里面,logstash 匹配这个 message 字段就可以了。

匹配格式:(?<字段名>正则表达式)
 ​
 # 字段名:正则表达式匹配到的内容
(?<remote_addr>%{IPV6}|%{IPV4} )(?<other_info>.+)
 #对数据进行分割ip字段名为remote_addr, 其他字段名为other_info
(?<remote_addr>%{IPV6}|%{IPV4} )[\s-]+[(?<log_time>.+)](?<other_info>.+)
 #添加匹配时间字段
#分割多个字段
 (?<remote_addr>%{IPV6}|%{IPV4})[\s-]+[(?<log_time>.+)]\s+"(?<http_method>\S+)\s+(?<url-path>.+)"\s+(?<rev_code>\d+)(?<other_info>.+)
cd /etc/logstash/conf.d/
 cp filebeat.conf filter.conf
 ​
 vim filter.conf
 input {
     beats {
         port => "5044"
     }
 }
 filter {
   grok {
      match =>["message","(?<remote_addr>%{IPV6}|%{IPV4} )[\s-]+[(?<log_time>.+)]\s+"(?<http_method>\S+)\s+(?<url-path>.+)"\s+(?<rev_code>\d+)(?<other_info>.+)"]
   }
 }
 output {
     elasticsearch {
         hosts => ["192.168.121.10:9200","192.168.121.20:9200"]
         index => "{[filter][service_name]}-%{+YYYY.MM.dd}"
     }
     stdout {
         codec => rubydebug
     }
 }
  logstash -f filter.conf   #启动

三、Zookeeper 概述

官方下载地址:archive.apache.org/dist/zookee…

3.1 Zookeeper 定义

Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。

3.2 Zookeeper 工作机制

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。

也就是说 Zookeeper = 文件系统 + 通知机制。

 

3.3 Zookeeper 特点

(1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。

(2)Zookeepe集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所以Zookeeper适合安装奇数台服务器。

(3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

(4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行,即先进先出。

(5)数据更新原子性,一次数据更新要么成功,要么失败。

(6)实时性,在一定时间范围内,Client能读到最新数据。

 

3.4 Zookeeper 数据结构

ZooKeeper数据模型的结构

### Linux ELF 文件格式详解 #### ELF 文件概述 在Linux操作系统中,可执行文件遵循ELF(Executable and Linkable Format)标准。这种格式不仅用于最终的可执行文件,还适用于其他类型的二进制对象,如可重定位的目标文件、共享库以及核心转储文件[^1]。 #### ELF 文件分类 根据用途不同,ELF文件主要分为四类: - **可执行文件 (Executable Files)**:可以直接运行的应用程序。 - **可重定位目标文件 (Relocatable Object Files)**:由编译器生成,链接器处理后形成完整的程序或库[^2]。 - **共享目标文件 (Shared Object Files)**:即动态链接库(.so),供多个进程共同加载使用。 - **核心转储文件 (Core Dump Files)**:当应用程序异常终止时创建,包含当时内存映像和其他调试信息。 #### ELF 文件结构组成 一个典型的ELF文件通常包括以下几个部分: - **文件头 (File Header, Elf32_Ehdr/Elf64_Ehdr)**:描述整个文件的基本属性,例如魔数(Magic Number)、字节序(Byte Order)等基本信息。 - **段表 (Program Headers Table, PT_LOAD entries)**:定义了如何将各个段加载到虚拟地址空间的位置及其权限设置。对于可执行文件而言非常重要,因为它们决定了哪些数据应该被映射入进程中并赋予读写执行权能。 - **节区头部表 (Section Headers Table, SHT)**:提供了关于各节区内存布局的信息,便于链接编辑过程中的符号解析等工作。值得注意的是,并不是所有的ELF文件都含有此表格——只有那些需要参与静态链接的对象才会有详细的分段说明。 - **字符串表 (.strtab 和 .shstrtab)**:用来存储诸如函数名称之类的ASCII串,其中`.strtab`负责全局范围内的命名实体而`.shstrtab`则专属于节区标题本身。这些字符串之间通过NULL字符(`\0`)隔开以便于快速检索访问[^3]. #### 内核对 ELF 的支持机制 为了能够正确识别和装载ELF格式的程序,Linux内核内部实现了专门的数据结构来表示这类二进制形式。具体来说,存在两个重要的C语言结构体: - `struct linux_binprm`: 记录了一个待启动进程所需的基础参数集,比如入口点地址(entry point address)、栈顶指针(stack pointer)等等。 - `struct linux_binfmt`: 定义了一套接口方法集合,允许特定类型的binary handler注册自己特有的操作流程给系统调用层知晓。以ELF为例,在kernel初始化期间就会完成相应handler的安装工作,从而确保后续任何尝试execve()的新实例都能得到恰当的服务[^4]. ```c // 示例代码片段展示linux_binfmt结构的一部分成员变量 struct linux_binfmt { int (*load_binary)(struct linux_binprm *); ... }; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值