我目前正在使用 logstash-jdbc-plugin 从 DB 中提取数据并将其放入 ES 中的索引。如何检查从数据库中提取的全部数据是否已插入 Elastic Search 索引。
提取的数据以百万计,因此无法继续手动检查
我目前正在使用 logstash-jdbc-plugin 从 DB 中提取数据并将其放入 ES 中的索引。如何检查从数据库中提取的全部数据是否已插入 Elastic Search 索引。
提取的数据以百万计,因此无法继续手动检查
我也有类似的需求,我所做的是一个小脚本,可以查询 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
如果记录数不同,那么我将使用二分法进一步调查,即执行相同的查询,但检索每年/月/周/天的记录数,以查看差异在哪里。