You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Stormcrawler无法写入远程Elastic Search集群问题咨询

解决StormCrawler无法向远程ES集群写入数据的问题

我之前也碰到过几乎一模一样的情况——本地ES对接完全正常,切换到开发环境集群后,索引初始化脚本能正常创建索引,但StormCrawler就是写不进数据,日志只显示URL被发现,连状态索引都没数据。分享几个我踩过的坑和排查方向:

1. 先确认网络连通性(容易忽略的端口和防火墙差异)

虽然ES_IndexInit.sh能成功执行,但StormCrawler和初始化脚本用的可能不是同一个端口!

  • 旧版StormCrawler用TransportClient(默认9300端口),而初始化脚本一般用REST接口(9200端口)。你得确认开发环境ES集群的9300端口(如果是TransportClient)有没有对StormCrawler所在机器开放。
  • 测试连通性:在StormCrawler机器上执行telnet <ES节点IP> 9300(或对应端口),或者用curl -XGET http://<ES节点IP>:9200/_cluster/health测试REST接口。如果是集群,要确保每个节点的端口都能访问到。
  • 重点检查安全组/防火墙:有时候初始化脚本的机器在白名单里,但StormCrawler的机器没被放行,这就会出现“能建索引但写不了”的情况。

2. 检查ES集群的安全配置

如果开发环境ES开启了身份验证或SSL,StormCrawler的配置里必须同步更新:

  • 若开启账号密码:在es_conf.yaml里添加es.indexer.username: "你的账号"es.indexer.password: "你的密码"
  • 若开启SSL:需要配置es.indexer.ssl.enabled: true,并指定证书路径es.indexer.ssl.certificate.path: "/path/to/cert.pem"
  • 测试权限:用curl -u 账号:密码 http://<ES节点IP>:9200/_cluster/health验证账号能不能正常访问集群,避免权限不足导致静默失败。

3. 细化StormCrawler的ES客户端配置

  • 节点地址配置es.indexer.addresses要填集群所有节点的IP:端口,不要只填一个协调节点——尤其是用TransportClient时,需要能连接到数据节点。
  • 集群名称大小写cluster.name是严格区分大小写的,哪怕多一个空格或者大小写不对,都会导致客户端无法加入集群。
  • 自动发现节点:旧版SC的TransportClient需要开启es.indexer.transport.sniff: true,让客户端自动发现集群内的其他节点,避免只连一个不可用的节点。

4. 排查Storm集群的worker节点日志

如果用--remote模式运行,提交拓扑的客户端日志可能看不到真实错误——实际写入ES的是Storm的worker节点,要检查worker的日志:

  • 找到Storm worker的日志目录(默认在storm/logs/workers-artifacts/下),查看里面的日志,可能会有连接超时、权限不足等隐藏错误。
  • 临时调高日志级别:修改StormCrawler的logback.xml,把org.elasticsearch的日志级别改成DEBUG,重新提交拓扑后就能看到更详细的客户端通信日志。

5. 验证索引的读写权限

虽然ES_IndexInit.sh创建了索引,但要确认SC使用的账号有索引的写入权限:

  • 手动测试写入:用SC的账号向status索引写一条测试数据:
    curl -u 账号:密码 -XPOST http://<ES节点IP>:9200/status/_doc -d '{"url":"test.example.com","status":200}' -H "Content-Type: application/json"
    
    如果写入失败,ES会返回具体的错误信息(比如action_not_allowedmapper_parsing_exception),直接定位问题。

6. 确认版本兼容性

StormCrawler和ES的版本必须对应:

  • SC 2.x → ES 7.x
  • SC 3.x → ES 8.x
    如果版本不匹配,客户端可能无法正常通信,甚至没有明显报错。可以对照SC的官方版本说明确认。

内容的提问来源于stack exchange,提问作者heythere

火山引擎 最新活动