在本章中,我们将讨论内部体系结构和Logstash的不同组件.
Logstash服务架构
Logstash处理日志来自不同的服务器和数据源,它的行为与托运人一样.托运人用于收集日志,这些日志安装在每个输入源中.像 Redis,Kafka 或 RabbitMQ 这样的经纪人是保存索引器数据的缓冲区,可能有多个代理作为故障转移实例.
像 Lucene 这样的索引器用于索引日志以获得更好的搜索性能,然后输出存储在Elasticsearch或其他输出目标中.输出存储中的数据可用于Kibana和其他可视化软件.
Logstash内部架构
Logstash管道包含三个组件输入,过滤器和输出.输入部分负责指定和访问输入数据源,例如 Apache Tomcat服务器的日志文件夹.
解释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屋/LogstashInput 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"]}