我正在阅读Logstash参考[1.5]的Logstash配置示例部分中的Processing Apache Logs示例。其中一句话是:
"还会捕获记录到此文件的任何其他行, 由Logstash作为事件处理,并存储在Elasticsearch中。"
我正在尝试通过在Logstash关闭尚未完成时向被监视的日志文件中再添加一行来实现它。这基本上就是我所说的"实时"在问题标题中。
步骤1.将logstash-apache.conf传递给Logstash
Logstash I使用的版本是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处理之后,标准输出以rubydebug格式显示3个结果,可以在上传的图像中看到(当然,这3个也在Elasticsearch中编入索引): Image of 3 results appearing in the standard out in the rubydebug format after Logstash's processing
请注意,此时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"
执行此操作后,我希望在标准中显示另外一个结果,因为我相信文件输入插件可以配置为执行此操作,因为同一参考文件中的文件输入插件部分说:
该插件旨在跟踪更改的文件并发出新的内容 附加到每个文件。
不幸的是,什么都没发生。
我走错了路,做错了吗?如果没有,这里的任何人都可以帮助我实现我打算做的事情,并可能解释其背后的机制吗?任何帮助将不胜感激。