使用非常基本的配置使用logstash读取文件时遇到问题

时间:2014-01-16 17:57:21

标签: elasticsearch syslog logstash grok kibana

我过去曾使用过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 }
}

覆盖我的所有基础(添加标记并将文件输入设置为结束。它仍然无效。 有人有什么想法吗?

谢谢, 科尔

2 个答案:

答案 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,它将从文件的开头读取。