Logstash – 内部架构

Logstash – 内部架构


在本章中,我们将讨论 Logstash 的内部架构和不同组件。

Logstash 服务架构

Logstash 处理来自不同服务器和数据源的日志,它充当托运人。托运人用于收集日志,这些日志安装在每个输入源中。Redis、KafkaRabbitMQ这样的代理是为索引器保存数据的缓冲区,可能有多个代理作为故障转移实例。

Lucene这样的索引器用于索引日志以获得更好的搜索性能,然后输出存储在 Elasticsearch 或其他输出目的地。输出存储中的数据可用于 Kibana 和其他可视化软件。

Logstash 服务架构

Logstash 内部架构

Logstash 管道由三个组件Input、FiltersOutput 组成输入部分负责指定和访问Apache Tomcat Server的日志文件夹等输入数据源

Logstash 内部架构

解释 Logstash 管道的示例

Logstash 配置文件包含有关 Logstash 三个组件的详细信息。在本例中,我们将创建一个名为Logstash.conf的文件名

以下配置从输入日志“inlog.log”中捕获数据并将其写入输出日志“outlog.log”,而没有任何过滤器。

配置文件

Logstash 配置文件只是使用输入插件inlog.log文件中复制数据,并使用输出插件将日志数据刷新到outlog.log文件中。

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog.log"
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog.log"
   }
}

运行 Logstash

Logstash 使用–f选项指定配置文件。

C:\logstash\bin> logstash –f logstash.conf

日志文件

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

Hello tutorialspoint.com

输出日志

Logstash 输出包含消息字段中的输入数据。Logstash 还向输出添加了其他字段,如时间戳、输入源路径、版本、主机和标签。

{
   "path":"C:/tpwork/logstash/bin/log/inlog1.log",
   "@timestamp":"2016-12-13T02:28:38.763Z",
   "@version":"1", "host":"Dell-PC",
   "message":" Hello tutorialspoint.com", "tags":[]
}

尽你所能,Logstash 的输出包含的不仅仅是通过输入日志提供的数据。输出包含源路径、时间戳、版本、主机名和标签,用于表示错误等额外消息。

我们可以使用过滤器来处理数据并使其对我们的需求有用。在下一个示例中,我们使用过滤器来获取数据,这将输出限制为仅带有动词(如 GET 或 POST 后跟唯一资源标识符)的数据

配置文件

在这种Logstash配置中,我们将其命名添加过滤器神交滤除输入数据。与模式序列输入日志匹配的输入日志事件只会错误地到达输出目的地。Logstash 在输出事件中添加了一个名为“_grokparsefailure”的标签,该标签与 grok 过滤器模式序列不匹配。

Logstash 提供了许多内置的正则表达式模式来解析流行的服务器日志,比如 Apache。这里使用的模式需要一个动词,如 get、post 等,后跟一个统一的资源标识符。

input {
   file {
      path => "C:/tpwork/logstash/bin/log/inlog2.log"
   }
}
filter {
   grok {
      match => {"message" => "%{WORD:verb} %{URIPATHPARAM:uri}"}
   }
}
output {
   file {
      path => "C:/tpwork/logstash/bin/log/outlog2.log"
   }
}

运行 Logstash

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

C:\logstash\bin> logstash –f  Logstash.conf

inlog2.log

我们的输入文件包含两个由默认分隔符分隔的事件,即新行分隔符。第一个事件与 GROk 中指定的模式匹配,第二个不匹配。

GET /tutorialspoint/Logstash
Input 1234

outlog2.log

我们可以看到第二个输出事件包含“_grokparsefailure”标签,因为它与 grok 过滤器模式不匹配。用户还可以使用输出插件中“if”条件在输出中删除这些不匹配的事件

{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:47:10.352Z","@version":"1","host":"Dell-PC","verb":"GET",
   "message":"GET /tutorialspoint/logstash", "uri":"/tutorialspoint/logstash", "tags":[]
}
{
   "path":"C:/tpwork/logstash/bin/log/inlog2.log",
   "@timestamp":"2016-12-13T02:48:12.418Z", "@version":"1", "host":"Dell-PC",
   "message":"t 1234\r", "tags":["_grokparsefailure"]
}

觉得文章有用?

点个广告表达一下你的爱意吧 !😁