現在、logstash-jdbc-plugin を使用して DB からデータを取得し、ES のインデックスに配置しています。DB からプルされたデータ全体が Elastic Search インデックスに挿入されているかどうかを確認する方法。
プルされるデータは数百万単位であるため、手動でチェックし続けることはできません
現在、logstash-jdbc-plugin を使用して DB からデータを取得し、ES のインデックスに配置しています。DB からプルされたデータ全体が Elastic Search インデックスに挿入されているかどうかを確認する方法。
プルされるデータは数百万単位であるため、手動でチェックし続けることはできません
私も同様のニーズがあり、DB と ES にクエリを実行してレコード数を比較する小さなスクリプトを作成しました。
そのスクリプトは、以下のようなシェル スクリプトと同じくらい簡単です。DB にレコード数を照会し、その数を変数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
レコード数が異なる場合は、二分法を使用してさらに調査します。つまり、同じクエリを実行しますが、年/月/週/日あたりのレコード数を取得して、違いがどこにあるかを確認します。