Logstash - 内部架构

在本章中,我们将讨论内部体系结构和Logstash的不同组件.

Logstash服务架构

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

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

Logstash服务架构

Logstash内部架构

Logstash管道包含三个组件输入,过滤器输出.输入部分负责指定和访问输入数据源,例如 Apache Tomcat服务器的日志文件夹.

Logstash内部架构

解释Logstash管道的示例

Logstash配置文件包含有关这三个组件的详细信息Logstash.在这种情况下,我们创建一个名为 Logstash.conf 的文件名.

以下配置从输入日志"inlog.log"中捕获数据并写入到没有任何过滤器的输出日志"outlog.log".

Logstash.conf

Logstash配置文件只复制

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

inlog.log

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

 
 Hello it1352.com

outlog.log

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

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

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

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

Logstash.conf

在此Logstash配置中,我们添加了一个名为 grok 的过滤器来过滤掉输入数据.与模式序列输入日志匹配的输入日志事件仅在出错时到达输出目标. 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 /IT屋/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 /IT屋/logstash", "uri":"/IT屋/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"]
}