Ruby 使用Logstash管道计算日志中的行号

Ruby 使用Logstash管道计算日志中的行号,ruby,logstash,Ruby,Logstash,想象一下,我们有一些这样的日志 Jun2012|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized| Jun2012|17:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized| Jun2013|16:52:39|10.0.0.1|log|

想象一下,我们有一些这样的日志

Jun2012|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2012|17:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2013|16:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2012|18:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
Jun2012|19:52:39|10.0.0.1|log|keyinst||daemon|inbound|VPN-1 & FireWall-1|Certificate initialized|
。。。。。 我可以在编辑器中看到行号,但我想计算每行的行号,并将其作为字段

{...,"line_num" : 23, ...} 

我怎么做这个?有人能举个例子吗?

Ruby有一个特殊的变量
$。
有行号

File.foreach(logfile).each do |line|
   puts "#{$.}: #{line}"
end

Ruby有一个特殊的变量
$。
,它有行号

File.foreach(logfile).each do |line|
   puts "#{$.}: #{line}"
end

使用
读线
索引

result = []
File.readlines('test.log').each.with_index(1) do |line, index|
  result << { content: line, line_num: index }
end

使用
读线
索引

result = []
File.readlines('test.log').each.with_index(1) do |line, index|
  result << { content: line, line_num: index }
end

Logstash没有关于文件中事件行号的信息,当您使用
文件
输入时,它只跟踪字节偏移量

如果您使用filebeat将日志发送到logstash,您还可以获得有关字节偏移量的信息,但没有对实际行号的跟踪

File.foreach(logfile).each do |line|
   puts "#{$.}: #{line}"
end

如果您只想对事件进行排序,可以使用此偏移量,如果您需要实际行号,则需要在将其发送到logstash之前实现一种在事件中添加此信息的方法。

logstash在文件中没有关于事件行号的信息,当您使用
文件
输入时,它只跟踪字节偏移量

如果您使用filebeat将日志发送到logstash,您还可以获得有关字节偏移量的信息,但没有对实际行号的跟踪

File.foreach(logfile).each do |line|
   puts "#{$.}: #{line}"
end

如果您只想对事件进行排序,您可以使用此偏移量,如果您需要实际的行号,您需要在将其发送到logstash之前实现将此信息添加到事件中的方法。

我已经解决了该问题,通过创建您自己的输入编解码器插件,您可以通过迭代事件来计算行号

我已经解决了这个问题,通过创建您自己的输入编解码器插件,您可以通过迭代事件来计算行号

看一看–它会生成每个元素及其(基于零的)索引。看看–它会生成每个元素及其(从零开始的)索引。感谢您的回答。我在ruby插件中尝试了你的解决方案,但是没有成功,所以你能分享你的过滤器插件吗?你应该能够用普通ruby和日志文件执行上面的代码片段我知道如何执行ruby文件。如果你读了这个问题,我是在问我如何在logstash管道中做到这一点。就像ruby插件的内部一样。您在ruby中只共享了一个简单的循环。我的问题是如何通过使用ruby filter插件在logstash ruby filter中实现。显然,ruby支持logstash事件。像这样使用ruby=>'ruby{code=>“event['message']='…'”}感谢您的回答。我在ruby插件中尝试了你的解决方案,但是没有成功,所以你能分享你的过滤器插件吗?你应该能够用普通ruby和日志文件执行上面的代码片段我知道如何执行ruby文件。如果你读了这个问题,我是在问我如何在logstash管道中做到这一点。就像ruby插件的内部一样。您在ruby中只共享了一个简单的循环。我的问题是如何通过使用ruby filter插件在logstash ruby filter中实现。显然,ruby支持logstash事件。像这样使用ruby=>'ruby{code=>“event['message']='…'”}感谢您的回答。你能分享你的logstash过滤器插件吗?谢谢你的回答。你能分享你的logstash过滤器插件吗?