我正在阅读Logstash 参考 [1.5] 的 Logstash 配置示例部分中的处理 Apache 日志示例。其中一句话是:
“记录到此文件的任何其他行也将被捕获,由 Logstash 作为事件处理,并存储在 Elasticsearch 中。”
我正在尝试通过在 Logstash 关闭尚未完成时向正在监视的日志文件中再添加一行来实现它。这基本上就是我在问题标题中所说的“实时”的意思。
以下是我实际尝试过的方法:
步骤 1. 将 logstash-apache.conf 传递给 Logstash
我使用的 Logstash 版本是 1.5.4。logstash-apache.conf的代码是:
input {
file {
path => "/your/path/to/the/log/file"
start_position => "beginning"
type => "apache_access"
}
}
filter {
if [path] =~ "access" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {
host => localhost
protocol => "http"
port => "9200"
}
stdout { codec => rubydebug }
}
conf 文件与示例几乎相同。但是,根据阅读网站上的说明,“apache_access”的类型被添加到文件输入插件中,而不是被放入 mutate 过滤器插件中。请将文件输入插件中的路径替换为您的。
为方便起见,此处提供了示例日志:
71.141.244.242 - kurt [18/May/2011:01:48:10 -0700] "GET /admin HTTP/1.1" 301 566 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
134.39.72.245 - - [18/May/2011:12:40:18 -0700] "GET /favicon.ico HTTP/1.1" 200 1189 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)"
98.83.179.51 - - [18/May/2011:19:35:08 -0700] "GET /css/main.css HTTP/1.1" 200 1837 "http://www.safesand.com/information.htm" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
经过Logstash的处理,standard out有3个rubydebug格式的结果,在上传的图片中可以看到(当然这3个在Elasticsearch中也有索引): rubydebug格式的standard out中出现的3个结果的图片Logstash 的处理
请注意,此时 conf 文件生成的管道尚未关闭。
步骤 2. 使用服务器中的文本编辑器在文件中再添加一行日志并保存更改
这是我添加的行,应该是日志文件中的第 4 行:
71.141.244.242 - kurt [18/May/2011:01:48:10 -0700] "GET /admin HTTP/1.1" 301 566 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
完成此操作后,我希望在标准输出中显示更多结果,因为我相信文件输入插件可以配置为这样做,因为同一参考中的文件输入插件部分说:
该插件旨在跟踪更改的文件并在附加到每个文件时发出新内容。
不幸的是,什么也没发生。
我是在错误的轨道上,并且做错了整个事情吗?如果没有,这里的任何人都可以帮助我实现我打算做的事情,并可能解释其背后的机制吗?任何帮助将不胜感激。