千家信息网

logstash是怎么工作的?

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Logstash是一个开源的、服务端的数据处理pipeline(管道),它可以接收多个源的数据、然后对它们进行转换、最终将它们发送到指定类型的目的地。Logstash是通过插件机制实现各种功能的,读者
千家信息网最后更新 2026年11月01日logstash是怎么工作的?

  Logstash是一个开源的、服务端的数据处理pipeline(管道),它可以接收多个源的数据、然后对它们进行转换、最终将它们发送到指定类型的目的地。Logstash是通过插件机制实现各种功能的,读者可以去官方下载各种功能的插件,也可以自行编写插件。

  Logstash实现的功能主要分为接收数据、解析过滤并转换数据、输出数据三个部分,对应的插件依次是input插件、filter插件、output插件,其中,filter插件是可选的,其它两个是必须插件。也就是说在一个完整的Logstash配置文件中,必须有input插件和output插件。

常用的input插件

-file:读取一个文件,这个读取功能有点类似于linux下面的tail命令,一行一行的实时读取。-syslog: 监听系统514端口的syslog messages,并使用RFC3164格式进行解析。-redis: Logstash可以从redis服务器读取数据,此时redis类似于一个消息缓存组件。-kafka:Logstash也可以从kafka集群中读取数据,kafka加Logstash的架构一般用在数据量较大的业务场景,kafka可用作数据的缓冲和存储。-filebeat:filebeat是一个文本日志收集器,性能稳定,并且占用系统资源很少,Logstash可以接收filebeat发送过来的数据。

常见的filter插件

filter插件主要用于数据的过滤、解析和格式化、也就是将非结构化的数据解析成结构化的、可查询的标准化数据。常见的filter插件有如下几个:-grok:grok是logstash最重要的插件,可解析并结构化任意数据,支持正则表达式,并提供了很多内置的规则和模板可供使用,-mutate:此插件提供了丰富的基础类型数据处理能力,包括类型转换,字符串处理和字段处理。-date:此插件可以用来转换你的日志记录中的时间字符串。-GeoIP:此插件可以根据IP地址提供对用的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。

常用的output:

-elasticsearch:发送数据到elasticsearch-file:发送数据到文件中-redis:发送数据到redis中,从这里可以看出redis插件既可以用在input插件中,也可以用在output插件中。-kafka:发送数据到kafka中,与redis插件类似,此插件也可以用在logstash的输入和输出插件中。

如果使用rpm包安装软件,那么logstash的配置文件是/etc/logstah目录下。其中,jvm.options是设置JVM内存资源的配置文件,logstash.yml是logstash全局属性配置文件,一般无需修改,此外还有一个pipelines.yml文件,这个文件在logstash启动的时候进程也会去读取,这个文件的内容实际上指向的是当前目录下的conf.d这个子目录里面的配置文件,conf.d目录下的文件要以.conf结尾,里面配置了input插件、filter插件、output插件信息。

我们先来认识一下logstash是如何实现输入输出的,这里我们不添加filter插件。

(使用rpm包安装的话,logstash可执行文件在/usr/share/logstash/bin/目录下。)

[root@:172.31.22.29 /etc/logstash/conf.d]#/usr/share/logstash/bin/logstash -e ""Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties`date` this timestamp is OK                    #输入此信息。然后按enter键{       "message" => "·`date` this timestamp is OK",          "host" => "ip-172-31-22-29.ec2.internal",    "@timestamp" => 2019-01-22T02:59:01.422Z,          "type" => "stdin",      "@version" => "1"}

有一点大家要记住:

/usr/share/logstash/bin/logstash -e
/usr/share/logstash/bin/logstash -e ""

我们这里就是进入了一个简单的交互式命令界面,当我输入信息时,logstash服务会反馈给我信息。我们来解释一下命令含义:

-e代表执行的意思。input即输入的意思,input里面即是输入的方式,这里选择了stdin,就是标准输入(从终端输入)。output即输出的意思,output里面是输出的方式,这里选择了stdout,就是标准输出(输出到终端)。这里的codec是个插件,表明格式。这里放在stdout中,表示输出的格式,rubydebug是专门用来做测试的格式,一般用来在终端输出JSON格式。

logstash的output输出的是JSON格式的内容:

Logstash在输出内容中会给事件添加一些额外信息。比如@version、host、@timestamp都是新增的字段,而最重要的是@timestamp,用来标记事件的发生时间。由于这个字段涉及到Logstash内部流转,如果给一个字符串字段重命名为@timestamp的话,Logstash就会直接报错。另外,也不能删除这个字段。还有一个字段type,表示事件的唯一类型。tags,表示事件的某方面属性。

我们上面的例子中是最简单的logstash例子。不过生产环境中大多使用-f参数去读配置文件。我们在上面提到过,配置文件一般在/etc/logstash/conf.d目录下,必须以.conf结尾才是logstash服务读取的配置文件。

那这次我们以配置文件为例进行介绍:

1)首先是我们进入到conf.d目录,然后创建配置文件l1.conf并输入如下内容:

input {        file {                path => "/var/log/haha.txt"        }}output {                stdout {                        codec => rubydebug                }}

保存退出。这里的意思就是说我们创建个配置文件去读取/var/log/haha.txt这个日志文件,此文件里面一旦有数据,就立马读取出来。

接下来进行启动logstash服务:

[root@: /etc/logstash/conf.d]#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/l1.confSending Logstash logs to /var/log/logstash which is now configured via log4j2.properties[2019-01-22T03:19:03,462][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified[2019-01-22T03:19:03,486][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.5.4"}[2019-01-22T03:19:08,344][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}[2019-01-22T03:19:08,655][INFO ][logstash.inputs.file     ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/var/lib/logstash/plugins/inputs/file/.sincedb_0d6c5b209e03529a50b2eca9300b7d96", :path=>["/var/log/haha.txt"]}[2019-01-22T03:19:08,706][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#"}[2019-01-22T03:19:08,773][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}[2019-01-22T03:19:08,783][INFO ][filewatch.observingtail  ] START, creating Discoverer, Watch with file and sincedb collections[2019-01-22T03:19:09,220][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

会出现一堆启动信息,不妨碍实验。

接下来在另一终端向/var/log/haha.txt输入一行内容:

[root@::172.31.22.29 /etc/logstash]#echo "`date`+ timestamp is OK" >> /var/log/haha.txt

然后回到原来的那个终端去查看内容:

{       "message" => "Tue Jan 22 03:21:32 UTC 2019+ timestamp is OK",      "@version" => "1",    "@timestamp" => 2019-01-22T03:21:33.843Z,          "path" => "/var/log/haha.txt",          "host" => "ip-172-31-22-29.ec2.internal"}

logstash服务会去读取/var/log/haha.txt文件并采集数据进行展示。

接下来我们对配置文件l1.conf进行解读:

  首先看input插件,这里定义了input的输入源为file,然后指定了文件的路径为/var/log/haha.txt,也就是将此文件的内容作为输入源,这里的path属性是必填配置,后面的路径必须是绝对路径,不能是相对路径。如果需要监控多个文件,可以通过逗号分隔即可。如下所示:

path => ["PATH1","PATH2","PATH3"]

这里的output插件,仍然采用rubydebug的JSON输出格式。


插件 文件 数据 配置 输入 输出 格式 内容 信息 字段 目录 服务 终端 事件 功能 就是 意思 类型 路径 处理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 耶加雪菲 互联网科技巨头监管 互联网最新的科技有限公司 深圳互联网络科技有限公司 互联网科技上市公司 互联网科技公司做什么 浙江互联网科技研学营 江阴互联网智能科技产品进口 沐思想互联网科技有限公司 2021互联网科技公司排名 互联网第三次科技革命特征 广州富喜互联网络科技 云南省自由互联网科技有限公司 四川互联网展示科技馆设计 互联网与数字科技关系 易企秀互联网科技是做什么的 世界互联网科技成果奖 西安左小互联网科技有限公司 唐山双旺合互联网科技产业园 华人运通互联网科技公司 没上市的科技互联网公司 互联网科技公司怎么样 菲比寻常互联网科技 互联网前沿科技 联恩商钥互联网科技有限公司 北京三清互联网科技 团飞科技与伯堂互联网服务平台 互联网软件和科技 山东子淼互联网科技有限公司 山东蛋芒互联网科技有限公司
0