.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "RRDFETCH 1" .TH RRDFETCH 1 2026-08-08 1.11.0 rrdtool .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" rrdfetch \- واکشی داده‌ها از یک RRD .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fBrrdtool\fR \fBfetch\fR \fIfilename\fR \fICF\fR [\fB\-\-resolution\fR|\fB\-r\fR\ \fIresolution\fR] [\fB\-\-start\fR|\fB\-s\fR\ \fIstart\fR] [\fB\-\-end\fR|\fB\-e\fR\ \fIend\fR] [\fB\-\-align\-start\fR|\fB\-a\fR] [\fB\-\-daemon\fR|\fB\-d\fR\ \fIaddress\fR] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" تابع \fBfetch\fR معمولاً به‌طور داخلی توسط تابع گراف (graph) برای دریافت داده‌ها از \fBRRD\fRها استفاده می‌شود. \fBfetch\fR پروندهٔ \fBRRD\fR را تحلیل کرده و تلاش می‌کند داده‌ها را با تفکیک‌پذیری درخواستی بازیابی کند. داده‌های واکشی‌شده در stdout چاپ می‌شوند. داده‌های \fI*UNKNOWN*\fR بسته به تابع printf سیستم‌عامل شما اغلب با رشتهٔ «NaN» نمایش داده می‌شوند. .IP \fIfilename\fR 8 .IX Item "filename" نام \fBRRD\fR که می‌خواهید داده‌ها را از آن واکشی کنید. .IP \fICF\fR 8 .IX Item "CF" تابع ادغام (consolidation function) که روی داده‌های مد نظر شما برای واکشی اعمال می‌شود (AVERAGE، MIN، MAX، LAST). .IP "\fB\-\-resolution\fR|\fB\-r\fR \fIresolution\fR (پیش‌فرض بالاترین تفکیک‌پذیری است)" 8 .IX Item "--resolution|-r resolution (default is the highest resolution)" بازهٔ زمانی مورد نظری که می‌خواهید مقادیر داشته باشند (ثانیه به‌ازای هر مقدار). می‌توان از یک پسوند اختیاری استفاده کرد (برای مثال \f(CW\*(C`5m\*(C'\fR به‌جای \f(CW300\fR ثانیه). \&\fBrrdfetch\fR تلاش خواهد کرد تا با درخواست شما مطابقت پیدا کند، اما حتی اگر تطابق دقیقی امکان‌پذیر نباشد نیز داده‌ها را برمی‌گرداند. بخش «RESOLUTION INTERVAL» را ببینید. .IP "\fB\-\-start\fR|\fB\-s\fR \fIstart\fR (پیش‌فرض end\-1day)" 8 .IX Item "--start|-s start (default end-1day)" شروع سری زمانی. زمان به‌صورت ثانیه‌های گذشته از مبدأ epoch‏ (1970\-01\-01) الزامی است. اعداد منفی نسبت به زمان فعلی سنجیده می‌شوند. به‌طور پیش‌فرض، داده‌های مربوط به یک روز واکشی خواهند شد. همچنین برای توضیحات دقیق دربارهٔ روش‌های تعیین زمان شروع، بخش «AT\-STYLE TIME SPECIFICATION» را ببینید. .IP "\fB\-\-end\fR|\fB\-e\fR \fIend\fR (پیش‌فرض now)" 8 .IX Item "--end|-e end (default now)" پایان سری زمانی به ثانیه از مبدأ epoch. همچنین برای توضیحات دقیق دربارهٔ نحوهٔ تعیین زمان پایان، بخش «AT\-STYLE TIME SPECIFICATION» را ببینید. .IP \fB\-\-align\-start\fR|\fB\-a\fR 8 .IX Item "--align-start|-a" تنظیم خودکار زمان شروع به‌سمت پایین برای تراز شدن با تفکیک‌پذیری (resolution). زمان پایان نیز به همان مقدار تنظیم می‌شود. این کار نیاز به محاسبات خارجی شرح داده‌شده در RESOLUTION INTERVAL را برطرف می‌کند؛ هرچند اگر یک RRA مشخص مد نظر باشد، این گزینه تضمین نمی‌کند که شروع و پایان در محدودهٔ آن قرار گیرند. .IP "\fB\-\-daemon\fR|\fB\-d\fR \fIaddress\fR" 8 .IX Item "--daemon|-d address" نشانی دیمن rrdcached. در صورت مشخص شدن، پیش از خواندن فایل‌های RRD یک دستور \f(CW\*(C`flush\*(C'\fR به سرور ارسال می‌شود. این امر به \fBrrdtool\fR امکان می‌دهد تا حتی اگر دیمن طوری پیکربندی شده باشد که مقادیر را برای مدتی طولانی کش کند، داده‌های تازه را بازگرداند. برای مشاهدهٔ فهرستی از قالب‌های پذیرفته‌شده، گزینهٔ \fB\-l\fR را در راهنمای rrdcached ببینید. .Sp .Vb 1 \& rrdtool fetch \-\-daemon unix:/var/run/rrdcached.sock /var/lib/rrd/foo.rrd AVERAGE .Ve .Sp لطفاً توجه داشته باشید که به دلایل ایمنی رشته‌ها (thread-safety)، زمان مشخص‌شده با \fB\-s\fR و \fB\-e\fR نمی‌تواند از قالب‌های پیچیدهٔ شرح داده‌شده در «AT\-STYLE TIME SPECIFICATION» استفاده کند. تنها آرگومان‌های پذیرفته‌شده «اعداد صحیح ساده» هستند. مقادیر مثبت به‌صورت ثانیه‌های گذشته از epoch تفسیر می‌شوند و مقادیر منفی (و صفر) نسبت به \fInow\fR سنجیده می‌شوند. بنابراین «1272535035» به «09:57:15 (UTC), April 29th 2010» و «\-3600» به «یک ساعت پیش» اشاره دارد..SS "بازه تفکیک‌پذیری (RESOLUTION INTERVAL)" .IX Subsection "RESOLUTION INTERVAL" برای اینکه RRDtool بتواند داده‌هایی غیر از دقیق‌ترین تفکیک‌پذیری RRA را واکشی کند، \&\fBهر دو\fR زمان آغاز و پایان باید بر روی مرزهایی مشخص شوند که مضربی از تفکیک‌پذیری مورد نظر باشند. مثال زیر را در نظر بگیرید: .PP .Vb 8 \& rrdtool create subdata.rrd \-s 10 \e \& DS:ds0:GAUGE:5m:0:U \e \& RRA:AVERAGE:0.5:5m:300h \e \& RRA:AVERAGE:0.5:15m:300h \e \& RRA:AVERAGE:0.5:1h:50d \e \& RRA:MAX:0.5:1h:50d \e \& RRA:AVERAGE:0.5:1d:600d \e \& RRA:MAX:0.5:1d:600d .Ve .PP این RRD داده‌ها را هر ۱۰ ثانیه جمع‌آوری کرده و میانگین‌های آن را در بازه‌های ۵ دقیقه، ۱۵ دقیقه، ۱ ساعت و ۱ روز، و همچنین بیشینه‌ها را برای ۱ ساعت و ۱ روز ذخیره می‌کند. .PP حال فرض کنید می‌خواهید داده‌های میانگین ۱۵ دقیقه‌ای را برای ساعت گذشته واکشی کنید. ممکن است این دستور را امتحان کنید: .PP .Vb 1 \& rrdtool fetch subdata.rrd AVERAGE \-r 15m \-s \-1h .Ve .PP با این حال، این کار تقریباً همیشه به سری زمانی‌ای منجر می‌شود که در RRA مربوط به ۱۵ دقیقه \fBنیست\fR. بنابراین، RRA با بالاترین تفکیک‌پذیری، یعنی میانگین‌های ۵ دقیقه‌ای، انتخاب خواهد شد که در این حالت چیزی نیست که شما می‌خواستید. .PP بنابراین، اطمینان حاصل کنید که: .IP 1. 3 هر دو زمان آغاز و پایان مضربی از ۹۰۰ (\f(CW\*(C`15m\*(C'\fR) باشند .IP 2. 3 هر دو زمان آغاز و پایان در محدوده RRA مورد نظر قرار داشته باشند .PP پس، اگر زمان فعلی را «t» بنامیم، چنین عمل کنید: .PP .Vb 3 \& end time == int(t/900)*900, \& start time == end time \- 1hour, \& resolution == 900. .Ve .PP با استفاده از پوسته bash، این دستور می‌تواند به این شکل باشد: .PP .Vb 4 \& TIME=$(date +%s) \& RRDRES=900 \& rrdtool fetch subdata.rrd AVERAGE \-r $RRDRES \e \& \-e $(($TIME/$RRDRES*$RRDRES)) \-s e\-1h .Ve .PP یا در Perl: .PP .Vb 3 \& perl \-e \*(Aq$ctime = time; $rrdres = 900; \e \& system "rrdtool fetch subdata.rrd AVERAGE \e \& \-r $rrdres \-e @{[int($ctime/$rrdres)*$rrdres]} \-s e\-1h"\*(Aq .Ve .PP یا با استفاده از پرچم \fB\-\-align\-start\fR: .PP .Vb 1 \& rrdtool fetch subdata.rrd AVERAGE \-a \-r 15m \-s \-1h .Ve .SS "تعیین زمان به سبک AT (AT\-STYLE TIME SPECIFICATION)" .IX Subsection "AT-STYLE TIME SPECIFICATION" جدا از شیوه سنتی \fISeconds since epoch\fR (ثانیه‌ها از مبدا زمانی یونیکس)، RRDtool روش تعیین زمان به سبک at را نیز درک می‌کند. این شیوه به پیروی از دستور یونیکس \&\fBat\fR\|(1) به نام «at\-style» نامیده می‌شود که روش‌های نسبتاً پیشرفته‌ای برای تعیین زمان جهت اجرای وظیفه در تاریخ و زمانی مشخص دارد. شیوه at\-style از دو بخش تشکیل شده است: مشخصات \fBTIME REFERENCE\fR (مرجع زمان) و مشخصات \&\fBTIME OFFSET\fR (افست زمان). .SS "مشخصات مرجع زمان (TIME REFERENCE SPECIFICATION)" .IX Subsection "TIME REFERENCE SPECIFICATION" مشخصات مرجع زمان برای تعیین یک لحظه مرجع در زمان استفاده می‌شود (که سپس افست زمان نسبت به آن اعمال می‌گردد). در صورت وجود، باید ابتدا بیاید؛ و هنگامی که حذف شود، پیش‌فرض آن \fBnow\fR است. مرجع زمان به نوبه خود از یک مرجع \fItime\-of\-day\fR (زمان روز؛ که در صورت وجود، باید اول بیاید) و یک مرجع \fIday\fR (روز) تشکیل می‌شود. .PP بخش \fItime\-of\-day\fR می‌تواند به صورت \fBHH:MM\fR، \fBHH.MM\fR، یا فقط \fBHH\fR مشخص شود. می‌توانید پسوند \fBam\fR یا \fBpm\fR را به آن اضافه کنید یا از ساعت ۲۴ ساعته استفاده نمایید. برخی از زمان‌های خاص روز نیز پشتیبانی می‌شوند، از جمله \fBmidnight\fR (ساعت 00:00)، \fBnoon\fR (ساعت 12:00) و اصطلاح بریتانیایی \&\fBteatime\fR (ساعت 16:00). .PP بخش \fIday\fR می‌تواند به صورت \fImonth\-name\fR \fIday\-of\-the\-month\fR و به صورت اختیاری یک عدد ۲ یا ۴ رقمی \fIyear\fR مشخص شود (مانند March 8 1999). همچنین می‌توانید از \fIday\-of\-week\-name\fR (مانند Monday) یا یکی از کلمات: \&\fByesterday\fR، \fBtoday\fR، \fBtomorrow\fR استفاده کنید. علاوه بر این، می‌توانید \&\fIday\fR را به عنوان یک تاریخ کامل در چندین قالب عددی از جمله \fBMM/DD/[YY]YY\fR، \&\fBDD.MM.[YY]YY\fR، یا \fBYYYYMMDD\fR مشخص کنید. .PP \&\fIیادداشت ۱\fR: این رفتار با رفتار اصلی دستور \fBat\fR\|(1) متفاوت است، جایی که یک تاریخ تک‌عددی به صورت MMDD[YY]YY تفسیر می‌شود. .PP \&\fIیادداشت ۲\fR: اگر \fIday\fR را به این شیوه مشخص کنید، وارد کردن \&\fItime\-of\-day\fR نیز الزامی است. .PP در نهایت، می‌توانید از کلمات \fBnow\fR، \fBstart\fR، \fBend\fR یا \fBepoch\fR به عنوان مرجع زمان خود استفاده کنید. \fBNow\fR به لحظه کنونی اشاره دارد (و همچنین مرجع زمانی پیش‌فرض است). \fBStart\fR (\fBend\fR) می‌تواند برای مشخص کردن زمان نسبت به زمان آغاز (پایان) در ابزارهایی که از این دسته‌ها استفاده می‌کنند (\fBrrdfetch\fR، rrdgraph) به کار رود و \fBepoch\fR نشان‌دهنده مبدا زمانی یونیکس (*IX epoch؛ یعنی برچسب زمانی یونیکس 0 = 1970\-01\-01 00:00:00 UTC) است. \&\fBepoch\fR برای رفع ابهام بین یک مقدار برچسب زمانی و برخی قالب‌های اختصاری تعیین تاریخ/زمان مفید است، زیرا این امکان را فراهم می‌سازد که مشخصات افست زمانی با واحدها به کار روند؛ به عنوان مثال \fBepoch\fR+19711205s بدون ابهام برچسب زمانی 19711205 را مشخص می‌کند و نه 1971\-12\-05 00:00:00 UTC. .PP نام‌های ماه و روزهای هفته می‌توانند به شکل اختصاری معمول خود استفاده شوند (برای مثال، Dec برای December، Sun برای Sunday و غیره). کلمات \&\fBnow\fR، \fBstart\fR، \fBend\fR را می‌توان به صورت \fBn\fR، \fBs\fR، \fBe\fR خلاصه کرد..SS "مشخص کردن آفست زمانی (TIME OFFSET SPECIFICATION)" .IX Subsection "TIME OFFSET SPECIFICATION" مشخص‌کردن آفست زمانی برای افزودن/کاستن بازه‌های زمانی مشخص به/از لحظه مبدأ زمانی به‌کار می‌رود. این مشخصه از یک \fIعلامت\fR (\fB+\fR\ یا\ \fB\-\fR) و یک \fIمقدار\fR تشکیل شده است. واحدهای زمانی زیر می‌توانند برای مشخص‌کردن \fIمقدار\fR استفاده شوند: \fByears\fR، \fBmonths\fR، \fBweeks\fR، \fBdays\fR، \&\fBhours\fR، \fBminutes\fR، یا \fBseconds\fR. این واحدها می‌توانند به صورت مفرد یا جمع، و به شکل طبیعی یا به یک تک‌حرف مخفف شوند (مانند +3days، \-1wk، \-3y). چند واحد زمانی را می‌توان با هم ترکیب کرد (مانند \-5mon1w2d) یا به هم پیوست (مانند \-5h45min = \-5h\-45min = \&\-6h+15min = \-7h+1h30m\-15min و غیره). .PP \&\fIنکته ۳\fR: اگر آفست زمانی را بر حسب روز، هفته، ماه یا سال مشخص کنید، در نهایت به آفست زمانی‌ای می‌رسید که ممکن است بسته به مبدأ زمانی شما متغیر باشد؛ چرا که همه این واحدهای زمانی مقدار بازه زمانی واحد و یکسانی ندارند (۱\ سال شامل ۳۶۵ یا ۳۶۶ روز است، ۱\ ماه بین ۲۸ تا ۳۱ روز طول می‌کشد، و حتی ۱\ روز ممکن است دو بار در سال، هنگام اعمال تغییر ساعت تابستانی (DST)، دقیقاً برابر با ۲۴ ساعت نباشد). برای حل این مسئله، زمانی که از روزها، هفته‌ها، ماه‌ها یا سال‌ها به عنوان واحدهای آفست زمانی خود استفاده می‌کنید، تاریخ مرجع زمانی شما بدون تلاش اضافی برای اطمینان از چیزی درباره آن تنظیم می‌شود (به این امید که \fBmktime\fR\|(3) بعداً از پس آن برآید). این امر ممکن است به نتایجی غافلگیرکننده (یا حتی نامعتبر!) منجر شود، مانند \*(AqMay\ 31\ \-1month\*(Aq = \*(AqApr\ 31\*(Aq (بی‌معنی) = \*(AqMay\ 1\*(Aq (پس از نرمال‌سازی با \fBmktime\fR\|(3))؛ در منطقه زمانی EET عبارت \*(Aq3:30am Mar 29 1999 \-1 day\*(Aq منجر به \*(Aq3:30am Mar 28 1999\*(Aq (یکشنبه) می‌شود که یک ترکیب نامعتبر از زمان/تاریخ است (به دلیل جلو کشیده شدن ساعت در DST از 3am \-> 4am، مثال زیر را ببینید). .PP در مقابل، ساعت‌ها، دقیقه‌ها و ثانیه‌ها بازه‌های زمانی کاملاً مشخصی هستند و تضمین می‌شود که همیشه آفست‌های زمانی را دقیقاً همان‌طور که مشخص شده تولید کنند (برای مثال در منطقه زمانی EET، مقدار \*(Aq8:00\ Mar\ 27\ 1999\ +2\ days\*(Aq = \*(Aq8:00\ Mar\ 29\ 1999\*(Aq است، اما از آنجا که حدود ساعت 3:00\ Mar\ 28\ 1999 یک تغییر ۱ ساعته به جلو برای DST رخ می‌دهد، بازه زمانی واقعی بین 8:00\ Mar\ 27\ 1999 و 8:00\ Mar\ 29\ 1999 برابر با ۴۷ ساعت خواهد بود؛ از سوی دیگر، \*(Aq8:00\ Mar\ 27\ 1999\ +48\ hours\*(Aq = \&\*(Aq9:00\ Mar\ 29\ 1999\*(Aq است، همان‌طور که انتظار می‌رود). .PP \&\fIنکته ۴\fR: مخفف تک‌حرفی هم برای \fBmonths\fR و هم برای \fBminutes\fR حرف \fBm\fR است. برای ابهام‌زدایی، تجزیه‌کننده با به‌کارگیری دو روش اکتشافی زیر سعی می‌کند ذهن شما را بخواند\ :) .IP 1. 3 اگر \fBm\fR در بافت (یعنی بلافاصله پس از) سال‌ها، ماه‌ها، هفته‌ها یا روزها استفاده شود، فرض می‌شود که به معنای \fBmonths\fR است، در حالی که در بافت ساعت‌ها، دقیقه‌ها و ثانیه‌ها به معنای \fBminutes\fR خواهد بود. (برای مثال، در \-1y6m یا +3w1m حرف \fBm\fR به صورت \fBmonths\fR تفسیر می‌شود، در حالی که در \-3h20m یا +5s2m تجزیه‌کننده تصمیم به \fBminutes\fR می‌گیرد). .IP 2. 3 خارج از بافت (یعنی بلافاصله پس از علامت \fB+\fR یا \fB\-\fR)، معنای \fBm\fR از روی عددی که مستقیماً بعد از آن می‌آید حدس زده می‌شود. در حال حاضر، اگر مقدار مطلق عدد کمتر از ۶ باشد فرض می‌شود که \fBm\fR به معنای \fBmonths\fR است، در غیر این صورت به عنوان \fBminutes\fR در نظر گرفته می‌شود. (برای مثال، \-6m == \-6m minutes، در حالی که +5m == +5 months). .PP \&\fIنکات پایانی\fR: مشخص‌کردن زمان به بزرگی و کوچکی حروف حساس نیست (case-insensitive). فاصله را می‌توان آزادانه وارد کرد یا کلاً حذف نمود. با این حال، مواردی وجود دارد که فاصله الزامی است (مانند \*(Aqmidnight\ Thu\*(Aq). در این حالت یا باید کل عبارت را داخل کوتیشن قرار دهید تا توسط پوسته (shell) شما تفکیک نشود، یا از \*(Aq_\*(Aq (زیرخط) یا \*(Aq,\*(Aq (ویرگول) استفاده کنید که آن‌ها نیز به عنوان فاصله به حساب می‌آیند (مانند midnight_Thu یا midnight,Thu). .SS "مثال‌های مشخص‌کردن زمان (TIME SPECIFICATION EXAMPLES)" .IX Subsection "TIME SPECIFICATION EXAMPLES" \&\fIOct 12\fR \-\- ۱۲ اکتبر سال جاری .PP \&\fI\-1month\fR یا \fI\-1m\fR \-\- زمان فعلی از روز، دقیقاً یک ماه قبل (ممکن است نتایج غیرمنتظره داشته باشد، نکته ۳ بالا را ببینید). .PP \&\fInoon yesterday \-3hours\fR \-\- دیروز صبح؛ همچنین می‌تواند به صورت \&\fI9am\-1day\fR نیز مشخص شود. .PP \&\fI23:59 31.12.1999\fR \-\- ۱ دقیقه مانده به سال ۲۰۰۰. .PP \&\fI12/31/99 11:59pm\fR \-\- ۱ دقیقه مانده به سال ۲۰۰۰ برای امپریالیست‌ها. .PP \&\fI12am 01/01/01\fR \-\- آغاز هزاره جدید .PP \&\fIend\-3weeks\fR یا \fIe\-3w\fR \-\- ۳ هفته پیش از زمان پایان (می‌تواند به عنوان مشخصه زمان شروع استفاده شود). .PP \&\fIstart+6hours\fR یا \fIs+6h\fR \-\- ۶ ساعت پس از زمان شروع (می‌تواند به عنوان مشخصه زمان پایان استفاده شود). .PP \&\fI931200300\fR \-\- ۱۸:۴۵ (UTC)، ۵ جولای ۱۹۹۹ (بله، ثانیه‌ها از مبدأ ۱۹۷۰ نیز معتبر هستند). .PP \&\fI19970703 12:45\fR \-\- ۱۲:۴۵، ۳ جولای ۱۹۹۷ (مورد علاقه من، و حتی دارای شماره ISO (8601) نیز هست)..SH "متغیرهای محیطی (ENVIRONMENT VARIABLES)" .IX Header "ENVIRONMENT VARIABLES" متغیرهای محیطی زیر می‌توانند برای تغییر رفتار \&\f(CW\*(C`rrdtool\ fetch\*(C'\fR استفاده شوند: .IP \fBRRDCACHED_ADDRESS\fR 4 .IX Item "RRDCACHED_ADDRESS" اگر این متغیر محیطی مقداردهی شود، تأثیری مشابه با تعیین گزینهٔ \f(CW\*(C`\-\-daemon\*(C'\fR در خط فرمان خواهد داشت. اگر هر دو موجود باشند، آرگومان خط فرمان اولویت دارد. .SH "نویسنده (AUTHOR)" .IX Header "AUTHOR" Tobias Oetiker