名称 rrdfetch - RRD からデータを取得します ------------------------------------------------------------------------------- 書式(訳注:見やすさのため適宣改行しています) rrdtool fetch ファイル名 統合関数 [ --resolution | -r 解像度 ] [ --start | -s 開始時刻 ] [ --end | -e 終了時刻 ] ------------------------------------------------------------------------------- 解説 fetch 機能は通常 graph 機能が RRD からデータを取得するために内部的に 利用されます。fetch は RRD を分析し要求された解像度に補正しようとします。 取得したデータは標準出力に出力されます。*UNKNOWN* 値は OS によっては しばしば「NaN」という文字列で表現されます。 ファイル名 データを取得したい RRD ファイル名です。 統合関数 取得したいデータに適用される統合関数です。 (AVERAGE、MIN、MAX、LAST) --resolution | -r 解像度 (デフォルトは最大解像度) どれだけの間隔でデータを出力するかです (データごとの秒数)。rrdfetch は 指定された解像度に合わせようとしますが、正確に一致させることができなくても データを出力します。以下の解像度指定に関する解説を見てください。 --start | -s 開始時刻 (デフォルトは1日前) いつのデータから出力するかを指定します。この時刻は起源 (1970年1月1日) からの経過秒数で指定します。負の値は現在時刻からの相対値となります。 デフォルトでは1日分のデータが出力されます。詳細な時刻の指定法に関しては 「AT形式時刻指定法」セクションも参照してください。 --end | -e 終了時刻 いつのデータまで出力するかを指定します。詳細な時刻の指定法に関しては 「AT形式時刻指定法」セクションも参照してください。 解像度 最高解像度以外でデータを取得するためには「開始時刻」と「終了時刻」の両方を 希望する解像度の倍数で指定しなければなりません。以下の例を考えます: rrdtool create subdata.rrd -s 10 DS:ds0:GAUGE:300:0:U \ RRA:AVERAGE:0.5:30:3600 \ RRA:AVERAGE:0.5:90:1200 \ RRA:AVERAGE:0.5:360:1200 \ RRA:MAX:0.5:360:1200 \ RRA:AVERAGE:0.5:8640:600 \ RRA:MAX:0.5:8640:600 この RRD は10秒ごとにデータを収集し、5分間、15分間、1時間、1日間にわたる平均と 1時間、1日間にわたる最大値を格納します。 ここで、最近1時間分の15分間の平均を取得することを考えます。 次のコマンドを試してみます: rrdtool fetch subdata.rrd AVERAGE -r 900 -s -1h しかしながら、この結果はほとんど常に 15分間間隔の RRA のものではありません。 代わりに、この場合は望んだものではない、最大解像度の RRA (つまり5分間間隔のRRA) が選択されます。 ここで次のことを確認します。 1. 「開始時刻」と「終了時刻」は 900 の倍数でなければならない。 2. 「開始時刻」と「終了時刻」は取得したい RRA の範囲内でなければならない。 そこで、現在時刻を t とすると 「終了時刻」 == int(t/900) * 900 「開始時刻」 == 「終了時刻」 - 1時間 「解像度」 == 900 例えば bash ならこういうことができます: TIME=$(date +%s); RRDRES=900; rrdtool fetch subdata.rrd AVERAGE -r $RRDRES \ -e $(echo $(($TIME/$RRDRES*$RRDRES))) -s e-1h もしくは Perl なら: perl -e '$ctime = time; $rrdres = 900; system "rrdtool fetch subdata.rrd AVERAGE \ -r $rrdres -e @{[int($ctime/$rrdres)*$rrdres]} -s e-1h"' AT形式時刻指定法 伝統的な起源からの時刻とは別に RRDTool は AT 形式の時刻指定法も理解します。 この指定法はジョブを起動する時刻の指定法として適度に複雑な方法を複数持つ UNIX コマンドの at(1) で「AT形式」と呼ばれます。AT形式指定法は時間基準指定と 時間差分指定の2つの部分からなります 時間基準指定 時間基準指定は (時間差分を適用するための) 時間の基準となる瞬間を 確定するために良く使われます。時間基準は存在する場合は一番最初に 指定されなければならず、省略された場合のデフォルトは「now」です。 時間基準は時刻指定 (存在する場合は最初に指定) と日付指定から構成されます。 時刻指定は HH:MM または HH.MM または単に HH の形式で、am または pm の 接尾辞をつけるか 24 時間制で指定されます。特殊な時刻指定として midnight (00:00)、noon (12:00) そして英国的な teatime (16:00) があります。 日付指定は 月名 日 の形式でオプションとして2または4文字の数字からなる 年 を つけることができます (例 March 8 1999)。代わりに 曜日 (例 Monday) や yesterday、today、tomorrow も使えます。またいくつかの数値形式による完全な 日付でも指定できます。MM/DD/[YY]YY、DD.MM.[YY]YY、YYYYMMDD などです。 注1: ひと続きの数字列による日付を MMDD[YY]YY と解釈するオリジナルの at(1) と挙動が異なります。 注2: 日付指定をこの方法で行った場合、時刻指定が必要です。 最後に、時間基準として now、start、end が使えます。 now は現在時刻を 指定します (デフォルトです)。 start (end) は各機能のオプションで 指定される開始 (終了) 時刻を参照するために使えます。 月名やと曜日名は通常の省略形も使えます (December の代わりに Dec、 Sunday の代わりに Sun など)。now、start、end は省略形としてそれぞれ n、s、e が使えます。 時間差分指定 時間差分指定は時間基準に(から)ある時間を足す(引く)ために用います。 符号(+ または -)と 量 からなります。量をしていするのに次に挙げる時間単位が 使えます: years、months、weeks、days、hours、minutes、seconds。これらは 単数形でも複数形でも使うことができますし、通常の省略形や1文字による省略形も 用意されています(例 +3days、-1wk、-3y)。いくつかの時間単位は組み合わせて 使うことができます(例 -5mon1w2d)。また時間差分指定を組み合わせることも できます (例 -5h45min = -5h-45min = -6h+15min = -7h+1h30m-15min など)。 注3: 時間差分を日、週、月、年で指定した場合、最終的な時刻は時間基準によって 異なります。なぜならこれらの時間単位はその長さが1つの値に 決まっているわけではないからです(1年は365日か366日です。1ヶ月は28日から 31日です。1日もサマータイムが適用される場合は年に2回24時間では ありません)。この事への対処として時間差分の単位として日、週、月、年を 使う場合、時間基準の日付が (後で mktime(3) が面倒を見てくれることを 期待して) きちんと従うための特別な処理は行われません。このため時には 驚くような(さらには不正な)結果となります。例「May 31 -1month」= 「Apr 31(存在しない日付)」=「May 1(mktime(3) 適用後)」。 また EET タイムゾーンで「3:30am Mar 29 1999 -1day」は 「3:30am Mar 28 1999」(日曜)となり無効な時間になってしまいます (サマータイムの適用により午前3時が午前4時になるため。以下の例を 見てください)。一方、時、分、秒は唯一の定義があり常に指定したとおりの 時間差分となることが保障されます (例 EETタイムゾーンにおいて 「8:00 Mar 27 1999 +2 days」=「8:00 Mar 29 1999」。ただしサマータイムの 適用によって1999年3月28日3時0分から1時間時計が進められるため1999年3月 27日8時0分から1999年3月29日8時0分までの実時間は47時間です。 また期待されるとおり「8:00 Mar 27 1999 +48 hours」=「9:00 Mar 29 1999」 です)。 注4: months と minutes の1文字による省略形は共に m となります。あいまいさを なくすためパーサは次の2つの発見的方法を適用します。 1. m が年、月、週、日の文脈で(直後で)使われている場合、months を 意味すると判断します。一方、時、分、秒の文脈では minutes を 意味しているとします (例 -1y6m や +3w1m の m は months、-3h20m や +5s2m の m は minutes)。 2. 文脈の外(すなわち符号の直後)では伴う数値から判断します。現在は 絶対値が25より小さいならば m は months を、そうでなければ minutes を表すものとして扱います (例 -25m == -25 minutes、 +24m == +24 months)。 注5: 時間指定は大文字小文字を区別します。空白は自由に追加しても良いですし、 省略しても構いません。ただし空白が必要な場合もあります (例 「midnight Thu」)。このような場合、シェルによって分断されるのを 防ぐため全体をクオートするか空白の代わりに「_」(アンダースコア) または 「,」(カンマ) を使います(例 「midnight_Thu」または「midnight,Thu」)。 時間指定例 Oct 12 今年の10月12日 -1month または -1m 日にちは今日と同じで1月前 (驚きの結果になる可能性あり、上にある注3をみよ) noon yesterday -3hours 昨日の朝、9am-1day でも同じ 23:56 31.12.1999 2000年まであと1分 12/31/99 11:59pm 2000年まであと1分 (帝国主義者用) 12am 01/01/01 新千年紀の始まり end-3weeks または e-3w 終了時刻の3週間前 (開始時刻の指定として用いられる) start+6hours または s+6h 開始時刻の6時間後 (終了時刻の指定として用いられる) 931225537 1999年7月5日18時45分 (当然、1970年からの経過秒数も有効) 19970703 12:45 1997年7月3日12時45分 (ISO 8601) ------------------------------------------------------------------------------- 著者 Russ Wright