在使用阿里云Logstash将数据写入阿里云Elasticsearch(output指定为阿里云Elasticsearch)时,您可能会遇到网络不通、管道配置错误、负载高、管道正常启动但无数据写入目标端以及服务正常但缺少数据等问题,此时您可以参考本文的排查方案进行排查解决。

网络不通

排查方案常见错误案例建议解决方案
分别检查Logstash是否与源端和目标端服务在同一网络下。
说明 阿里云Logstash和阿里云Elasticsearch服务部署在专有网络环境下,建议您将业务部署在相同的专有网络下。
源端服务在公网环境下,而Logstash在专有网络环境下。选择以下任意一种方式处理:
  • 借助网络产品功能,打通网络环境。
  • 参见配置NAT公网数据传输,配置NAT网关实现公网数据传输。
  • 重新购买同一专有网络下的Logstash和Elasticsearch实例,并重新配置管道。
检查NAT配置是否错误。
  • NAT条目地址或端口定义错误。
  • NAT网关类型不符合场景。
根据具体情况,按照以下方式处理:
  • 检查NAT条目地址和端口,确保网络互通。
  • SNAT和DNAT使用场景不一样,结合业务场景选择正确的网关转换方式:
    • SNAT:Logstash主动访问公网。
    • DNAT:公网服务向Logstash节点推送数据。
检查是否上传了正确的JDBC驱动插件。PolarDB数据同步场景中,使用高版本的JDBC驱动,日志无报错,但数据写不到目标端,换成低版本后正常。选择正确版本的JDBC驱动,详细信息请参见配置扩展文件
检查白名单或安全组是否有限制。通过Filebeat将数据采集到Logstash中处理,Filebeat部署在用户侧ECS上,但ECS未在安全组开放监听端口。根据具体情况,按照以下方式处理:
  • 在对应服务的白名单中,加入Logstash节点的IP地址。
    说明 获取Logstash的IP地址的具体操作,请参见查看实例的基本信息
  • 在安全组中开启服务监听端口,具体操作请参见添加安全组规则
检查Logstash管道配置的源端或目标端是否涉及到RAM用户未授权,导致RAM用户无法访问对应服务。
  • Logstash的output配置中指定了RAM用户访问Elasticsearch ,但Elasticsearch上未对RAM用户设置索引权限。
  • Logstash主日志报错401。
根据具体情况,按照以下方式处理:
  • 为RAM用户授予对应的权限,具体操作请参见为RAM用户授权
  • 使用正确的用户名和密码,并且密码中不能包含特殊字符。

管道配置错误

排查方案常见错误案例建议解决方案
参见查询日志,查看Logstash的主日志,检查日志是否存在报错。未安装插件。例如日志中出现Couldn't find any output plugin named 'file_extend'错误提示时,说明集群中没有安装logstash-output-file_extend插件。选择以下任意一种方式处理:
  • 安装插件。
  • 在管道配置中,删除该插件的配置信息。
配置中存在隐藏的特殊字符。手动输入配置。
filter过滤代码有误,例如ruby代码存在错误。选择以下任意一种方式处理:
  • 将filter模块配置精简到原始配置,逐步增加过滤配置,找到根因。并根据实际情况处理。
  • 借助第三方调试工具,调试正确后再上线。
管道参数名或参数值写入错误。例如logstash-output-elasticsearch插件中的hosts写成了host、RDS实例名称不正确等。参见Logstash官方文档阿里云Elasticseatch官方最佳实践文档编写管道配置。
Logstash和源端或目标端连接超时。例如无法访问Elasticsearch时,会出现Elasticsearch Unreachable: [http://xxxx:9200/][Manticore::ConnectTimeout] connect timed out的错误提示。确保Logstash和Elasticsearch网络互通,并输入正确的源端和目标端地址。
Elasticsearch开启了HTTPS协议,但Logstash管道配置时使用了http修改管道配置,使用与源端和目标端相同的访问协议。

负载问题

排查方案常见错误案例建议解决方案
参见集群监控章节,检查节点磁盘使用率是否过高。
  • 在管道配置中,指定队列类型为永久型(PERSISTED),数据会永久存储在磁盘上,随着数据的积累,导致磁盘被打满。
  • 管道output配置中指定了stdout{}
根据具体情况,按照以下方式处理:
  • 将Logstash管道队列类型指定为默认的内存型(MEMORY),详细信息请参见通过配置文件管理管道
    重要 由于阿里云Logstash暂时没有清理磁盘的入口,因此当您遇到磁盘打满的问题时,需要技术人员在后端为您处理。
  • 删除管道output配置中的stdout{}
    重要 管道output配置不支持定义stdout{},否则会导致磁盘使用率过高的问题。
参见集群监控章节,检查节点内存是否溢出OOM(Out Of Memory)。内存OOM,节点未拉起。在控制台重启对应节点。
检查源端或目标端是否存在负载问题。Elasticsearch集群不健康,影响写入。暂停写入,优先恢复集群健康,建议扩容。

管道正常启动,但无数据写入目标端

排查方案常见错误案例建议解决方案
参见使用Logstash管道配置调试功能,开启Logsatsh的管道配置调试功能(需要安装logstash-output-file_extend插件),查看调试日志,判断是否有数据流入Logstash服务:
  • 无数据流入Logstash:检查源端配置信息是否正确。
  • 有数据流入Logstash:检查目标端配置信息是否正确。
无数据流入Logstash:
  • 源端配置信息中存在阿里云AccessKey信息,但AccessKey信息已经失效。
  • 源端无实时数据产生,例如Filebeat实时采集文件数据,文件无新数据产生。
根据具体情况,选择以下方式处理:
  • 检查配置信息,并修改不准确的信息。
  • 如果Logstash使用了实时流插件,需要确保源端存在实时写入的数据。
有数据流入Logstash:
  • 阿里云Elasticsearch实例未开启自动创建索引功能。
  • 目标端禁止写入,例如Elasticsearch索引禁止写入。
根据具体情况,选择以下方式处理:
  • 开启阿里云Elasticsearch实例的自动创建索引功能。
  • 确保目标端的可写性。

服务正常缺少数据

排查方案常见错误案例建议解决方案
根据管道配置场景,结合管道插件属性排查:
  • 检查JDBC查询语句是否正确。
  • 检查管道配置中的logstash-input-elasticsearch插件是否存在实时写入的数据。
JDBC场景:
  • 通过查询语句查询的结果中缺少数据。
  • 追踪字段为非递增数据,例如时间字段或ID。
  • JDBC和Elasticsearch集群不在同一时区。
根据具体情况,选择以下方式处理:
  • 在源端调试查询语句。
  • 检查追踪字段类型是否为官方建议字段类型,优先将字段类型设置为numerictimestamp
  • 检查时区差异性,并根据检查结果进行相应处理。
使用logstash-input-elasticsearch插件场景:
  • 源端数据存在实时写入。
  • 管道配置中,定时时间设置较小,数据存在大量的写入,导致目标端数据堆积。
Logstash不适用于数据实时同步场景。如果源端存在实时写入,建议通过拉长定时查询时间,减少频繁在源端和目标端查询和写入。
参见查询日志,查看Logstash慢日志,检查是否存在写入慢的问题。源端和目标端压力均未达到瓶颈,但Logstash的管道工作线程数使用了官方的默认值。增加Logstash的管道批大小和工作线程数,详细信息请参见通过配置文件管理管道