Logstash:导入 RSS feed 数据

Posted 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Logstash:导入 RSS feed 数据相关的知识,希望对你有一定的参考价值。

在实际的使用过程中,我们有时希望正对 RSS 的数据来进行导入并进行搜索。在现实的许多微服务中,有很多的数据是根据 RSS feed 的形式来提供的,比如我们常见的点评网站等。那么我们有没有办法把这些数据导入到 Elasticsearch 并进行搜索呢?答案是使用 Logstash 所提供的 RSS input plugin。在今天的文章中,我将使用一个例子来进行展示。

我们首先找到一个 RSS feed 源。在 Elastic 的官方网站中,我们可以看到这样的一个页面 elastic.co/blog。我们打开这个页面:

点击上面的 RSS:

在上面,我们可以看到 RSS 的响应结果。它里面含有 title, description 等信息。这些我们可以使用 RSS input plugin 来进行提取。

 

安装

由于 RSS input plugin 不是 Logstash input plugin 中的一个,我们必须进行手动安装。如果你想知道 Logstash 自带的 input plugin,你可以使用如下的命令:

./bin/logstash-plugin list --group input

上面的命令显示:

logstash-input-azure_event_hubs
logstash-input-beats
└── logstash-input-elastic_agent (alias)
logstash-input-couchdb_changes
logstash-input-elasticsearch
logstash-input-exec
logstash-input-file
logstash-input-ganglia
logstash-input-gelf
logstash-input-generator
logstash-input-graphite
logstash-input-heartbeat
logstash-input-http
logstash-input-http_poller
logstash-input-imap
logstash-input-jms
logstash-input-pipe
logstash-input-redis
logstash-input-rss
logstash-input-s3
logstash-input-snmp
logstash-input-snmptrap
logstash-input-sqs
logstash-input-stdin
logstash-input-syslog
logstash-input-tcp
logstash-input-twitter
logstash-input-udp
logstash-input-unix

RSS input plugin 显然是不在里面。我们可以使用如下的命令来进行安装:

./bin/logstash-plugin install logstash-input-rss
$ ./bin/logstash-plugin install logstash-input-rss
Using JAVA_HOME defined java: /Library/Java/JavaVirtualMachines/jdk-15.0.2.jdk/Contents/Home
WARNING, using JAVA_HOME while Logstash distribution comes with a bundled JDK
Validating logstash-input-rss
Installing logstash-input-rss
Installation successful

一旦安装成功,我们再次使用上面的 list 命令来进行查看,我们会发现 logstash-input-rss 会列入其中。

 

导入 RSS feed 数据

接下来,我们使用上面安装的 RSS input plugin 来导入 https://www.elastic.co/blog/feed 中的数据。我们首先在 Logstash 的安装根目录下创建如下的配置文件:

logstash.conf

input {
  rss {
    url => "https://www.elastic.co/blog/feed"
    interval => 120
    tags => ["rss", "elastic"]
  }
}

filter { 
  mutate { 
    rename => [ "message", "blog_html" ] 
    copy => { "blog_html" => "blog_text" } 
    copy => { "published" => "@timestamp" } 
  } 
  mutate { 
    gsub => [  
      "blog_text", "<.*?>", "", 
      "blog_text", "[\\n\\t]", " " 
    ] 
    remove_field => [ "published", "author" ] 
  }
} 
 
output {
  stdout {
    codec => rubydebug
  }

  elasticsearch { 
    hosts => [ "localhost:9200" ] 
    index => "elastic_blog" 
  }
}

在上面的 input 部分,我们定义了 rss。它的 url 是 https://www.elastic.co/blog/feed。interval 为 120,也就是 120 秒。每隔两分钟运行一次。同时我们添加了一下我们想要的 tags 便于我们的数据搜索。在 filter 部分,我们把 message 重新命名为 blog_html,并同时对字段进行了复制。在 mutate 的部分,我们把所有的 <> 括号里的内容都置换为“”,也就是去掉。同时,也置换 \\n\\t 这样的字符为空 “ ”。最后,我们删除 published 及 author 字段尽管删除 author 字段是不必要的。

我们在 Logstash 的安装目录下运行如下的命令:

./bin/logstash -f logstash.conf

我们在 console 中可以看到:

我们可以看到在 blog_text 中,那些 <> tag 里的内容都被去掉了。

我们可到 Elasticsearch 中查找索引 elastic_blog:

GET elastic_blog/_count
{
  "count" : 20,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  }
}

我们甚至可以对它进行搜索:

 

再过两分钟后,我们再次重新查看被导入的数据:

这次,我们看到 count 变为 40,也就是第一次 20 的一倍。这是由于我们每隔2分钟去重新读取一次数据。如果我们再接着等两分钟,那么数据就会变为60:

好了,在今天的练习中。我们讲述了如何使用 Logstash RSS input plugin 来导入 RSS feed 数据。希望对你的工作有所帮助。

以上是关于Logstash:导入 RSS feed 数据的主要内容,如果未能解决你的问题,请参考以下文章

Logstash RSS Feed(重复数据删除并提取某些数据)

Logstash:如何运用 Elastic Stack 结合 RSS feeds 告知可能性

Logstash:如何运用 Elastic Stack 结合 RSS feeds 告知可能性

c#使用Database MVC中的数据创建Rss-Feed

从RSS导入时如何避免重复结果

为什么iTunes商店评论RSS Feed有时会返回没有结果?