前言
logstash作为elastic公司elkb体系中的一环,在日志处理中被广泛应用。它可以实现数据传输,数据过滤,格式化输出,还有强大的官方以及自定义插件功能,因而在很久之前就已经闻其大名了。也进行过简单的功能测试,对其有了基本的认知。
但是真正的生产环境的产品化应用却不是很多,这次终于找到了一个合适的场景来真正使用下这个产品。本来一个简单的需求应该不会掀起什么波澜,但是结果却令我很意外,logstash给我留下了深刻的印象,并为我解锁了很多的玩法。下面我们就来看看全过程,顺便梳理下logstash在使用过程中的一些常规用法以及需要注意的地方。
方案
需求
其实这次的需求很简单,就是把流数据中的部分种类的数据按照一定的规则重新组织,并推送到远端的硬盘按天存储。
这个需求看起来其实很简单,最直接的方案就是在数据处理的过程中进行分支业务处理,当符合条件时,将数据进行解析并重新组织,通过文件流的方式输出到远端的硬盘即可。
虽然逻辑很简单,但是考虑到效率,容错以及对主程序性能的影响,直接使用上面的处理方式其实并不是最佳的选择。于是,使用logstash来搞定这件事情的方案就被优先选择了。
方案
-
在数据处理主程序中,进行分支处理,将数据拼装好以后直接吐到kafka的topic中,主程序的任务就结束了,剩下的事情就交给logstash来处理
-
logstash读kafka,然后简单的处理数据后,直接输出到file中,问题解决
-
使用logstash不仅将主程序数据处理与数据落盘解耦合,不会影响到主程序的效率,更重要的是logstash能将性能,容错等这些不太好处理的脏活累活都大包大揽了
实践
根据上述的方案,logstash的配置就很显然了。主要的选型如下:
-
input:kafka,即从kafka的topic中读取数据
-
filter:mutate,由于kafka input输出的数据格式有很多多余的字段,所以使用mutate filter来删掉这些字段,用来减少网络IO以及磁盘存储的消耗
-
output:file,即输出到硬盘存储成文件
准备
首先就是安装logstash了,安装步骤很简单,把tar包下载到服务器本地,tar命令解压即可。
这里需要注意下,安装完毕后,需要使用命令查看当前版本的logstash自带插件的情况:
.\bin\logstash-plugin list
果不其然,并没有发现我需要的kafka相关的plugin,所以第一步是安装kafka相关的插件。
进入logstash的安装目录,执行下面的命令:
命令如下:
//在线
.\bin\logstash-plugin install logstash-output-logservice
//离线
.\bin\logstash-plugin install /root/logstash-offline-plugins.zip
此处需要注意两点:
-
必须在logstash的安装目录下执行命令,而不能在bin目录下执行,因为该插件托管于RubyGems,需要相关的依赖,而这些依赖都在logstash的安装目录下。
-
离线安装必须下载logstash-offline-plugins.zip,安装插件时需要依赖此压缩包

安装完毕后,再次使用上面插件查看的命令,发现kafka的插件安装完毕。

至此kafka的plugin安装完毕,准备任务完成。
first config
环境准备完毕后,接下来就开始编写conf文件了,毕竟所有的业务和处理都依赖于这个配置文件。根据上面的业务需求,第一个配置文件内容如下:
input{
kafka{
bootstrap_servers => ["172.16.45.157:9092"]
&

本文详细记录了使用Logstash在生产环境中处理日志数据的过程,包括从Kafka读取数据、过滤字段、格式化输出到文件,并解决了时区和文件名生成的问题。Logstash在日志处理中的效率和稳定性得到肯定,但也指出其资源消耗较高的缺点。对于轻量级场景,推荐使用Filebeat。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



