logstash 原理(含部署)

1、ES原理

原理 使⽤filebeat来上传⽇志数据,logstash进⾏⽇志收集与处理,elasticsearch作为⽇志存储与搜索引擎,最后使⽤kibana展现⽇志的可视化输出。所以不难发现,⽇志解析主要还 是logstash做的事情

从上图中可以看到,logstash主要包含三⼤模块:

1、INPUTS: 收集所有数据源的⽇志数据([源有file、redis、beats等,filebeat就是使⽤了beats源*);

2、FILTERS: 负责数据处理与转换、解析、整理⽇志数据(常⽤:grok、mutate、drop、clone、geoip)

3、OUTPUTS: 将解析的⽇志数据输出⾄存储器([elasticseach、file、syslog等);

通过配置Logstash的管道(pipeline),你可以定义数据的收集、处理和输出过程。每个管道由输入插件、过滤器插件和输出插件组成,它们一起协作来实现特定的数据流转

filters常用的过滤器插件如下:

  1. grok 过滤器: 场景:解析包含时间戳、日志级别和消息的日志行。

     rubyCopy codegrok {match => {"message" => "\[%{TIMESTAMP_ISO8601:time}\] \[%{WORD:level}\] %{GREEDYDATA:msg}"}}
  2. mutate 过滤器: 场景:清理字段,将 IP 地址字段重命名为 "client_ip"。

     rubyCopy codemutate {rename => { "ip" => "client_ip" }}
  3. date 过滤器: 场景:将时间戳字段转换为可操作的日期类型。

     rubyCopy codedate {match => ["timestamp", "yyyy-MM-dd HH:mm:ss"]target => "log_date"}
  4. json 过滤器: 场景:解析包含嵌套 JSON 数据的日志消息。

     rubyCopy codejson {source => "message"target => "parsed_json"}
  5. kv 过滤器: 场景:解析 HTTP 查询字符串中的参数。

     rubyCopy codekv {field_split => "&"value_split => "="source => "query_string"}
  6. xml 过滤器: 场景:解析包含 XML 数据的日志消息。

     rubyCopy codexml {source => "message"store_xml => falsexpath => ["//user/name/text()", "username","//user/age/text()", "user_age"]}
  7. translate 过滤器: 场景:将日志中的状态码映射为更可读的状态描述。

     rubyCopy codetranslate {field => "status_code"dictionary => ["200", "OK","404", "Not Found","500", "Internal Server Error"]}
  8. useragent 过滤器: 场景:解析用户代理字符串,提取浏览器和操作系统信息。

     rubyCopy codeuseragent {source => "user_agent"target => "user_agent_info"}
  9. geoip 过滤器: 场景:将 IP 地址解析为地理位置信息。

     rubyCopy codegeoip {source => "client_ip"target => "geoip"}
  10. multiline 过滤器: 场景:合并多行堆栈跟踪日志成单个事件。

     rubyCopy codemultiline {pattern => "^\s"negate => truewhat => "previous"}

2.Logstash性能优化主要体现在以下几个方面:

1.多pipeline配置

多pipeline配置。可以将不同的输入分割到不同的pipeline,每个pipeline有独立的过滤器和输出,这可以提高处理效率。pipeline之间的数据交互可以通过队列实现。

 ruby# 管道1:接收日志输入input { stdin { } }  ​filter { grok { } }output { stdout { } }​# 管道2:从Kafka读取数据input { kafka { } }​filter { json { } } output { elasticsearch { } }

2.Grok过滤器配置

 rubyfilter {grok {match => { "message" => "%{COMBINEDAPACHELOG}" }add_field => { "timestamp" => "%{DATE:timestamp}" }}}

3.Elasticsearch输出配置

 ruby  output {elasticsearch { hosts => ["http://localhost:9200"]index => "logstash-%{+YYYY.MM.dd}"}}

4.Redis队列配置

 rubyoutput {redis { host => "127.0.0.1"port => 6379db   => 0key  => "logstash" }}

5.batching编辑模式配置

 rubyinput {file {path => "/var/log/messages"start_position => "beginning" sincedb_path => "/dev/null"codec => "json"mode => "batch"    # 配置batching模式batch_size => 1000 # 每1000条记录批量读取}}

6.调整JVM内存配置在 jvm.options文件中配置,例如:

 -Xms2g-Xmx2g

7.并行处理配置 在 logstash.yml中配置:

 yml
pipeline.workers: 2  #配置工作线程数为2
pipeline.output.workers: 2 #输出线程也配置为2

logstash 配置文件

logstash 配置文件配置

vim  logstash.conf 

input {
  kafka {
    bootstrap_servers => ["192.168.190.159:9092"]
    topics_pattern  => ["hwb\.test|ywyth-sc|zj_test"]
    consumer_threads => 5
    codec => json
    auto_offset_reset => latest
    group_id => "hwb"
  }
}

filter {
        ruby {
        code => "event.timestamp.time.localtime"
        }
        mutate {
        remove_field => ["beat"]
        }
        mutate {
                split => ["message"," "]
                add_field => { "level" => "%{[message][3]}" }
        }
        mutate {
        add_field => {
            "index_name" => "hwb.test,%{[ywyth-sc]}"
                }
        }
        grok {
             match => {"message" => "\[(?<time>\d+-\d+-\d+\s\d+:\d+:\d+)\] \[(?<level>\w+)\] (?<thread>[\w|-]+) (?<class>[\w|\.]+) (?<lineNum>\d+):(?<msg>.+)"
             }
        }
}

output {
   elasticsearch {
         hosts => ["192.168.190.161:9200"]
         index => "%{[fields][log_topic]}"
         codec => "json"
   }
}
 

启动logstash

nohup ./logstash -f  ../config/logstash.conf & 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/38442.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RDMA概述

1. DMA和RDMA概念 1.1 DMA DMA(直接内存访问)是一种能力&#xff0c;允许在计算机主板上的设备直接把数据发送到内存中去&#xff0c;数据搬运不需要CPU的参与。 传统内存访问需要通过CPU进行数据copy来移动数据&#xff0c;通过CPU将内存中的Buffer1移动到Buffer2中。DMA模…

【图像分类】理论篇 (4)图像增强opencv实现

随机旋转 随机旋转是一种图像增强技术&#xff0c;它通过将图像以随机角度进行旋转来增加数据的多样性&#xff0c;从而帮助改善模型的鲁棒性和泛化能力。这在训练深度学习模型时尤其有用&#xff0c;可以使模型更好地适应各种角度的输入。 原图像&#xff1a; 旋转后的图像&…

1.MySQL数据库的基本操作

数据库操作过程&#xff1a; 1.用户在客户端输入 SQL 2.客户端会把 SQL 通过网络发送给服务器 3.服务器执行这个 SQL,把结果返回给客户端 4.客户端收到结果,显示到界面上 数据库的操作 这里的数据库不是代表一个软件&#xff0c;而是代表一个数据集合。 显示当前的数据库 …

Python中的MetaPathFinder

MetaPathFinder 是 Python 导入系统中的一个关键组件&#xff0c;它与 sys.meta_path 列表紧密相关。sys.meta_path 是一个包含 MetaPathFinder 实例的列表&#xff0c;这些实例用于自定义模块的查找和加载逻辑。当使用 import 语句尝试导入一个模块时&#xff0c;Python 会遍历…

Golang通过alibabaCanal订阅MySQLbinlog

最近在做redis和MySQL的缓存一致性&#xff0c;一个方式是订阅MySQL的BinLog文件&#xff0c;我们使用阿里巴巴的Canal的中间件来做。 Canal是服务端和客户端两部分构成&#xff0c;我们需要先启动Canal的服务端&#xff0c;然后在Go程序里面连接Canal服务端&#xff0c;即可监…

Maven - 统一构建规范:Maven 插件管理最佳实践

文章目录 Available Plugins开源项目中的使用插件介绍maven-jar-pluginmaven-assembly-pluginmaven-shade-pluginShade 插件 - 标签artifactSetrelocationsfilters 完整配置 Available Plugins https://maven.apache.org/plugins/index.html Maven 是一个开源的软件构建工具&…

零食量贩店热潮:小县城的新零售革命

零食量贩店热潮&#xff1a;小县城的新零售革命 目录 引言零食量贩店的快速崛起零食量贩店的运营模式量贩零食店在小县城的影响技术在零食量贩店的应用未来展望结论 1. 引言 近年来&#xff0c;零食量贩店在我国小县城迅速发展&#xff0c;成为一种新型的零售模式。在一条街…

flutter 二进制转字符串

通常接口返回的数据都是二进制数据 二进制转字符串&#xff1a;utf8二进制转字符串 onRoomMsg.body是二进制编码 utf8.decode(onRoomMsg.body)然后字符串转对象 json.decode(utf8.decode(onRoomMsg.body))然后再用fromJson解析 PrankActivityModel prankActivityModel Prank…

新疆大学841软件工程考研

1&#xff0e;软件生产的发展经历了三个阶段&#xff0c;分别是____、程序系统时代和软件工程时代时代。 2&#xff0e;可行性研究从以下三个方面研究每种解决方法的可行性&#xff1a;经济可行性、社会可行性和_____。 3&#xff0e;HIPO图的H图用于描述软件的层次关系&…

Android 12.0 系统systemui下拉通知栏的通知布局相关源码分析

1.前言 在android12.0的系统rom开发中,在进行systemui中的下拉通知栏的布局自定义的时候,对于原生systemui的 系统的下拉通知栏的通知布局的了解也是非常重要的,接下来就来分析下相关的下拉通知栏的通知布局的相关 源码流程,了解这些才方便对通知栏的布局做修改 2.系统sy…

创建maven的Springboot项目出现错误:Cannot access alimaven

创建maven的Springboot项目出现错误&#xff1a;Cannot access alimaven 1&#xff09;问题2) 分析问题3&#xff09;解决问题 1&#xff09;问题 创建maven的Springboot项目出现错误&#xff1a; Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…

“深入探索JVM内部机制:解密Java虚拟机的工作原理“

标题&#xff1a;深入探索JVM内部机制&#xff1a;解密Java虚拟机的工作原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;解密其工作原理。我们将介绍JVM的基本组成部分、类加载过程、内存管理和垃圾回收、即时编译器等关键概…

Linux C++ 网络编程基础(2) : TCP多线程一个server对应多个client

目录 一、linux posix线程相关函数介绍二、tcp server基础版本三、tpc服务端多线程版本四、tpc客户端代码tcp编程时, 一个server可以对应多个client, server端用多线程可以实现. linux下多线程可以使用POSIX的线程函数, 下面给出服务端和客户端的代码. 一、linux posix线程相关…

RocketMQ 单机源码部署 自定义配置文件和端口以及acl权限配置解析

思路 1、我们首先配置完 namesrv和broker和acl认证的配置文件&#xff0c;然后直接使用-c指定配置文件来启动程序&#xff0c;就会非常明了&#xff0c;用户名密码要大于6&#xff0c;第一个用户我测试着不知道为什么始终有最高权限&#xff0c;大家尽量不要吧第一个用户给别人…

Redis辅助功能

一、Redis队列 1.1、订阅 subscribe ch1 ch2 1.2 publish:发布消息 publish channel message 1.3 unsubscribe: 退订 channel 1.4 模式匹配 psubscribe ch* 模糊发布&#xff0c;订阅&#xff0c;退订&#xff0c; p* <channelName> 1.5 发布订阅原理 订阅某个频道或…

05-基础入门-系统及数据库等

基础入门-系统及数据库等 一、操作系统层面1、识别操作系统常见方法2、简要两者区别及识别意义3、操作系统层面漏洞类型对应意义4、简要操作系统层面漏洞影响范围 二、数据库层面1、识别数据库类型常见方法2、数据库类型区别及识别意义3、数据库常见漏洞类型及攻击4、简要数据库…

word在页眉页脚添加第几页

如果直接在页脚添加数字&#xff0c;整个文档的页脚会是统一的。 这里我们需要的是每一页按照页码排布的文档&#xff0c;所以首先打开页脚设置&#xff1a; 在插入内选择页脚 在弹出的下拉窗口中选择空白即可 在菜单栏会多出“页眉和页脚”的选项卡&#xff0c;选择其中的页…

【CTFshow】——PWN签到题

文章目录 一【题目环境】二【题目类别】三【题目编号】四【题目描述】五【解题思路】六【解题过程】七【提交结果】 一【题目环境】 名称版本Ubuntu系统22.04.1 LTSLinux内核5.15.0-43-generic 二【题目类别】 此题无特殊类别&#xff0c;为入门题 三【题目编号】 PWN签到…

数字孪生:Three.js(WebGL)和虚拟引擎

一、先说总结 总的来说&#xff0c;选择Three.js和WebGL还是虚拟引擎&#xff0c;主要取决于你的项目需求和优先级。 如果你的数字孪生项目主要是为了Web展示&#xff0c;需要快速加载&#xff0c;且对3D效果和物理模拟的需求不高&#xff0c;那么Three.js是一个非常好的选择。…

gstreamer rtsp server 在ubuntu系统上的安装

gstreamer rtsp server 在ubuntu系统上的安装 本篇博客介绍gstreamer rtsp server在ubuntu系统上的安装 python python直接使用pip安装 sudo apt install gir1.2-gst-rtsp-server-1.0C 安装 下载源码 git clone https://github.com/GStreamer/gst-rtsp-server.git进入仓…