logstash教程

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 提供的输入插件。
插件名称和说明
beats
从弹性节拍框架中获取日志数据或事件。
cloudwatch
从 Amazon Web Services 提供的 API CloudWatch 中提取事件。
couchdb_changes
来自使用此插件提供的 couchdb 的 _chages URI 的事件。
drupal_dblog
使用启用的DBLog提取drupal的看门狗日志数据。
Elasticsearch
检索在 Elasticsearch 集群中执行的查询结果。
eventlog
从windows事件日志中获取事件。
exec
获取shell命令输出作为Logstash中的输入。
file
从输入文件中获取事件。当 Logstash 与输入源一起在本地安装并且可以访问输入源日志时,这很有用。
generator
它用于测试目的,它会产生随机事件。
github
从 GitHub webhook 捕获事件。
graphite
从Graphite监控工具获取指标数据。
heartbeat
它也用于测试,它产生类似心跳的事件
http
通过两种网络协议收集日志事件,即 http 和 https。
http_poller
用于将 HTTP API 输出解码为事件。
jdbc
它将 JDBC 事务转换为 Logstash 中的事件。
jmx
使用 JMX 从远程 Java 应用程序中提取指标。
log4j
通过 TCP 套接字从 Log4j 的 socketAppender 对象捕获事件。
rss
到命令行工具的输出作为 Logstash 中的输入事件。
tcp
通过 TCP 套接字捕获事件。
twitter
从 Twitter 流 API 收集事件。
unix
通过 UNIX 套接字收集事件。
websocket
通过 websocket 协议捕获事件。
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" 如果需要,可以更改为"开始";最初 Logstash 应该从头开始读取文件,而不仅仅是新的日志事件。
start_interval 1 以秒为单位指定时间间隔,之后Logstash会检查修改过的文件。
tags 要添加任何其他信息,例如 Logstash,当任何日志事件未能符合指定的 grok 过滤器时,它会在标签中添加"_grokparsefailure"。
type 这是一个特殊字段,可以将其添加到输入事件中,它在过滤器和 kibana 中很有用。

Elasticsearch

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

eventlog

这个输入插件从 windows 服务器的 win32 API 读取数据。以下是此插件的设置-
名称 默认值 描述
add_field {} 与文件插件一样,用于在输入事件中附加一个字段
codec "plain" 用于解码来自windows的输入事件;在进入 Logstash 管道之前
logfile ["Application", "Security", "System"] 输入日志文件中所需的事件
interval 1000 以毫秒为单位,定义了两次连续检查新事件日志的间隔
tags 在输入事件中添加任何附加信息
type 用于将特定插件的输入表单分类为给定类型,以便在后期阶段轻松搜索所有输入事件

Twitter

此输入插件用于从其 Streaming API 收集 twitter 的提要。下表描述了此插件的设置。
名称 默认值 描述
add_field {} 与文件插件一样,用于在输入事件中附加一个字段
codec "plain" 用于解码来自windows的输入事件;在进入 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 以忽略输入推特提要中的转推
keywords 这是一组关键字,需要在 twitters 输入源中进行跟踪
language 它定义了 LogStash 所需的推文语言,来自输入推特提要。这是一个标识符数组,它定义了 Twitter 中的特定语言
locations 根据指定的位置从输入源中过滤掉推文。这是一个数组,其中包含位置的经度和纬度
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" 用于解码来自windows的输入事件;在进入 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 提供的输出插件。
插件名称和说明
CloudWatch
此插件用于将聚合指标数据发送到亚马逊网络服务的 CloudWatch。
csv
用于以逗号分隔的方式写入输出事件。
Elasticsearch
用于存储Elasticsearch索引中的输出日志。
email
它用于在生成输出时发送通知电子邮件。用户可以在电子邮件中添加有关输出的信息。
exec
用于运行匹配输出事件的命令。
ganglia
它把指标扭曲到了 Gangila 的 gmond。
gelf
用于以 GELF 格式为 Graylog2 生成输出。
google_bigquery
它将事件输出到 Google BigQuery。
google_cloud_storage
它将输出事件存储到 Google Cloud Storage。
graphite
用于将输出事件存储到Graphite。
graphtastic
用于在 Windows 上编写输出指标。
hipchat
用于存储输出日志事件到HipChat。
http
用于将输出日志事件发送到 http 或 https 端点。
influxdb
用于在InfluxDB中存储输出事件。
irc
用于将输出事件写入irc。
mongodb
它将输出数据存储在MongoDB中。
nagios
用于将被动检查结果通知Nagios。
nagios_nsca
用于通过NSCA协议将被动检查结果通知Nagios。
opentsdb
它将 Logstash 输出事件存储到 OpenTSDB。
pipe
它将输出事件流式传输到另一个程序的标准输入。
rackspace
用于将输出的日志事件发送到Rackspace Cloud的Queue服务。
redis
它使用rpush命令将输出的日志数据发送到Redis队列。
riak
用于将输出事件存储到Riak分布式键/值对中。
s3
它将输出日志数据存储到 Amazon Simple Storage Service。
sns
用于将输出事件发送到亚马逊的简单通知服务。
solr_http
它在 Solr 中索引和存储输出日志数据。
sps
用于将事件发送到 AWS 的 Simple Queue Service。
statsd
用于将指标数据传送到 statsd 网络守护进程。
stdout
用于在 CLI 的标准输出上显示输出事件,如命令提示符。
syslog
用于将输出事件发送到系统日志服务器。
tcp
用于将输出事件发送到TCP socket。
udp
用于通过UDP推送输出事件。
websocket
用于通过WebSocket协议推送输出事件。
xmpp
用于通过XMPP协议推送输出事件。
所有插件都有其特定的设置,这有助于指定插件中的重要字段,如端口、路径等。我们将讨论一些输出插件的设置。

Elasticsearch

Elasticsearch 输出插件使 Logstash 能够将输出存储在 Elasticsearch 引擎的特定集群中。这是用户的著名选择之一,因为它包含在 ELK Stack 包中,因此为 Devops 提供端到端解决方案。下表描述了此输出插件的设置。
名称 默认值 描述
action index 用于定义在 Elasticsearch 引擎中执行的动作。此设置的其他值是删除、创建、更新等。
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 它定义了两次flush之间的时间限制(秒),Logstash强制在此设置中指定的时间限制后刷新
index "logstash-%{+YYYY.MM.dd}" 用于指定Elasticsearch引擎的索引
manage_templpate true 用于在Elasticsearch中应用默认模板
parent nil 用于指定Elasticsearch中父文档的id
password 用于对Elasticsearch中安全集群的请求进行身份验证
path 用于指定Elasticsearch的HTTP路径。
pipeline 用于设置摄取管道,用户希望为一个事件执行
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 "" 它更新文档,或者如果 document_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 "logstash.alert@nowhere.com" 用于指定发件人的电子邮件地址
htmlbody "" 用于指定html格式的邮件正文
password 用于与邮件服务器进行身份验证
port 25 用于定义与邮件服务器通信的端口
replyto 用于指定email的reply-to字段的email id
subject "" 它包含电子邮件的主题行
use_tls false 启用或禁用与邮件服务器通信的 TSL
username Is 包含与服务器进行身份验证的用户名
via "smtp" 定义了Logstash发送邮件的方法

http

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

标准输出

stdout 输出插件用于在命令行界面的标准输出上写入输出事件。它是 Windows 中的命令提示符和 UNIX 中的终端。此插件具有以下设置-
名称 默认值 描述
codec "plain" 它用于在将输出日志数据发送到目标源之前对其进行编码。
workers 1 用于指定输出的worker数量

统计数据

它是一个网络守护进程,用于通过 UDP 将矩阵数据发送到目标后端服务。它是 Windows 中的命令提示符和 UNIX 中的终端。这个插件有以下设置-
名称 默认值 描述
codec "plain" 用于在将输出日志数据发送到目标源之前对其进行编码。
count {} 用于定义要在指标中使用的计数
decrement [] 用于指定减量指标名称
host "本地主机" 包含statsd服务器地址
increment [] 用于指定增量指标名称
port 8125 包含statsd服务器的端口
sample_rate 1 用于指定metric的采样率
sender "%{host}" 指定发件人姓名
set {} 用于指定一个集合度量
timing {} 用于指定时间度量
workers 1 用于指定输出的worker数量

过滤插件

Logstash 支持各种过滤器插件来解析输入日志并将其转换为更结构化且易于查询的格式。
使用过滤器插件的语法如下-
filter {
   Plugin name {
      Setting 1……
      Setting 2……..
   }
}
可以使用以下命令下载过滤器插件-
>logstash-plugin install logstash-filter-<plugin name>
Logstash-plugin 实用程序位于 Logstash 安装目录的 bin 文件夹中。下表描述了 Logstash 提供的输出插件。
插件名称和说明
aggregate
这个插件从同类型的各种事件中收集或聚合数据,并在最终事件中处理它们
alter
它允许用户更改日志事件的字段,这些事件过滤器不处理
anonymize
用于用一致的hash替换字段的值
cipher
用于在将输出事件存储到目标源之前对其进行加密
clone
用于在Logstash中创建输出事件的副本
collat​​e
按时间或计数合并来自不同日志的事件
csv
这个插件根据分隔符解析输入日志中的数据
date
它从事件中的字段中解析日期并将其设置为事件的时间戳
dissect
这个插件可以帮助用户从非结构化数据中提取字段,并使grok过滤器可以轻松正确地解析它们
drop
用于丢弃所有相同类型或任何其他相似的事件
elapsed
用于计算开始和结束事件之间的时间
Elasticsearch
用于将之前Elasticsearch中存在的日志事件的字段复制到Logstash中的当前字段
extractnumbers
用于从日志事件中的字符串中提取数字
geoip
它在事件中添加一个字段,其中包含日志事件中存在的IP位置的纬度和经度
grok
常用的过滤器插件,解析事件获取字段
i18n
它从日志事件中的一个字段中删除特殊字符
json
用于在事件或事件的特定字段中创建结构化的Json对象
kv
这个插件在日志数据中配对键值对很有用
metrics
用于聚合指标,例如计算每个事件的持续时间
multiline
它也是常用的过滤器插件之一,它可以帮助用户将多行日志数据转换为单个事件。
mutate
此插件用于重命名、删除、替换和修改事件中的字段
range
用于根据预期范围和范围内的字符串长度检查事件中字段的数值。
ruby
用于运行任意Ruby代码
sleep
这使 Logstash 休眠指定的时间
split
它用于拆分事件的一个字段并将所有拆分的值放在该事件的克隆中
xml
用于通过解析日志中存在的 XML 数据来创建事件

编解码器插件

编解码器插件可以是输入或输出插件的一部分。这些插件用于更改或格式化日志数据表示。 Logstash 提供多种编解码器插件,如下所示-
插件名称和说明
avro
此插件将 Logstash 事件编码序列化为 avro 数据或将 avro 记录解码为 Logstash 事件
cloudfront
此插件从 AWS cloudfront 读取编码数据
cloudtrail
这个插件用于从AWS cloudtrail读取数据
collectd
这从名为 collect over UDP 的二进制协议读取数据
compress_spooler
用于将Logstash中的日志事件压缩成spooled batches
dots
通过为每个事件设置一个点到标准输出来使用性能跟踪
es_bulk
用于将Elasticsearch的批量数据转换成包含Elasticsearch元数据的Logstash事件
graphite
这个编解码器从graphite中读取数据到events中,并将event转化为graphite格式的记录
gzip_lines
此插件用于处理 gzip 编码数据
json
这用于将 Json 数组中的单个元素转换为单个 Logstash 事件
json_lines
用于处理带换行符的Json数据
line
它的插件会在一个live中读写事件,这意味着在换行符之后会有一个新的事件
multiline
用于将多行日志数据转换为单个事件
netflow
该插件用于将nertflow v5/v9数据转换为logstash事件
nmap
将nmap结果数据解析成XML格式
plain
读取没有分隔符的文本
rubydebug
这个插件将使用 Ruby Awesome 打印库编写输出 Logstash 事件

构建自己的插件

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

生成基础结构

用户可以使用 logstash-plugin 实用程序的生成选项生成必要的文件,也可以在 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
我们将消息更改为 − 默认⇒"嗨,正在lidihuo.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
输出日志
以下代码块显示输出日志数据。
{
   "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 lidihuo.com",
   "taskid" => "48566",
   "tags" => []
}

在 Logstash 上发布

开发人员还可以通过将其上传到 github 并按照 Elasticsearch 公司定义的标准化步骤将其自定义插件发布到 Logstash。
有关发布的更多信息,请参阅以下 URL-
https://www .elastic.co/guide/en/logstash/current/contributing-to-logstash.html
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4