我过去曾使用过Logstash,但它已经有一段时间了,这是我第一次尝试从文件中读取。对于我的生活,我花了几个小时来完成一项绝对简单的任务。我没有阅读整个日志,而只是从一些小的东西开始,并从中构建我的代码。
我的日志文件名为/home/shoresc/Desktop/logstash_config/sample.messages
它的内容如下:
Jan 15 00:33:48 "POST /service.php?session_name=sample_name HTTP/1.1"
我的logstash文件如下所示:
input {
file {
path => "/home/shoresc/Desktop/logstash_config/sample.messages"
}
}
filter {
grok {
patterns_dir => "/home/shoresc/Desktop/logstash_config/patterns"
match => [ "message", "%{SYSLOGBASE} %{GREEDYDATA:message1}"]
}
}
output {
stdout { codec => rubydebug }
}
最后我使用此路径引用此代码:
/usr/bin/java -Xmx256m -Xms256m -jar logstash.jar agent -w 1 -f /home/shoresc/Desktop/logstash_config/syslog.conf
Syslog.conf在该目录中,我已经验证了patterns文件夹的路径,以及sample.messages文件。 奇怪的是,它确实解析了偶尔。像20次一样。
我几乎是肯定的,这是logstash中的一个错误,但我希望社区运行它,以防我遗漏某些东西。
我在这里做错了吗?
提前致谢 科尔
我用这个更新了代码:
input {
file {
path => "/home/shoresc/Desktop/logstash_config/sample.messages"
type => syslog
start_position => "end"
}
}
filter {
if [type] == "syslog" {
grok {
patterns_dir => "/home/shoresc/Desktop/logstash_config/patterns"
match => [ "message", "%{SYSLOGBASE} %{GREEDYDATA:message1}"]
}
}
}
output {
stdout { codec => rubydebug }
}
覆盖我的所有基础(添加标记并将文件输入设置为结束。它仍然无效。 有人有什么想法吗?
谢谢, 科尔
答案 0 :(得分:4)
Ben Lim提到Logstash写入位置数据库以获取文件输入,因此通过文档中的文件输入标记读取我找到了完成测试环境的方法。
input {
file {
path => "/home/shoresc/Desktop/logstash_config/sample.messages"
type => syslog
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
if [type] == "syslog" {
grok {
patterns_dir => "/home/shoresc/Desktop/logstash_config/patterns"
match => [ "message", "%{SYSLOGTIMESTAMP} %{NOTSPACE:hostname1}/%{NOTSPACE}"]
}
}
}
output {
stdout { codec => rubydebug }
}
正如您在输入部分中看到的那样,我将数据库写入/ dev / null。这会强制logstash每次都读取测试文件,无论它是否认为它已被更新。 它运作得很好。
答案 1 :(得分:1)
启动logstash后,您的日志是否写入“/home/shoresc/Desktop/logstash_config/sample.messages”?
默认的Logstash File API从文件末尾读取文件,因此它不会读取以前的日志。您需要指定start_position,它将从文件的开头读取。