0

現在、logstash-jdbc-plugin を使用して DB からデータを取得し、ES のインデックスに配置しています。DB からプルされたデータ全体が Elastic Search インデックスに挿入されているかどうかを確認する方法。

プルされるデータは数百万単位であるため、手動でチェックし続けることはできません

4

1 に答える 1

0

私も同様のニーズがあり、DB と ES にクエリを実行してレコード数を比較する小さなスクリプトを作成しました。

そのスクリプトは、以下のようなシェル スクリプトと同じくらい簡単です。DB にレコード数を照会し、その数を変数MY_TABLEに格納します。次に、インデックスDB_COUNT内のレコード数を ES にクエリし、その数を変数に格納します。最後に、両方の数値を出力します。my_tableES_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 に答える