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 实用程序存在于bin folderLogstash 安装目录。下表列出了 Logstash 提供的输入插件。序号 插件名称和描述 1 beats从弹性节拍框架中获取日志记录数据或事件。2 cloudwatch从 CloudWatch 中提取事件,这是 Amazon Web Services 提供的一种 API。3 couchdb_changes使用此插件发布的来自 couchdb 的 _chages URI 的事件。4 drupal_dblog使用启用的 DBLog 提取 drupal 的看门狗日志记录数据。5 Elasticsearch检索在 Elasticsearch 集群中执行的查询的结果。6 eventlog从 Windows 事件日志中获取事件。7 exec在 Logstash 中获取 shell 命令输出作为输入。8 file从输入文件中获取事件。当 Logstash 与输入源一起本地安装并且可以访问输入源日志时,这很有用。9 generator它用于测试目的,这会创建随机事件。10 github从 GitHub webhook 捕获事件。11 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 设置进行更改。以下是此输入插件的设置。Setting Name 默认值 Description 添加字段 {} 将新字段附加到输入事件。 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 集群中的搜索查询结果。以下是此插件中使用的设置 -设置名称 默认值 Description 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 监控以获取输入。 密码 用于身份验证。 询问 "{ \"排序\": [ \"_doc\" ] }" 查询执行。 ssl false 启用或禁用安全套接字层。 tags 在输入事件中添加任何附加信息。 type 它用于对输入表单进行分类,以便在后期轻松搜索所有输入事件。 用户 出于真实目的。 事件簿
此输入插件从 windows 服务器的 win32 API 读取数据。以下是此插件的设置 -设置名称 Default Value Description add_field {} 与文件插件相同,用于在输入事件中附加字段 codec “plain” 它用于解码来自窗口的输入事件;在进入 Logstash 管道之前 logfile [“应用程序”、“安全”、“系统”] 输入日志文件中所需的事件 interval 1000 它以毫秒为单位,定义了两次连续检查新事件日志之间的时间间隔 tags 在输入事件中添加任何附加信息 type 用于将特定插件的输入分类为给定类型,以便在后期轻松搜索所有输入事件 推特
此输入插件用于从其 Streaming API 收集 twitter 的提要。下表描述了此插件的设置。Setting Name 默认值 Description 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 中的状态。欲了解更多信息,请访问full_tweet false 如果您希望 Logstash 读取来自 twitter API 的完整对象返回,您可以将其更改为 true id 它用于为特定的输入插件实例提供唯一的标识号 ignore_retweets False 您可以更改设置为 true 以忽略输入推特提要中的转推 keywords 它是一组关键字,需要在 Twitter 的输入提要中进行跟踪 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” 它用于解码来自窗口的输入事件;在进入 Logstash 管道之前 enable_metric true 它用于启用或禁用该插件实例的指标报告和收集 主持人 “0.0.0.0” 客户端所依赖的服务器操作系统的地址 ID 它包含 twitter 应用程序的使用者密钥 模式 “服务器” 用于指定输入源是服务器还是客户端。 港口 它定义了端口号 ssl_cert 用于指定 SSL 证书的路径 ssl_enable 错误的 启用或禁用 SSL ssl_key 指定 SSL 密钥文件的路径 标签 在输入事件中添加任何附加信息 type 用于将特定插件的输入分类为给定类型,以便在后期轻松搜索所有输入事件 -
Logstash – 输出插件
Logstash 支持各种输出源和不同的技术,如数据库、文件、电子邮件、标准输出等。使用输出插件的语法如下 -output { Plugin name { Setting 1…… Setting 2…….. } }
您可以使用以下命令下载输出插件 ->logstash-plugin install logstash-output-<plugin name>
这Logstash-plugin utility存在于 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它用于将输出事件发送到亚马逊的简单通知服务。26 solr_http它在 Solr 中索引和存储输出日志数据。27 sps它用于将事件发送到 AWS 的简单队列服务。28 statsd它用于将指标数据传送到 statsd 网络守护进程。29 stdout它用于在 CLI 的标准输出上显示输出事件,如命令提示符。30 syslog它用于将输出事件发送到 syslog 服务器。31 tcp它用于将输出事件发送到 TCP 套接字。32 udp它用于通过 UDP 推送输出事件。33 websocket它用于通过 WebSocket 协议推送输出事件。34 xmpp它用于通过 XMPP 协议推送输出事件。所有插件都有其特定的设置,这有助于在插件中指定重要的字段,如端口、路径等。我们将讨论一些输出插件的设置。弹性搜索
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 它定义了两次刷新之间的时间限制(秒),Logstash 在此设置中指定的时间限制后强制刷新 index “logstash-%{+YYYY.MM.dd}” 用于指定 Elasticsearch 引擎的索引 manage_temlpate true 它用于在 Elasticsearch 中应用默认模板 parent nil 用于指定 Elasticsearch 中父文档的 id password 它用于验证对 Elasticsearch 中安全集群的请求 path 用于指定 Elasticsearch 的 HTTP 路径。 pipeline nil 它用于设置摄取管道,用户希望为事件执行 代理人 用于指定 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 请求进行身份验证 电子邮件
当 Logstash 生成输出时,电子邮件输出插件用于通知用户。下表描述了此插件的设置。设置名称 Default Value Description 地址 “本地主机” 是邮件服务器的地址 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 用于指定电子邮件回复字段的电子邮件ID subject “” 它包含电子邮件的主题行 use_tls false 启用或禁用 TSL 以与邮件服务器通信 username 是包含与服务器进行身份验证的用户名 via “smtp” 它定义了 Logstash 发送电子邮件的方法 Http
此设置用于通过 http 将输出事件发送到目标。该插件具有以下设置 -Setting Name 默认值 Description automatic_retries 1 用于设置logstash的http请求重试次数 cacert 它包含用于服务器证书验证的文件路径 codec “plain” 它用于在将输出日志数据发送到目标源之前对其进行编码。 content_type i 指定对目的服务器的http请求的内容类型 饼干 真的 它用于启用或禁用 cookie format "json" 用于设置http请求体的格式 标题 它包含http头的信息 http_method “” 用于指定logstash在请求中使用的http方法,取值可以是“put”、“post”、“patch”、“delete”、“get”、“head” 请求超时 60 它用于向邮件服务器进行身份验证 url 指定 http 或 https 端点是此插件的必需设置 标准输出
stdout 输出插件用于将输出事件写入命令行界面的标准输出。它是 Windows 中的命令提示符和 UNIX 中的终端。该插件具有以下设置 -设置名称 默认值 Description codec “plain” 它用于在将输出日志数据发送到目标源之前对其进行编码。 工作人员 1 它用于指定输出的工人数量 状态
它是一个网络守护进程,用于通过 UDP 将矩阵数据发送到目标后端服务。它是 Windows 中的命令提示符和 UNIX 中的终端。该插件具有以下设置 -设置名称 默认值 Description 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 收集的二进制协议读取数据5 compress_spooler它用于将 Logstash 中的日志事件压缩为假脱机批次6 dots这是通过将每个事件的点设置为标准输出来使用性能跟踪7 es_bulk这用于将来自 Elasticsearch 的批量数据转换为包括 Elasticsearch 元数据的 Logstash 事件8 graphite此编解码器将数据从石墨读取到事件中,并将事件更改为石墨格式的记录9 gzip_lines该插件用于处理 gzip 编码的数据10 json这用于将 Json 数组中的单个元素转换为单个 Logstash 事件11 json_lines用于处理带有换行符的 Json 数据12 line它的插件将在单个 live 中读取和写入事件,这意味着在换行符分隔符之后会有一个新事件13 multiline它用于将多行日志记录数据转换为单个事件14 netflow该插件用于将 nertflow v5/v9 数据转换为 logstash 事件15 nmap它将 nmap 结果数据解析为 XML 格式16 plain这读取没有分隔符的文本17 rubydebug该插件将使用 Ruby Awesome 打印库编写输出 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
我们将消息更改为 - 默认值⇒“嗨,您正在 cainiaoya.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 } }
Run 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 cainiaoya.com", "taskid" => "48566", "tags" => [] }
在 Logstash 上发布
开发人员还可以通过将其上传到 github 并遵循 Elasticsearch 公司定义的标准化步骤,将他/她的自定义插件发布到 Logstash。有关发布的更多信息,请参阅以下 URL -