logstash是怎么工作的呢?

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

  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 "input {stdin{}} output{stdout{codec=>rubydebug}}"
等价于:
/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.conf
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[--22T03::,][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[--22T03::,][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.4"}
[--22T03::,][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[--22T03::,][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"]}
[--22T03::,][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x27274b73 run>"}
[--22T03::,][INFO ][logstash.agent ] Pipelines running {:count=>, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[--22T03::,][INFO ][filewatch.observingtail ] START, creating Discoverer, Watch with file and sincedb collections
[--22T03::,][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>}

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

接下来在另一终端向/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输出格式。

通过logstash过滤、分析日志数据的更多相关文章

  1. Logstash过滤分析日志数据/kibanaGUI调试(四)

    [Logstash] [root@localhost ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.t ...

  2. MongoDB应用案例:使用 MongoDB 存储日志数据

    线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息,通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题,但当产生大量的日志之后,要想从大量日志里挖 ...

  3. 利用WebLog Experet分析日志获取性能需求

    一.下载WebLog Expert日志分析工具 官网下载地址:http://www.weblogexpert.com/download.htm 二.安装 安装很简单,点击“下一步”默认安装即可 三.配 ...

  4. 使用 MongoDB 存储日志数据

    使用 MongoDB 存储日志数据     线上运行的服务会产生大量的运行及访问日志,日志里会包含一些错误.警告.及用户行为等信息.通常服务会以文本的形式记录日志信息,这样可读性强,方便于日常定位问题 ...

  5. MongoDB 存储日志数据

    MongoDB 存储日志数据 https://www.cnblogs.com/nongchaoer/archive/2017/01/11/6274242.html 线上运行的服务会产生大量的运行及访问 ...

  6. Centos6.5使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践

    Centos6.5安装Logstash ELK stack 日志管理系统 概述:   日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的 ...

  7. 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载

    原文地址:https://wsgzao.github.io/post/elk/ 另外可以参考:https://www.digitalocean.com/community/tutorials/how- ...

  8. Elastic Stack(ElasticSearch 、 Kibana 和 Logstash) 实现日志的自动采集、搜索和分析

    Elastic Stack 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实时地对数据 ...

  9. Filebeat+Kafka+Logstash+ElasticSearch+Kibana 日志采集方案

    前言 Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源.任何格式的数据.其实Beats 和 Logstash的功能差不多,都能够与 Elasticsearch 产 ...

随机推荐

  1. await和async在一般处理程序中的使用

    写在前面 有个小项目,前端使用的html页面,那服务端的业务处理就采用最简单的一般处理程序了,之前一直在用,觉得一直用一种方式,确实挺蛋疼的,之前也有了解过async和await的内容.就想着自己折腾 ...

  2. PostgreSQL 使用小点

    1.timestamp 有分时区和无时区(减少使用),8个字节,包含日期和时间,范围是:公元前4713 - 公元294276.底层存储的是时间戳,这对任何地区的都一样,而具体时间显示则可从数据库层面设 ...

  3. 【P2P浏览器】跟大家讨论一个想法

    内容分享者通过这个浏览器来创建自己待分享的内容 任谁看了这些内容,就会在本地保存一份,成为一个节点只要任一个节点在线,别人就能看这些内容在线的节点越多,获取这些内容的速度越快 任何使用这个浏览器的人, ...

  4. 从前端角度看ajax如何保护接口的安全性

    一.前言 在web中,使用Ajax调用API,撇开跨域不讲,怎么做安全验证,防止别的网站调用呢?假设没有做安全保障,任何用户都可以直接访问接口,这回暴露出极大的安全隐患. 二.后端怎么做? 1.一些接 ...

  5. [Cerc2012]Non-boring sequences

    Description 定义一个序列是不无聊的,当且仅当它的所有子区间都存在一个独一无二的数字,即每个子区间里至少存在一个数字只出现过一次.给定一个长度为\(N(N\leq2\times 10^5)\ ...

  6. functions文件详细分析和说明

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html /etc/rc.d/init.d/functions几乎被/e ...

  7. 使用Pabot并行运行RF案例

    一.问题引入 在做接口自动化时随着案例增多,特别是流程类案例增多,特别是asp.net的webform类型的项目,再加上数据库校验也比较耗时,导致RF执行案例时间越来越长,就遇到这样一个问题,705个 ...

  8. C++基础知识小记

    最近在帮华为接口人研究自动化部署项目AutoDeploy,把代码发给我了,不过都是用C++写的,自己虽然在大学也学了一学期的C++不过也是很菜鸟,只是学了基本语法,还远未达到实战项目,不管怎么说就是撸 ...

  9. .NET源码中的链表

    .NET中自带的链表是LinkedList类,并且已经直接实现成了双向循环链表. 其节点类LinkedListNode的数据结构如下,数据项包括指示到某个链表的引用,以及左,右节点和值. public ...

  10. Jackson解析XML

    使用Jackson maven项目的pom.xml依赖 <dependency> <groupId>com.fasterxml.jackson.dataformat</g ...