elasticsearch 通过LogStash批量导入数据

20jt8wwn  于 2023-05-06  发布在  ElasticSearch
关注(0)|答案(2)|浏览(223)

我必须通过LogStash批量导入数据,如下所示:
来源:Restful Get API
目的地:ElasticSearch
我的logstash配置文件如下所示:

input {
  http_poller {
    urls => {
     test1 => {
       method => get
       url => "https://forun/questions?limit=100&offset=0"
       headers => {
         Accept => "application/json"
    }
  }
}

output {
elasticsearch{
 hosts => ["localhost:9200"]
 index => "testindex"
}
  stdout {
    codec => rubydebug
  }
}

这一次可获取200条记录。
但是,我有超过10000条记录,需要在http-poller插件的输入中应用分页逻辑。
请帮助我如何在这里应用分页逻辑。

ecr0jaav

ecr0jaav1#

我不确定这是否是正确的建筑。为什么你决定将数据拉入Logstash(使用http_poller输入插件)而不是将数据推送到Logstash?
如果是单次批量上传;你可以编写一些脚本,通过http(使用http输入插件)直接将事件发送到Logstash。或者,如果它不是一个单一的批量上传,并且有很多数据随着时间的推移而增长,您可以考虑将事件发送到像Kafka/Redis/RabbitMQ这样的东西,这些东西可以使用相关的输入插件流式传输到Logstash。

siv3szwd

siv3szwd2#

我有一个类似的情况,我想使用http_poller输入插件将批量数据加载到elasticsearch中。数据是从sap CDC获取的,因此需要在请求中提供用户名和密码。我如何使用HTTP输入插件来实现这一点,因为http_poller只允许300个记录,即使在随后的运行中,它也会拉取随机数据,而不是增量加载。这是我对http_poller的实现。我怎么能d相同使用HTTP输入插件?

input {
http_poller {
  urls => {
    test_url =>{
      url => "${cdcurl}"
      method => post
      user => "${devuser}"
      password => "${password}"
      headers => {
                "Accept" => "application/json"
              }
      params => {
          query => "select * from accounts where created >= '2022-09-17T15:00:00.010Z'"
        }
      }
  }
  codec => "json"
  request_timeout => 60
  schedule => { "every" => "20s" }
}
}

filter {
 json {
    source => "message"
  }
  split {
    field => "[results]"
  }
  prune {
        whitelist_names => ["^results$"]
      }
}

output {
    elasticsearch {
        cloud_id => '${ELASTICSEARCH_CLOUD_ID}'
        cloud_auth => '${ELASTICSEARCH_CLOUD_AUTH}'
        index => "sapcdc"
        action => "index"
        document_id => "%{[results][UID]}"
    }
    stdout { codec => rubydebug }
}```

相关问题