Logstash - 插件



Logstash 为其管道的所有三个阶段(输入、过滤器和输出)提供各种插件。这些插件帮助用户从各种来源捕获日志,例如 Web 服务器、数据库、网络协议等。

捕获后,Logstash 可以根据用户的需要将数据解析和转换成分有意义的信息。最后,Logstash 可以将这些有意义的信息发送或存储到各种目标源,例如 Elasticsearch、AWS Cloudwatch 等。

输入插件

Logstash 中的输入插件帮助用户从各种来源提取和接收日志。使用输入插件的语法如下:

Input {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

您可以使用以下命令下载输入插件:

>Logstash-plugin install Logstash-input-<plugin name>

Logstash-plugin 实用程序位于 Logstash 安装目录的**bin 文件夹**中。下表列出了 Logstash 提供的输入插件。

序号 插件名称和描述
1

beats

从 elastic beats 框架获取日志数据或事件。

2

cloudwatch

从 CloudWatch 中提取事件,CloudWatch 是 Amazon Web Services 提供的 API。

3

couchdb_changes

使用此插件发送 couchdb 的 _changes URI 的事件。

4

drupal_dblog

提取启用了 DBLog 的 drupal 的 watchdog 日志数据。

5

Elasticsearch

检索在 Elasticsearch 集群中执行的查询结果。

6

eventlog

获取 Windows 事件日志中的事件。

7

exec

获取 shell 命令输出作为 Logstash 的输入。

8

file

从输入文件获取事件。当 Logstash 在本地安装并具有输入源的访问权限时,这很有用。

9

generator

用于测试目的,它创建随机事件。

10

github

捕获来自 GitHub webhook 的事件。

11

graphite

从 graphite 监控工具获取指标数据。

12

heartbeat

也用于测试,它生成类似心跳的事件

13

http

收集两个网络协议上的日志事件,分别是 http 和 https。

14

http_poller

用于将 HTTP API 输出解码为事件。

15

jdbc

将 JDBC 事务转换为 Logstash 中的事件。

16

jmx

使用 JMX 从远程 Java 应用程序提取指标。

17

log4j

通过 TCP 套接字捕获来自 Log4j 的 socketAppender 对象的事件。

18

rss

将命令行工具的输出作为 Logstash 中的输入事件。

19

tcp

通过 TCP 套接字捕获事件。

20

twitter

从 Twitter 流式 API 收集事件。

21

unix

通过 UNIX 套接字收集事件。

22

websocket

通过 websocket 协议捕获事件。

23

xmpp

读取 Jabber/xmpp 协议上的事件。

插件设置

所有插件都有其特定的设置,有助于指定插件中重要的字段,例如端口、路径等。我们将讨论一些输入插件的设置。

文件

此输入插件用于直接从输入源中存在的日志或文本文件中提取事件。它的工作原理类似于 UNIX 中的 tail 命令,并保存上次读取的游标,仅读取输入文件中新追加的数据,但可以通过使用 star_position 设置进行更改。以下是此输入插件的设置。

设置名称 默认值 描述
add_field {} 将新字段添加到输入事件。
close_older 3600 最后读取时间(以秒为单位)超过此插件中指定时间的文件将关闭。
codec “plain” 用于在进入 Logstash 管道之前解码数据。
delimiter “\n” 用于指定换行符。
discover_interval 15 在指定路径中发现新文件的间隔时间(以秒为单位)。
enable_metric true 用于启用或禁用指定插件的指标报告和收集。
exclude 用于指定应从输入插件中排除的文件名或模式。
Id 为该插件实例指定唯一标识。
max_open_files 指定 Logstash 随时可以打开的最大输入文件数。
path 指定文件的路径,它可以包含文件名的模式。
start_position “end” 如果需要,可以更改为“beginning”,以便 Logstash 最初应从开头开始读取文件,而不仅仅是新的日志事件。
start_interval 1 指定 Logstash 检查修改文件的时间间隔(以秒为单位)。
tags 添加任何其他信息,例如 Logstash,当任何日志事件无法符合指定的 grok 过滤器时,它会在标签中添加“_grokparsefailure”。
type 这是一个特殊的字段,您可以将其添加到输入事件中,它在过滤器和 kibana 中很有用。

Elasticsearch

此特定插件用于读取 Elasticsearch 集群中的搜索查询结果。以下是此插件中使用的设置:

设置名称 默认值 描述
add_field {} 与文件插件相同,用于将字段添加到输入事件中。
ca_file 用于指定 SSL 证书颁发机构文件的路径。
codec “plain” 用于在输入事件进入 Logstash 管道之前对其进行解码。
docinfo “false” 如果要提取其他信息(例如索引、类型和 ID)从 Elasticsearch 引擎,可以将其更改为 true。
docinfo_fields ["_index", "_type", "_id"] 可以消除任何不需要的 Logstash 输入字段。
enable_metric true 用于启用或禁用该插件实例的指标报告和收集。
hosts 用于指定将作为该 Logstash 实例的输入源的所有 Elasticsearch 引擎的地址。语法为 host:port 或 IP:port。
Id 用于为该特定输入插件实例提供唯一标识号。
index "logstash-*" 用于指定 Logstash 将监视的索引名称或模式,以便作为输入。
password 用于身份验证。
query "{ \"sort\": [ \"_doc\" ] }" 执行的查询。
ssl false 启用或禁用安全套接字层。
tags 在输入事件中添加任何其他信息。
type 用于对输入表单进行分类,以便在后续阶段轻松搜索所有输入事件。
user 用于身份验证。

eventlog

此输入插件读取 Windows 服务器的 win32 API 中的数据。以下是此插件的设置:

设置名称 默认值 描述
add_field {} 与文件插件相同,用于将字段添加到输入事件中
codec “plain” 用于在输入事件进入 Logstash 管道之前对其进行解码
logfile ["Application", "Security", "System"] 输入日志文件中所需的事件
interval 1000 以毫秒为单位,定义两次连续检查新事件日志之间的间隔
tags 在输入事件中添加任何其他信息
type 用于将输入表单特定插件分类为给定的类型,以便在后续阶段轻松搜索所有输入事件

Twitter

此输入插件用于从其流式 API 收集 Twitter 的 feed。下表描述了此插件的设置。

设置名称 默认值 描述
add_field {} 与文件插件相同,用于将字段添加到输入事件中
codec “plain” 用于在输入事件进入 Logstash 管道之前对其进行解码
consumer_key 包含 Twitter 应用程序的消费者密钥。有关更多信息,请访问https://dev.twitter.com/apps/new
consumer_secret 包含 Twitter 应用程序的消费者密钥。有关更多信息,请访问https://dev.twitter.com/apps/new
enable_metric true 用于启用或禁用该插件实例的指标报告和收集
follows

指定用逗号分隔的用户 ID,LogStash 检查 Twitter 中这些用户的状态。

有关更多信息,请访问

https://dev.twitter.com

full_tweet false 如果希望 Logstash 读取 Twitter API 返回的完整对象,可以将其更改为 true
id 用于为该特定输入插件实例提供唯一标识号
ignore_retweets False 可以将其设置为 true 以忽略输入 Twitter feed 中的转发
keywords 需要在 Twitter 输入 feed 中跟踪的关键词数组
language 定义 LogStash 从输入 Twitter feed 中所需的推文的语言。这是一个标识符数组,用于定义 Twitter 中的特定语言
locations

根据指定的地理位置过滤输入feed中的推文。这是一个数组,包含位置的经度和纬度。
oauth_token 这是必需字段,包含用户oauth令牌。更多信息请访问以下链接 https://dev.twitter.com/apps
oauth_token_secret 这是必需字段,包含用户oauth密钥令牌。更多信息请访问以下链接 https://dev.twitter.com/apps
tags 在输入事件中添加任何其他信息
type 用于将输入表单特定插件分类为给定的类型,以便在后续阶段轻松搜索所有输入事件

TCP

TCP用于通过TCP套接字获取事件;它可以读取来自用户连接或服务器的事件,这在模式设置中指定。下表描述了此插件的设置 -

设置名称 默认值 描述
add_field {} 与文件插件相同,用于将字段添加到输入事件中
codec “plain” 用于在输入事件进入 Logstash 管道之前对其进行解码
enable_metric true 用于启用或禁用该插件实例的指标报告和收集
host “0.0.0.0” 客户端所依赖的服务器操作系统地址
id 它包含Twitter应用程序的消费者密钥
mode “server” 用于指定输入源是服务器还是客户端。
port 定义端口号
ssl_cert 用于指定SSL证书的路径
ssl_enable false 启用或禁用SSL
ssl_key 指定SSL密钥文件的路径
tags 在输入事件中添加任何其他信息
type 用于将输入表单特定插件分类为给定的类型,以便在后续阶段轻松搜索所有输入事件

Logstash – 输出插件

Logstash支持各种输出源和不同的技术,如数据库、文件、电子邮件、标准输出等。

使用输出插件的语法如下所示 -

output {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

您可以使用以下命令下载输出插件 -

>logstash-plugin install logstash-output-<plugin name>

**Logstash-plugin实用程序**位于Logstash安装目录的bin文件夹中。下表描述了Logstash提供的输出插件。

序号 插件名称和描述
1

CloudWatch

此插件用于将聚合的指标数据发送到亚马逊网络服务的CloudWatch。

2

csv

用于以逗号分隔的方式写入输出事件。

3

Elasticsearch

用于将输出日志存储在Elasticsearch索引中。

4

email

用于在生成输出时发送通知电子邮件。用户可以在电子邮件中添加有关输出的信息。

5

exec

用于运行与输出事件匹配的命令。

6

ganglia

它将指标写入Gangila的gmond。

7

gelf

用于以GELF格式生成Graylog2的输出。

8

google_bigquery

将事件输出到Google BigQuery。

9

google_cloud_storage

将输出事件存储到Google Cloud Storage。

10

graphite

用于将输出事件存储到Graphite。

11

graphtastic

用于在Windows上写入输出指标。

12

hipchat

用于将输出日志事件存储到HipChat。

13

http

用于将输出日志事件发送到http或https端点。

14

influxdb

用于将输出事件存储在InfluxDB中。

15

irc

用于将输出事件写入irc。

16

mongodb

将输出数据存储在MongoDB中。

17

nagios

用于使用被动检查结果通知Nagios。

18

nagios_nsca

用于通过NSCA协议使用被动检查结果通知Nagios。

19

opentsdb

将Logstash输出事件存储到OpenTSDB。

20

pipe

将输出事件流式传输到另一个程序的标准输入。

21

rackspace

用于将输出日志事件发送到Rackspace Cloud的队列服务。

22

redis

使用rpush命令将输出日志数据发送到Redis队列。

23

riak

用于将输出事件存储到Riak分布式键/值对中。

24

s3

将输出日志数据存储到Amazon Simple Storage Service。

25

sns

用于将输出事件发送到Amazon的Simple Notification Service。

26

solr_http

将输出日志数据索引并存储在Solr中。

27

sps

用于将事件发送到AWS的Simple Queue Service。

28

statsd

用于将指标数据发送到statsd网络守护程序。

29

stdout

用于在CLI的标准输出上显示输出事件,例如命令提示符。

30

syslog

用于将输出事件发送到syslog服务器。

31

tcp

用于将输出事件发送到TCP套接字。

32

udp

用于通过UDP推送输出事件。

33

websocket

用于通过WebSocket协议推送输出事件。

34

xmpp

用于通过XMPP协议推送输出事件。

所有插件都有其特定的设置,有助于在插件中指定重要的字段,如端口、路径等。我们将讨论一些输出插件的设置。

Elasticsearch

Elasticsearch输出插件使Logstash能够将输出存储在Elasticsearch引擎的特定集群中。这是用户最受欢迎的选择之一,因为它包含在ELK Stack软件包中,因此为Devops提供端到端解决方案。下表描述了此输出插件的设置。

设置名称 默认值 描述
action index 用于定义在Elasticsearch引擎中执行的操作。此设置的其他值包括delete、create、update等。
cacert 包含服务器证书验证的.cer或.pem文件的路径。
codec “plain” 用于在将输出日志数据发送到目标源之前对其进行编码。
doc_as_upset false 此设置用于更新操作。如果在输出插件中未指定文档ID,则会在Elasticsearch引擎中创建一个文档。
document_type 用于将相同类型的事件存储在相同的文档类型中。如果未指定,则使用事件类型。
flush_size 500 用于提高Elasticsearch中批量上传的性能
hosts [“127.0.0.1”] 输出日志数据的目标地址数组
idle_flush_time 1 定义两次刷新之间的时间限制(秒),Logstash在此设置中指定的超时后强制刷新
index "logstash-%{+YYYY.MM.dd}" 用于指定Elasticsearch引擎的索引
manage_temlpate true 用于在Elasticsearch中应用默认模板
parent nil 用于指定Elasticsearch中父文档的ID
password 用于对Elasticsearch中安全集群的请求进行身份验证
path 用于指定Elasticsearch的HTTP路径。
pipeline nil 用于设置用户希望为事件执行的摄取管道
proxy 用于指定HTTP代理
retry_initial_interval 2 用于设置批量重试之间初始时间间隔(秒)。每次重试后都会加倍,直到达到retry_max_interval
retry_max_interval 64 用于设置retry_initial_interval的最大时间间隔
retry_on_conflict 1 Elasticsearch更新文档的重试次数
ssl 启用或禁用对Elasticsearch的安全SSL/TLS
template 包含Elasticsearch中自定义模板的路径
template_name "logstash" 用于在Elasticsearch中命名模板
timeout 60 对Elasticsearch的网络请求的超时时间
upsert “” 更新文档,如果文档ID不存在,则在Elasticsearch中创建新文档
user 包含用于在安全Elasticsearch集群中对Logstash请求进行身份验证的用户

Email

电子邮件输出插件用于在Logstash生成输出时通知用户。下表描述了此插件的设置。

设置名称 默认值 描述
address “localhost” 邮件服务器的地址
attachments [] 包含附件文件的名称和位置
body “” 包含电子邮件正文,应为纯文本
cc 包含电子邮件的抄送电子邮件地址,以逗号分隔
codec “plain” 用于在将输出日志数据发送到目标源之前对其进行编码。
contenttype "text/html; charset = UTF-8" 用于设置电子邮件的内容类型
debug false 用于在调试模式下执行邮件中继
domain "localhost" 用于设置发送电子邮件消息的域名
from "[email protected]" 用于指定发件人的电子邮件地址
htmlbody “” 用于以html格式指定电子邮件正文
password 用于对邮件服务器进行身份验证
port 25 用于定义与邮件服务器通信的端口
replyto 用于指定电子邮件回复字段的电子邮件ID
subject “” 包含电子邮件的主题行
use_tls false 启用或禁用与邮件服务器通信的TSL
username 包含用于对服务器进行身份验证的用户名
via “smtp” 定义Logstash发送电子邮件的方法

Http

此设置用于通过http将输出事件发送到目标。此插件具有以下设置 -

设置名称 默认值 描述
automatic_retries 1 用于设置logstash重试http请求的次数
cacert 包含服务器证书验证的文件路径
codec “plain” 用于在将输出日志数据发送到目标源之前对其进行编码。
content_type 指定对目标服务器的http请求的内容类型
cookies true 用于启用或禁用cookie
format "json" 用于设置http请求正文的格式
headers 包含http标头信息
http_method “” 用于指定logstash在请求中使用的http方法,值可以是“put”、“post”、“patch”、“delete”、“get”、“head”
request_timeout 60 用于对邮件服务器进行身份验证
url 这是此插件的必需设置,用于指定http或https端点

stdout

stdout输出插件用于将输出事件写入命令行界面的标准输出。在Windows中是命令提示符,在UNIX中是终端。此插件具有以下设置 -

设置名称 默认值 描述
codec “plain” 用于在将输出日志数据发送到目标源之前对其进行编码。
workers 1 用于指定输出的工作程序数量

statsd

这是一个网络守护程序,用于通过UDP将矩阵数据发送到目标后端服务。在Windows中是命令提示符,在UNIX中是终端。此插件具有以下设置 -

设置名称 默认值 描述
codec “plain” 用于在将输出日志数据发送到目标源之前对其进行编码。
count {} 用于定义在指标中使用的计数
decrement [] 用于指定递减指标名称
host “localhost” 包含statsd服务器的地址
increment [] 用于指定递增指标名称
port 8125 包含statsd服务器的端口
sample_rate 1 用于指定指标的采样率
sender “%{host}” 指定发送者的名称
set {} 用于指定一个集合指标
timing {} 用于指定一个计时指标
workers 1 用于指定输出的工作程序数量

过滤器插件

Logstash 支持各种过滤器插件来解析和转换输入日志,使其具有更结构化且易于查询的格式。

使用过滤器插件的语法如下所示:

filter {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}

您可以使用以下命令下载过滤器插件:

>logstash-plugin install logstash-filter-<plugin name>

Logstash-plugin 实用程序位于 Logstash 安装目录的 bin 文件夹中。下表描述了 Logstash 提供的输出插件。

序号 插件名称和描述
1

aggregate

此插件收集或聚合来自各种相同类型事件的数据,并在最终事件中对其进行处理。

2

alter

它允许用户更改日志事件的字段,mutate 过滤器无法处理这些字段。

3

anonymize

它用于用一致的哈希值替换字段的值。

4

cipher

它用于在将输出事件存储到目标源之前对其进行加密。

5

clone

它用于在 Logstash 中创建输出事件的副本。

6

collate

它根据时间或计数合并来自不同日志的事件。

7

csv

此插件根据分隔符解析输入日志中的数据。

8

date

它解析事件中字段中的日期,并将其设置为事件的时间戳。

9

dissect

此插件帮助用户从非结构化数据中提取字段,并使 grok 过滤器能够正确解析它们。

10

drop

它用于删除所有相同类型或任何其他相似性的事件。

11

elapsed

它用于计算开始事件和结束事件之间的时间。

12

Elasticsearch

它用于将 Elasticsearch 中存在的先前日志事件的字段复制到 Logstash 中的当前事件。

13

extractnumbers

它用于从日志事件中的字符串中提取数字。

14

geoip

它在事件中添加一个字段,该字段包含日志事件中存在的 IP 所在位置的经纬度。

15

grok

它是常用的过滤器插件,用于解析事件以获取字段。

16

i18n

它删除日志事件中字段中的特殊字符。

17

json

它用于在事件中或事件的特定字段中创建结构化的 Json 对象。

18

kv

此插件在解析日志数据中的键值对时很有用。

19

metrics

它用于聚合指标,例如计算每个事件中的时间持续时间。

20

multiline

它也是常用的过滤器插件之一,它可以帮助用户将多行日志数据转换为单个事件。

21

mutate

此插件用于重命名、删除、替换和修改事件中的字段。

22

range

它用于检查事件中字段的数值是否在预期范围内,以及字符串的长度是否在范围内。

23

ruby

它用于运行任意 Ruby 代码。

24

sleep

这使 Logstash 休眠指定的时间。

25

split

它用于拆分事件的字段,并将所有拆分值放置在该事件的克隆中。

26

xml

它用于通过解析日志中存在的 XML 数据来创建事件。

编解码器插件

编解码器插件可以是输入或输出插件的一部分。这些插件用于更改或格式化日志数据的表示形式。Logstash 提供了多个编解码器插件,如下所示:

序号 插件名称和描述
1

avro

此插件将 Logstash 事件编码序列化为 avro 数据或将 avro 记录解码为 Logstash 事件。

2

cloudfront

此插件读取来自 AWS cloudfront 的编码数据。

3

cloudtrail

此插件用于读取来自 AWS cloudtrail 的数据。

4

collectd

它读取通过 UDP 收集的称为 collectd 的二进制协议的数据。

5

compress_spooler

它用于在 Logstash 中将日志事件压缩到分段批处理中。

6

dots

这用于通过为每个事件设置一个点到 stdout 来进行性能跟踪。

7

es_bulk

这用于将 Elasticsearch 中的大量数据转换为 Logstash 事件,包括 Elasticsearch 元数据。

8

graphite

此编解码器将数据从 graphite 读取到事件中,并将事件更改为 graphite 格式的记录。

9

gzip_lines

此插件用于处理 gzip 编码的数据。

10

json

这用于将 Json 数组中的单个元素转换为单个 Logstash 事件。

11

json_lines

它用于处理具有换行符分隔符的 Json 数据。

12

line

此插件将以单行读取和写入事件,这意味着换行符分隔符之后将出现一个新事件。

13

multiline

它用于将多行日志数据转换为单个事件。

14

netflow

此插件用于将 nertflow v5/v9 数据转换为 logstash 事件。

15

nmap

它将 nmap 结果数据解析为 XML 格式。

16

plain

这读取没有分隔符的文本。

17

rubydebug

此插件将使用 Ruby awesome print 库写入输出 Logstash 事件。

构建您自己的插件

您还可以创建自己的 Logstash 插件,以满足您的需求。Logstash-plugin 实用程序用于创建自定义插件。在这里,我们将创建一个过滤器插件,它将在事件中添加自定义消息。

生成基本结构

用户可以使用 logstash-plugin 实用程序的 generate 选项生成必要的文件,或者它也可以在 GitHub 上获得。

>logstash-plugin generate --type filter --name myfilter --path c:/tpwork/logstash/lib

这里,**type** 选项用于指定插件是输入、输出还是过滤器。在此示例中,我们正在创建名为 **myfilter** 的过滤器插件。path 选项用于指定您希望创建插件目录的路径。执行上述命令后,您将看到创建了一个目录结构。

开发插件

您可以在插件目录的 **\lib\logstash\filters** 文件夹中找到插件的代码文件。文件扩展名将为 **.rb**。

在我们的例子中,代码文件位于以下路径:

C:\tpwork\logstash\lib\logstash-filter-myfilter\lib\logstash\filters\myfilter.rb

我们将消息更改为:default ⇒ "Hi, You are learning this on tutorialspoint.com" 并保存文件。

安装插件

要安装此插件,需要修改 Logstash 的 Gemfile。您可以在 Logstash 的安装目录中找到此文件。在我们的例子中,它将位于 **C:\tpwork\logstash**。使用任何文本编辑器编辑此文件,并在其中添加以下文本。

gem "logstash-filter-myfilter",:path => "C:/tpwork/logstash/lib/logstash-filter-myfilter"

在上面的命令中,我们指定了插件的名称以及可以在哪里找到它以进行安装。然后,运行 Logstash-plugin 实用程序来安装此插件。

>logstash-plugin install --no-verify

测试

在这里,我们在之前的示例之一中添加了 **myfilter**:

logstash.conf

此 Logstash 配置文件在 grok 过滤器插件之后包含过滤器部分中的 myfilter。

input {
   file {
      path => "C:/tpwork/logstash/bin/log/input1.log"
   } 
}
filter {
   grok {
      match => [
         "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} -
            %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" ]
   }
   myfilter{}
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/output1.log"
      codec => rubydebug
   }
}

运行 logstash

我们可以使用以下命令运行 Logstash。

>logstash –f logsatsh.conf

input.log

以下代码块显示了输入日志数据。

INFO - 48566 - TRANSACTION_START - start

output.log

以下代码块显示了输出日志数据。

{
   "path" => "C:/tpwork/logstash/bin/log/input.log",
   "@timestamp" => 2017-01-07T06:25:25.484Z,
   "loglevel" => "INFO",
   "logger" => "TRANSACTION_END",
   "@version" => "1",
   "host" => "Dell-PC",
   "label" => "end",
   "message" => "Hi, You are learning this on tutorialspoint.com",
   "taskid" => "48566",
   "tags" => []
}

在 Logstash 上发布

开发人员还可以通过将其上传到 github 并遵循 Elasticsearch 公司定义的标准化步骤,将其自定义插件发布到 Logstash。

有关发布的更多信息,请参阅以下网址:

https://elastic.ac.cn/guide/en/logstash/current/contributing-to-logstash.html

广告