使用JDBC插件从Oracle同步数据到Elasticsearch仅获少量数据求助
问题描述
我是Elastic新手,尝试将Oracle数据库中的全部数据索引到Elasticsearch,但配置查询后仅同步了少量记录(实际应至少有200+条)。我未自行设置索引映射,以下是我的配置文件、SQL语句及日志信息,请求排查建议:
配置文件
input { jdbc { jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/ojdbc14.jar" jdbc_driver_class => "oracle.jdbc.driver.OracleDriver" jdbc_connection_string => "jdbc:oracle:thin:@ip:port/db" jdbc_user => "user" jdbc_password => "pwd" clean_run => true record_last_run => false statement_filepath => "/etc/logstash/queries/archived.sql" schedule => "0 * * * *" } } filter { mutate { remove_field => ["@version", "@timestamp"] } } output { elasticsearch { hosts => ["http://127.0.0.1:9200"] index => "archive-2022-09-22" action => "index" document_id => "%{id}" user => "user" password => "pwd" } }
SQL语句文件
select * from archive
Logstash日志
[2022-11-23T15:11:24,811][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"} [2022-11-23T15:11:54,808][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"} [2022-11-23T15:12:00,398][INFO ][logstash.inputs.jdbc ][archived][f085843c850992c12e03ee486c086aea9dfd8655b67ab23879b5f69e3fa8f1d5] (0.013649s) select * from archive [2022-11-23T15:12:24,808][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"} [2022-11-23T15:12:54,808][ERROR][logstash.licensechecker.licensereader] Unable to retrieve license information from license server {:message=>"No Available connections"} [2022-11-23T15:13:00,134][INFO ][logstash.inputs.jdbc ][archived][f085843c850992c12e03ee486c086aea9dfd8655b67ab23879b5f69e3fa8f1d5] (0.013788s) select * from archive
排查建议
- 验证SQL查询结果:直接在Oracle客户端执行
select count(*) from archive确认实际记录数,同时执行select * from archive检查是否能正常返回所有数据,排查SQL本身或数据库权限问题。 - 检查JDBC驱动兼容性:ojdbc14.jar属于老旧版本,适配JDK 1.4,可能与当前Logstash使用的JDK版本不兼容。建议更换为匹配Oracle版本的驱动(如ojdbc8.jar适配Oracle 12c+及JDK 8+)。
- 配置JDBC分页:默认情况下Logstash JDBC输入可能存在分页异常,添加
jdbc_paging_enabled => true和jdbc_page_size => 1000(可根据数据量调整)到JDBC输入配置中,强制分页读取数据。 - 排查文档ID重复问题:输出配置中使用
document_id => "%{id}",若Oracle表中id字段有重复值,后续记录会覆盖之前的,导致ES中记录数偏少。可先移除document_id配置,让ES自动生成ID,验证是否能同步所有数据;若必须自定义ID,需确保id字段唯一。 - 开启DEBUG日志:启动Logstash时添加
--log.level debug,查看数据读取、过滤、输出阶段的详细日志,排查是否存在字段解析失败、数据类型不兼容导致的数据丢弃。 - 验证ES索引状态:执行
GET /archive-2022-09-22/_count查看ES中实际文档数,与Oracle记录数对比;执行GET /archive-2022-09-22/_search查看返回文档,确认是否有重复或缺失。 - 优化数据库连接参数:若表中存在大字段(如CLOB、BLOB),可能出现读取截断或超时。在JDBC配置中添加
jdbc_connection_properties => { "defaultRowPrefetch" => "1000", "fetchSize" => "1000" }优化数据读取。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

