0

我目前正在使用 logstash-jdbc-plugin 从 DB 中提取数据并将其放入 ES 中的索引。如何检查从数据库中提取的全部数据是否已插入 Elastic Search 索引。

提取的数据以百万计,因此无法继续手动检查

4

1 回答 1

0

我也有类似的需求,我所做的是一个小脚本,可以查询 DB 和 ES 并比较记录数。

该脚本可以像下面的 shell 脚本一样简单。它在数据库中查询记录MY_TABLE数并将该数存储在DB_COUNT变量中。然后它向 ES 查询my_table索引中的记录数并将该数字存储在ES_COUNT变量中。最后,它输出两个数字:

#!/bin/sh

# retrieve DB count
DB_QUERY="SELECT COUNT(1) FROM MY_TABLE"
DB_COUNT=$(mysql -u root --quick --disable-column-names -B -r -e "$DB_QUERY" -h localhost db_name)

# retrieve ES count
ES_QUERY="curl -s -XGET localhost:9205/my_table/_search?filter_path=hits.total"
ES_COUNT=$($ES_QUERY | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["hits"]["total"]')

# compare
echo "$DB_COUNT records in DB and $ES_COUNT docs in ES"

如果一切顺利,您将看到如下输出:

1267437 records in DB and 1267437 docs in ES

如果记录数不同,那么我将使用二分法进一步调查,即执行相同的查询,但检索每年/月/周/天的记录数,以查看差异在哪里。

于 2015-11-11T04:41:00.887 回答