Logstash:使用 Logstash 的 prune 过滤器功能将指定字段列入白名单

Logstash 的 prune 滤器插件可以利用白名单,以确保仅从 Logstash 输出特定的所需字段,并删除所有其他字段。 在此博客文章中,我们演示了在索引到 Elasticsearch 之前,如何使用 Logstash 将所需字段和所需子文档列入白名单。

例子输入文档

作为 Logstash 的输入,我们使用包含股市交易的 CSV 文件。 以下是 CSV 股票市场交易的一些示例。

1483230600,1628.75,1678.1,1772.8,2443.6
1483232400,1613.63,1688.5,1750.5,2460.2
1483234200,1606.51,1678.6,1718,2448.2
1483236000,1621.04,1684.1,1708.1,2470.4

逗号分隔的值表示 “time”,“ DAX”,“ SMI”,“ CAC”,“ FTSE”。 你可能希望将以上几行复制并粘贴到一个名为 stocks.csv 的 CSV 文件中,以便执行此博客文章后面给出的示例命令行。

样本 Logstash 管道

下面是一个 Logstash 管道,可以将其存储在名为 “stocks.conf” 的文件中,该文件将执行以下操作:

  • 从标准输入中以 CSV 格式的输入读取股市交易。
  • 将 CSV 输入的每一行映射到 JSON 文档,其中 CSV 列映射到 JSON 字段。
  • 将时间字段转换为 Unix 格式。
  • 将 DAX 和 CAC 字段移到称为 “my_nest” 的嵌套结构中。
  • 将 “my_nest” 字段(包含子文档)和 “SMI” 字段列入白名单,以便将所有其他(未列入白名单的)字段删除。
  • 将生成的文档写入名为 “stocks_whitelist_test” 的Elasticsearch 索引。

stocks.conf

# For this simple example, pipe in data from stdin. 
input {
    stdin {}
}

filter {
    csv {
        columns => ["time","DAX","SMI","CAC","FTSE"]
        separator => ","
        convert => { 'DAX' => 'float'
        'SMI' => 'float'
        'CAC' => 'float'
        'FTSE' => 'float'}
    }
    date {
        match => ['time', 'UNIX']
    }
    mutate {
        # Move DAX and CAC into a sub-document 
        # called 'my_nest'
        rename => {
            "DAX" => "[my_nest][DAX]"
            "CAC" => "[my_nest][CAC]"
        }
    }
     
    # Remove everything except "SMI" and the 
    # "my_nest" sub-document 
    prune {
         whitelist_names => [ "SMI", "my_nest" ]
    }
}

output {
    stdout { codec => dots }
    elasticsearch {
        index => "stocks_whitelist_test"
    }
}

测试 Logstash 管道

要使用示例 CSV 数据测试该管道,你可以执行与以下命令类似的操作,并对其进行修改以确保您使用的系统路径正确:

cat ./stocks.csv | ./bin/logstash -f ./stocks.conf

你可以通过从 Kibana 的开发人员控制台执行以下命令来检查已存储在 Elasticsearch 中的数据:

GET /stocks_whitelist_test/_search

其中应显示具有以下结构的文档:

    "hits" : [
      {
        "_index" : "stocks_whitelist_test",
        "_type" : "_doc",
        "_id" : "Pk4R0nMBSNqQApgz9SS0",
        "_score" : 1.0,
        "_source" : {
          "SMI" : 1688.5,
          "my_nest" : {
            "DAX" : 1613.63,
            "CAC" : 1750.5
          }
        }
      },
      {
        "_index" : "stocks_whitelist_test",
        "_type" : "_doc",
        "_id" : "PE4R0nMBSNqQApgz9CTu",
        "_score" : 1.0,
        "_source" : {
          "SMI" : 1684.1,
          "my_nest" : {
            "DAX" : 1621.04,
            "CAC" : 1708.1
          }
        }
      },
    ...
   

请注意,只有 “my_nest” 和 “SMI” 已被索引,如文档 “ _source” 的内容所示。 另请注意,“FTSE” 和 “time” 字段已删除,因为它们不在 prune 过滤器的白名单中。

扫描二维码关注公众号,回复: 11561820 查看本文章

结论

在此博客文章中,我们演示了 Logstash 的 prune 过滤器插件如何利用白名单来确保 Logstash 仅输出特定的所需字段。

猜你喜欢

转载自blog.csdn.net/UbuntuTouch/article/details/107894282