如何使用http_poller访问非本地Elasticsearch主机并实现查询排序?
问题解答
方案可行性
完全可行,http_poller插件支持通过HTTP/HTTPS协议访问任何可联网的Elasticsearch实例,包括云端部署节点。你的本地环境验证已经证明逻辑正确性,云端失败属于配置和网络层面的问题。
问题排查与修复步骤
1. 解决DNS解析失败问题
错误提示No such host is known (your-elasticsearch-domain)说明本地机器无法解析云端Elasticsearch的域名,按以下步骤处理:
- 用
ping your-elasticsearch-domain命令测试域名是否能正常解析 - 若无法解析,检查:
- 本地网络是否能正常访问外网
- 域名是否与云端ES控制台提供的访问地址完全一致
- 本地DNS配置是否正常,可尝试切换公共DNS(如8.8.8.8)
2. 修正配置中的关键错误
你的配置存在两处明显错误:
(1) 认证信息填写错误
auth块的user字段被错误填入Elasticsearch的URL,应替换为云端ES的用户名(如默认的elastic),password填写对应密码:
auth => { user => "elastic" password => "your-cloud-es-password" }
(2) 端口号错误
云端Elasticsearch(如GCP托管ES)通常使用9243作为HTTPS访问端口,而非本地常用的9200,需修正URL中的端口:
url => "https://your-elasticsearch-domain:9243/earthquake-3/_search"
3. 验证网络与认证有效性
用curl命令测试连通性,确认网络和认证没问题:
curl -u elastic:your-password https://your-elasticsearch-domain:9243/earthquake-3/_search -d '{"sort":[{"DateTime":{"order":"desc"}}],"query":{"match_all":{}},"size":1}' -H "Content-Type: application/json"
若curl能返回正常结果,重启Logstash即可。
4. 可选:配置SSL验证
如果云端ES启用严格SSL证书验证,可在http_poller中添加SSL参数:
ssl => true ssl_certificate_verification => true # 若使用自签名证书,需指定证书路径 # cacert => "/path/to/ca.crt"
修正后的完整配置示例
input { http_poller { urls => { es_data => { method => get url => "https://your-elasticsearch-domain:9243/earthquake-3/_search" headers => { Accept => "application/json" 'Content-Type' => 'application/json' } body => '{ "sort": [ { "DateTime": { "order": "desc" } } ], "query": { "match_all": {} }, "size": 1 }' auth => { user => "elastic" password => "your-cloud-es-password" } ssl => true ssl_certificate_verification => true } } request_timeout => 60 schedule => { every => "5m" } codec => "json" } } output { stdout { codec => rubydebug } }
内容的提问来源于stack exchange,提问作者Danyal Danish
相关产品推荐
相关产品推荐

