使用JSON输入/输出测试Logstash配置


Logstash是一个数据处理管道,允许您从各种来源收集数据,然后将其转换并发送到目的地。它最常用于将数据发送到Elasticsearch(一种分析和搜索引擎),然后可以使用Kibana进行查看。Elasticsearch、Logstash和Kibana一起构成了ELK 堆栈
Logstash 使用配置文件来配置传入事件的处理方式。

问题
最近,我想以最简单的方式在本地测试一个Logstash配置文件。
我没有安装或设置ELK堆栈的任何部分,也没有足够的时间将相当复杂的Logstash配置变更推送到远程环境。我没有足够的时间去安装完整的ELK堆栈,也没有足够的时间去让每个组件相互交谈。我想实现的目标很简单。
给出一个JSON格式的传入日志,应用一个Logstash配置并查看输出事件。

设置
为了演示的目的,我将从一个任意的C:\temp目录开始工作。
首先,在C:\temp创建3个空白文件。

  • logstash.conf - 将用于声明我们要测试的配置。
  • logstash_out.logs - 我们将在这里存储logstash配置的输出。
  • logstash_in.logs - 供logstash配置使用的输入日志。

安装
你不需要安装Kibana或Elasticsearch,因为我们要将输出存储在本地文件中。
Logstash是需要安装的。我是用Chocolatey安装的,就像我推荐在Windows上安装其他东西一样。安装包括一个logstash.bat文件,用于运行Logstash,并允许你指定配置。
请注意安装位置! 我的二进制文件被安装在C:\ProgramData\chocolatey\lib\logstash\tools下。
你还需要安装Java,因为这是Logstash用来运行的东西。

输入
日志文件中应该有一个JSON格式的输入日志列表,每行一个。Logstash将把每一行作为一个单独的事件来处理。
让我们在logstash_in.logs文件中添加以下内容

{index:"12345",id:1,message:"hello world"}
{index:
"12345",id:2,message:"help me"}
{index:
"12345",id:3,message:"error"}

然后在logstash.conf文件中添加以下内容
input {
  file{
    path => "C:/temp/*.logs"
    start_position =>
"beginning"
    sincedb_path =>
"NUL"
    codec => json
  }
}

  • path :我们告诉Logstash,输入来自C:\temp目录下的所有.logs文件。在我们的例子中只有一个。
  • codec: 关于.logs的扩展名没有什么特别的。事件是以纯文本形式被消费的--是编解码器向Logstash指明了格式(在我们的例子中是JSON)。
  • start_position 我们指定Logstash应该从事件列表的开始处开始处理。
  • sincedb_path 我们为sincedb_path指定了NUL。这是因为Logstash存储了一个指针来指示它到哪里去消费事件。放置NUL意味着我们将忽略Logstash的指针,而总是读取整个文件。我曾在一些情况下感到困惑,我在想 "为什么我的输入日志没有被消耗?"这是因为Logstash认为它已经消耗了它们。

插件
这是你可以添加任何你喜欢的自定义逻辑的地方,也是你可能正在尝试的地方。让我们在logstash.conf文件中添加一些琐碎的东西,比如添加一个任意的字段

filter {
  mutate {
    add_field => {"source" => "Medium"}
  }
}

输出
你可以输出到任何你喜欢的基于文本的文件。让我们告诉logstash将事件输出到我们的(已经创建的)logstash_out.logs文件中。

output {
 file {
   path => "c:/temp/logstash_out.logs"
 }
}

结果
差不多了。我们的最终配置是

input {
  file{
    path => "C:/temp/*.logs"
    start_position =>
"beginning"
    sincedb_path =>
"NUL"
    codec => json
  }
}
filter {
  mutate {
    add_field => {
"source" => "Medium"}
  }
}
output {
 file {
   path =>
"c:/temp/logstash_out.log"
 }
}

在导航到包含你的Logstash安装目录后,使用我们的配置运行Logstash,像这样

logstash.bat -f C:\temp\logstash.conf

我们看到output.logs文件被填充了一些行,看起来像是

{"@version":"1","index":"12345","message":"hello world","path":"C:/temp/logstash_input.logs","id":1,"host":"HXXXXXXXXXXX","@timestamp":"2020-08-12T08:53:06.774Z","source":"Medium"}

请注意,Logstash已经添加了一些默认字段(黑体),但我们也有我们的 "源"。"Medium",这是我们在过滤块中指定的。赢了。
现在你可以用插件来玩弄你喜欢的任何配置。我们在这里做了一个简单的过滤器,但它可以变得更加复杂。