1

我过去使用过 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 次中的 1 次。

我几乎肯定这是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 }
}

涵盖我的所有基础(添加标签并将文件输入设置为结束。它仍然无法正常工作。有人有什么想法吗?

谢谢,科尔

4

2 回答 2

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每次都读取测试文件,无论它认为它是否已更新。它完美地工作。

于 2014-01-20T15:48:04.423 回答
1

启动 logstash 后,您的日志是否写入“/home/shoresc/Desktop/logstash_config/sample.messages”?

默认的 Logstash File API 从文件末尾读取文件,因此不会读取之前的日志。您需要指定start_position,它将从文件的开头读取。

于 2014-01-17T05:12:58.553 回答