3

私はOPENTSDBを使用していますが、クエリ中にこれを取得しています:

net.opentsdb.core.IllegalDataException: Found out of order or duplicate data: cell=Cell([-35, 87], [0, 0, 0, 0, 0, 8, -34, 65]), delta=3541, prev cell=Cell([-35, 87], [0, 0, 0, 0, 0, 12, -82, 106]), last_delta=3541, in row=[KeyValue(key=[0, 8, -96, 81, -7, -77, 16, 0, 0, 1, 0, -73, 83, 0, 0, 3, 0, 47, 57, 0, 0, 69, 0, 44, 99, 0, 0, 71, 0, 48, 79, 0, 0, 75, 0, 47, -53, 0, 0, 76, 0, 13, -24, 0, 0, 77, 0, 114, 14, 0, 0, 85, 0, -16, -50], family="t", qualifier="\xDDW", value=[0, 0, 0, 0, 0, 12, -82, 106], timestamp=1375323607530), KeyValue(key=[0, 8, -96, 81, -7, -77, 16, 0, 0, 1, 0, -73, 83, 0, 0, 3, 0, 47, 57, 0, 0, 69, 0, 44, 99, 0, 0, 71, 0, 48, 79, 0, 0, 75, 0, 47, -53, 0, 0, 76, 0, 13, -24, 0, 0, 77, 0, 114, 14, 0, 0, 85, 0, -16, -50], family="t", qualifier=[-35, 87, -35, -41, -34, 103, -32, 7, -32, -57], value=[0, 0, 0, 0, 0, 8, -34, 65, 0, 0, 0, 0, 0, 1, -122, -123, 0, 0, 0, 0, 0, 3, -22, 23, 0, 0, 0, 0, 0, 13, -10, -32, 0, 0, 0, 0, 0, 10, -27, 6, 0], timestamp=1375323057833)] -- run an fsck.

fsck --fix を使用してみましたが、エラーは見つかりませんでした。次の方法はありますか?

ありがとう

4

3 に答える 3

1

OpenTSDB は、HBase を基盤とする非常に特殊な時系列データベースです。tsdb 内のデータは、時刻/日付順である必要があり、重複していてはなりません。tcollector またはシステム ホストのシステム クロックが古くなっていると、データ ポイントの時刻/日付の順序がずれている可能性があります。通常、データの重複は、API または TCP ソケットを介した手動の PUT によって発生します。あなたの例外は、セル -35, 87 を重複して示しています。このデータを TSDB に手動で送信していますか、それとも HBase に直接入力していますか?

これを修正するには、試したように「tsdb fsck」を実行できます。

「tsdb fsck --fix」には、期間、演算子、およびメトリック名が必要です。--fix でエラーが検出されなかった場合は、データが重複している期間またはメトリック名を指定していませんでした。

例えば:

/usr/local/opentsdb/build/tsdb fsck --fix 9d-ago sum http.hits --config /usr/local/opentsdb/opentsdb.conf

バージョン 1.0 から TSDB を扱ってきましたが、2014 年の夏に多くの「fsck」機能が追加される前に、すべてのデータ ポイントを「fsck」するクールなハックを見つけました。このシェル スクリプトは、すべてのメトリックをすばやく一覧表示し、tsdb にシェルを実行して、そのメトリックのすべてのデータ ポイントを fsck します。

#!/bin/bash
list=`/usr/local/opentsdb/build/tsdb uid grep '' --config /usr/local/opentsdb/opentsdb.conf | cut -d" " -f2 | cut -d ":" -f1`
for i in $list
do
    echo "Fixing metric $i" && /usr/local/opentsdb/build/tsdb fsck --fix 9d-ago sum $i --config /usr/local/opentsdb/opentsdb.conf &
done

TSDB 2.1 では、fsck の実行がはるかに簡単になりました。残念ながら、2014 年 8 月 24 日の時点ではリリースされておらず、'next' ブランチのコード コントロール チェックアウトからのみ入手できます。

git クローンhttps://github.com/OpenTSDB/opentsdb.git

cd opentsdb

次に git チェックアウト

バッシュ ./build.sh

#コンパイル待ち

# メトリックを変更せずに FSCK する

build/tsdb fsck --full-scan --threads=16

# 重複を解決して FSCK へ/メトリックを修正する

build/tsdb fsck --full-scan --threads=16 --fix --resolve-duplicates --compact

幸運を!

于 2014-08-25T01:15:27.617 に答える
0

重複を修正するために fsck を取得できませんでしたが、これを構成ファイルに追加して OpenTSDB を再起動するとうまくいきます。

tsd.storage.fix_duplicates = true

ここにある解決策: https://github.com/OpenTSDB/opentsdb/issues/430

于 2015-07-02T10:31:05.330 に答える