logstash:如何包含输入文件行号

eLR*_*uLL 8 logging elasticsearch logstash filebeat

我正在尝试创建一种导航我的日志文件的方法,我需要的主要功能是:

  1. 在日志文件中搜索字符串(并返回出现的行).
  2. 从一行x到另一行的分页y.

现在我正在检查Logstash,它看起来很适合我的第一个功能(搜索),但不是第二个功能.我的想法是,我可以以某种方式索引文件行号以及每条记录的日志信息,但我似乎无法找到方法.

是否有某种Logstash过滤器来执行此操作?还是Filebeat处理器?我不能让它发挥作用.

我想也许我可以为我的所有进程创建一种方法来登录带有处理信息的数据库,但这也是不可能的(或非常困难),因为Log Handler也不知道当前的日志行是什么.

最后,我能做的是,为服务分页我的日志文件(通过服务)的方法是实际打开它,导航到一个特定的行并在一个不是最优的服务中显示它作为文件可能非常大,我已经将它索引到Elasticsearch(使用Logstash).

我目前的配置非常简单:

Filebeat

filebeat.prospectors:
- type: log
  paths:
    - /path/of/logs/*.log
output.logstash:
  hosts: ["localhost:5044"]
Run Code Online (Sandbox Code Playgroud)

Logstash

input {
    beats {
        port => "5044"
    }
}
output {
  elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在例如我得到的项目如下:

    {
      "beat": {
        "hostname": "my.local",
        "name": "my.local",
        "version": "6.2.2"
      },
      "@timestamp": "2018-02-26T04:25:16.832Z",
      "host": "my.local",
      "tags": [
        "beats_input_codec_plain_applied",
      ],
      "prospector": {
        "type": "log"
      },
      "@version": "1",
      "message": "2018-02-25 22:37:55 [mylibrary] INFO: this is an example log line",
      "source": "/path/of/logs/example.log",
      "offset": 1124
    }
Run Code Online (Sandbox Code Playgroud)

如果我可以以某种方式包含在该项目中的字段line_number: 1,那将是很好的,因为我可以使用Elasticsearch过滤器实际导航整个日志.


如果你们有不同的方法存储我的日志(和导航)的想法,请告诉我

Ser*_*lle 4

日志文件是您生成的吗?或者你可以改变日志结构吗?然后你可以添加一个计数器作为前缀并使用logstash将其过滤掉。

例如对于

12345 2018-02-25 22:37:55 [mylibrary] INFO: this is an example log line
Run Code Online (Sandbox Code Playgroud)

你的过滤器必须如下所示:

filter {
   grok {
     match => {"message" => "%{INT:count} %{GREEDYDATA:message}"
     overwrite => ["message"]
   }
}
Run Code Online (Sandbox Code Playgroud)

将创建新字段“count”。然后您就可以将它用于您的目的。