RRDCREATE(1) rrdtool RRDCREATE(1)

rrdcreate - ایجاد یک Round Robin Database جدید

rrdtool create filename [--start|-b start time] [--step|-s step] [--template|-t template-file] [--source|-r source-file] [--no-overwrite|-O] [--daemon|-d address] [DS:ds-name[=mapped-ds-name[[source-index]]]:DST:dst arguments] [RRA:CF:cf arguments]

دستور create در RRDtool به شما امکان می‌دهد فایل‌های جدید «پایگاه داده راند روبین» (RRD) را ایجاد کنید. فایل در اندازه نهایی و کامل خود ایجاد شده و با داده‌های *UNKNOWN* پر می‌شود، مگر اینکه یک یا چند فایل منبع RRD مشخص شده باشند و داده‌های مناسبی برای «پیش‌پر کردن» (pre-fill) فایل RRD جدید داشته باشند.

نام RRD مورد نظری که می‌خواهید بسازید. فایل‌های RRD باید با پسوند .rrd خاتمه یابند. با این حال، RRDtool هر نام فایلی را خواهد پذیرفت.

زمان را بر حسب ثانیه‌های سپری‌شده از مبدأ یونیکس (1970-01-01 UTC) مشخص می‌کند که اولین مقدار باید به RRD افزوده شود. RRDtool هیچ داده‌ای با برچسب زمانی قبل از این زمان مشخص‌شده یا هم‌زمان با آن را نمی‌پذیرد.

همچنین برای روش‌های دیگر تعیین زمان، بخش «AT-STYLE TIME SPECIFICATION» را در rrdfetch ببینید.

اگر از یک یا چند فایل منبع برای پیش‌پر کردن RRD جدید استفاده شود، گزینهٔ --start می‌تواند نادیده گرفته شود. در این صورت، جدیدترین زمان به‌روزرسانی در میان تمام فایل‌های منبع به عنوان آخرین زمان به‌روزرسانی فایل RRD جدید استفاده خواهد شد و عملاً زمان شروع را تعیین می‌کند.

بازهٔ زمانی پایه را بر حسب ثانیه مشخص می‌کند که داده‌ها با آن بازه وارد RRD می‌شوند. یک ضریب مقیاس‌بندی می‌تواند به عنوان پسوند به عدد صحیح اضافه شود؛ بخش «STEP, HEARTBEAT, and Rows As Durations» را ببینید.

فایلِ موجود با همین نام را بازنویسی نمی‌کند.

آدرس دیمن rrdcached. برای فهرستی از قالب‌های پذیرفته‌شده، گزینهٔ -l را در راهنمای rrdcached ببینید.

 rrdtool create --daemon unix:/var/run/rrdcached.sock /var/lib/rrd/foo.rrd I<other options>
یک فایل الگوی RRD را جهت دریافت تعاریف step، DS و RRA مشخص می‌کند. این قابلیت
امکان می‌دهد ساختار یک فایل جدید را بر پایه یک فایل موجود بنا کنید. داده‌های فایل
الگو برای پیش‌پر کردن (pre-filling) استفاده نمی‌شوند، اما می‌توان همان فایل را
به‌عنوان یک فایل منبع نیز مشخص کرد (به زیر مراجعه کنید).
تعاریف اضافی DS و RRA مجاز هستند و به تعاریف گرفته‌شده از الگو اضافه خواهند شد.

می‌توان یک یا چند فایل منبع RRD را در خط فرمان مشخص کرد. داده‌های این فایل‌های منبع برای پیش‌پر کردن فایل RRD ایجادشده به کار خواهند رفت. فایل خروجی و یکی از فایل‌های منبع می‌توانند به یک نام فایل یکسان اشاره کنند. این کار عملاً فایل منبع را با فایل جدید RRD جایگزین می‌کند. هرچند خطر از دست رفتن فایل منبع به دلیل جایگزین شدن وجود دارد، اما هیچ خطری مبنی بر اینکه فایل منبع و فایل جدید در هر مقطعی از زمان با یکدیگر «درهم‌آمیخته و مخدوش» شوند وجود ندارد، زیرا فایل جدید همیشه ابتدا به عنوان یک فایل موقت ایجاد می‌شود و تنها پس از آنکه به طور کامل نوشته شد به مقصد نهایی خود منتقل می‌گردد.

پیش‌پر کردن با تطبیق دادن نام‌های DS، ساختارهای RRA و توابع تجمیع (consolidation functions) و انتخاب بهترین تفکیک‌پذیری (resolution) داده در دسترس حین انجام کار صورت می‌گیرد. پیش‌پر کردن ممکن است در همه موارد از نظر ریاضی دقیق نباشد (برای نمونه اگر تفکیک‌پذیری‌ها به دلیل تغییر گام‌بندی (stepping) در RRD مقصد ناچار به تغییر باشند و تفکیک‌پذیری‌های قدیم و جدید با مرزهای bin قدیم/جدید در RRAها هم‌خوانی نداشته باشند).

به عبارت دیگر: بیشترین تلاش ممکن انجام می‌شود تا داده‌ها در حین پیش‌پر کردن حفظ شوند. همچنین، پیش‌پر کردن RRAها ممکن است فقط برای انواع خاصی از DS ممکن باشد. علاوه بر این، پیش‌پر کردن ممکن است اثرات عجیبی روی RRAهای پیش‌بینی Holt-Winters داشته باشد. به بیانی دیگر: هیچ تضمینی برای صحت قطعی داده‌ها وجود ندارد.

هنگام «پیش‌پر کردن» یک فایل RRD، ساختار فایل جدید باید طبق معمول با استفاده از مشخصات DS و RRA همان‌گونه که در ادامه شرح داده شده است، تعیین گردد. داده‌ها بر اساس نام‌ها و انواع DS و به همان ترتیبی که فایل‌های منبع مشخص شده‌اند از آن‌ها دریافت می‌شوند. منابع داده با نام یکسان از فایل‌های منبع مختلف با یکدیگر ترکیب می‌شوند تا یک منبع داده جدید تشکیل دهند. به‌طور کلی، برای هر نقطه زمانی که فایل جدید RRD پس از ایجاد پوشش می‌دهد، تنها داده‌های یک فایل منبع برای پیش‌پر کردن استفاده خواهد شد. با این حال، اگر داده‌ها به زمان‌های متفاوتی اشاره داشته باشند یا فایل منبعی که زودتر قید شده دارای داده ناشناخته (unknown) برای زمانی باشد که فایل بعدی برای آن داده معتبر دارد، داده‌های چند منبع ممکن است با یکدیگر ترکیب شوند.

اگر این انتخاب خودکار داده مطلوب نباشد، نحو دستور DS امکان می‌دهد نگاشتی میان منابع داده مقصد و منبع برای پیش‌پر کردن تعیین کنید. این نحو به شما اجازه می‌دهد منابع داده را تغییر نام دهید و پیش‌پر کردن یک DS را تنها به استفاده از داده‌های یک فایل منبع خاص محدود سازید.

پیش‌پر کردن در حال حاضر فقط برای RRAهایی که از یکی از توابع تجمیع کلاسیک استفاده می‌کنند به‌طور مطمئن کار می‌کند، یعنی یکی از: AVERAGE، MIN، MAX، LAST. همچنین در حال حاضر ممکن است با منابع داده COMPUTE دچار مشکل شود.

توجه داشته باشید که عمل پیش‌پر کردن در حین دستور create، شبیه به بسیاری از عملیات در دسترس از طریق دستور tune است، اما با استفاده از نحو create انجام می‌شود.

یک RRD تکی می‌تواند ورودی را از چندین منبع داده (DS) بپذیرد، برای نمونه ترافیک ورودی و خروجی در یک خط ارتباطی مشخص. با گزینه پیکربندی DS باید برخی ویژگی‌های پایه‌ای هر منبع داده‌ای را که می‌خواهید در RRD ذخیره کنید، تعریف نمایید.

ds-name نامی است که برای ارجاع به این منبع داده خاص از درون یک RRD استفاده خواهید کرد. یک ds-name باید بین ۱ تا ۱۹ نویسه طول داشته و متشکل از نویسه‌های [a-zA-Z0-9_] باشد.

DST نوع منبع داده (Data Source Type) را مشخص می‌کند. باقی آرگومان‌های یک مدخل منبع داده به نوع منبع داده بستگی دارد. برای GAUGE، COUNTER، DERIVE، DCOUNTER، DDERIVE و ABSOLUTE قالب یک مدخل منبع داده به این صورت است:

DS:ds-name:{GAUGE | COUNTER | DERIVE | DCOUNTER | DDERIVE | ABSOLUTE}:heartbeat:min:max

برای منابع داده COMPUTE، قالب به این صورت است:

DS:ds-name:COMPUTE:rpn-expression

برای تصمیم‌گیری درباره اینکه از کدام نوع منبع داده استفاده کنید، تعاریف زیر را بررسی نمایید. همچنین برای آگاهی بیشتر، بخش «HOW TO MEASURE» را مطالعه کنید.

برای مواردی چون دما، تعداد افراد حاضر در یک اتاق یا ارزش سهام RedHat به کار می‌رود.
برای شمارنده‌های افزایشی پیوسته مانند شمارنده ifInOctets در یک روتر است. منبع داده COUNTER فرض می‌کند که مقدار شمارنده هرگز کاهش نمی‌یابد، مگر زمانی که سرریز (overflow) رخ دهد. تابع به‌روزرسانی این سرریز را در نظر می‌گیرد. شمارنده به صورت یک نرخ بر ثانیه ذخیره می‌شود. هنگامی که شمارنده سرریز می‌کند، RRDtool بررسی می‌کند که آیا سرریز در مرز ۳۲ بیت یا ۶۴ بیت رخ داده است و با افزودن مقدار مناسب به نتیجه، متناسب با آن عمل می‌کند.
مشابه با COUNTER است، اما برای کمیت‌هایی که به صورت عدد ممیز شناور با دقت مضاعف (double-precision) بیان می‌شوند. می‌تواند برای ردیابی کمیت‌هایی استفاده شود که با اعداد غیرصحیح افزایش می‌یابند، مانند تعداد ثانیه‌هایی که اجرای یک روتین طول کشیده است، وزن کل پردازش‌شده توسط یک تجهیز فناوری و غیره. تنها تفاوت اساسی این است که DCOUNTER می‌تواند شمارش رو به بالا یا رو به پایین داشته باشد، اما نه هر دو به طور هم‌زمان. جهت فعلی به طور خودکار در دومین به‌روزرسانی غیرنامعین (non-undefined) شمارنده تشخیص داده می‌شود و هرگونه تغییر بعدی در جهت، یک بازنشانی (reset) تلقی می‌گردد. جهت جدید بر اساس دومین به‌روزرسانی پس از بازنشانی و تفاوت آن با مقدار هنگام بازنشانی تعیین و تثبیت می‌شود.
مشتق خطی را که از مقدار قبلی به مقدار فعلی منبع داده می‌رود ذخیره خواهد کرد. این ویژگی می‌تواند برای مقیاس‌ها مفید باشد، مثلاً برای اندازه‌گیری نرخ ورود یا خروج افراد از یک اتاق. در داخل، derive دقیقاً مانند COUNTER عمل می‌کند اما بدون بررسی سرریز. بنابراین اگر شمارنده شما در ۳۲ یا ۶۴ بیت بازنشانی نمی‌شود، ممکن است بخواهید از DERIVE استفاده کرده و آن را با مقدار MIN برابر با ۰ ترکیب کنید.
مشابه با DERIVE است، اما برای کمیت‌هایی که به صورت عدد ممیز شناور با دقت مضاعف بیان می‌شوند.

یادداشتی درباره COUNTER در برابر DERIVE

نوشته Don Baarda <don.baarda@baesystems.com>

اگر نمی‌توانید تحمل کنید که بازنشانی گاه‌به‌گاه شمارنده به اشتباه یک دور خوردن معتبر شمارنده (counter wrap) قلمداد شود، و ترجیح می‌دهید برای همه دور خوردن‌ها و بازنشانی‌های معتبر، مقادیر «Unknown» ثبت شود، همیشه از DERIVE با min=0 استفاده کنید. در غیر این صورت، استفاده از COUNTER با یک مقدار max مناسب برای تمام دور خوردن‌های معتبر شمارنده مقادیر صحیح را بازمی‌گرداند، برخی بازنشانی‌های شمارنده را «Unknown» علامت می‌زند، اما ممکن است برخی بازنشانی‌های شمارنده را به اشتباه یک دور خوردن معتبر فرض کند.

برای یک step با مدت ۵ دقیقه و یک شمارنده ۳۲ بیتی، احتمال اشتباه گرفتن بازنشانی شمارنده با یک دور خوردن معتبر، تقریباً حدود ۰٫۸٪ به ازای هر ۱ مگابیت بر ثانیه از بیشینه پهنای باند است. توجه داشته باشید که این مقدار برای رابط‌های ۱۰۰ مگابیت بر ثانیه معادل ۸۰٪ است، بنابراین برای رابط‌های با پهنای باند بالا و یک شمارنده ۳۲ بیتی، احتمالاً DERIVE با min=0 ارجحیت دارد. اگر از یک شمارنده ۶۴ بیتی استفاده می‌کنید، تقریباً هر مقداری برای تنظیم max امکان اشتباه گرفتن بازنشانی با دور خوردن شمارنده را از بین خواهد برد.

برای شمارنده‌هایی است که با خوانده شدن بازنشانی می‌شوند. این نوع برای شمارنده‌های سریعی به کار می‌رود که تمایل به سرریز دارند. بنابراین به جای خواندن معمولی، آنها را پس از هر بار خواندن بازنشانی می‌کنید تا اطمینان یابید حداکثر زمان ممکن را پیش از سرریز بعدی در اختیار دارید. کاربرد دیگر برای مواردی است که می‌شمارید، مانند تعداد پیام‌ها از زمان آخرین به‌روزرسانی.
برای ذخیره نتیجه اعمال یک فرمول بر روی دیگر منابع داده در RRD است. در زمان به‌روزرسانی، مقداری به این منبع داده داده نمی‌شود، بلکه نقاط داده اولیه (PDPها) آن از روی PDPهای سایر منابع داده بر اساس rpn-expression که فرمول را تعریف می‌کند محاسبه می‌گردد. سپس توابع تجمیع به طور عادی بر روی PDPهای منبع داده COMPUTE اعمال می‌شوند (یعنی rpn-expression صرفاً برای تولید PDPها اعمال می‌گردد). در نرم‌افزارهای پایگاه داده، به این دسته از مجموعه‌های داده ستون‌های «مجازی» یا «محاسباتی» گفته می‌شود.

heartbeat حداکثر تعداد ثانیه‌هایی را مشخص می‌کند که می‌تواند بین دو به‌روزرسانی این منبع داده سپری شود، پیش از آن‌که مقدار منبع داده *UNKNOWN* در نظر گرفته شود.

min و max محدوده مقادیر مورد انتظار را برای داده‌های ارائه‌شده توسط یک منبع داده تعریف می‌کنند. اگر min یا max مشخص شوند، هر مقداری خارج از محدوده تعریف‌شده به عنوان *UNKNOWN* تلقی خواهد شد. اگر از min و max اطلاع ندارید یا اهمیتی برایتان ندارد، آن‌ها را برای ناشناخته روی U تنظیم کنید. توجه داشته باشید که min و max همواره به مقادیر پردازش‌شده DS اشاره دارند. برای یک DS از نوع ترافیک-COUNTER، این مقادیر برابر با حداکثر و حداقل نرخ داده (data-rate) مورد انتظار از دستگاه خواهند بود.

اگر اطلاعات مربوط به حداقل/حداکثر مقادیر مورد انتظار در دسترس است، همیشه ویژگی‌های min یا max را تنظیم کنید. این امر به RRDtool کمک می‌کند تا هنگام اجرای update یک بررسی صحت‌سنجی ساده روی داده‌های دریافتی انجام دهد.

rpn-expression فرمول استفاده‌شده برای محاسبه PDPهای یک منبع داده COMPUTE را از سایر منابع داده در همان <RRD> مشخص می‌کند. این شبیه به تعریف یک آرگومان CDEF برای دستور graph است. لطفاً برای مشاهده فهرست و توضیح عملیات RPN پشتیبانی‌شده به صفحه راهنمای آن دستور مراجعه فرمایید. برای منابع داده COMPUTE، عملیات RPN زیر پشتیبانی نمی‌شوند: COUNT، PREV، TIME و LTIME. علاوه بر این، در تعریف عبارت RPN، منبع داده COMPUTE تنها می‌تواند به نام‌های منابع داده‌ای ارجاع دهد که پیش‌تر در دستور create فهرست شده‌اند. این مشابه محدودیتی است که در آن CDEFها باید صرفاً به DEFها و CDEFهایی ارجاع دهند که قبلاً در همان دستور graph تعریف شده‌اند.

هنگام پیش‌پر کردن فایل جدید RRD با استفاده از یک یا چند RRD منبع، مشخصات DS می‌تواند شامل یک نگاشت اختیاری پس از نام DS باشد. این نگاشت به صورت یک علامت مساوی و به دنبال آن نام DS نگاشته‌شده و یک نمایه منبع اختیاری درون قلاب (کروشه) است.

برای مثال، مشخصه DS:

DS:a=b[2]:GAUGE:120:0:U

مشخص می‌کند که DS با نام a باید از DS با نام b در دومین فایل منبع فهرست‌شده پیش‌پر شود (نمایه‌های منبع مبتنی بر ۱ هستند)..SS "RRA:CF:cf arguments" هدف یک RRD ذخیره داده‌ها در بایگانی‌های چرخشی راند رابین (RRA) است. یک بایگانی شامل تعدادی از مقادیر داده یا آماره‌ها برای هر یک از منبع‌داده‌های تعریف‌شده (DS) است و با یک خط RRA تعریف می‌شود.

هنگامی که داده وارد یک RRD می‌شود، ابتدا در بازه‌های زمانی با طولی که با گزینهٔ -s تعریف شده قرار می‌گیرد و بدین ترتیب به یک نقطه داده اولیه تبدیل می‌شود.

داده‌ها همچنین با تابع تجمیع (CF) بایگانی پردازش می‌شوند. چندین تابع تجمیع وجود دارد که نقاط داده اولیه را از طریق یک تابع تجمیعی ادغام می‌کنند: AVERAGE، MIN، MAX، LAST.

میانگین نقاط داده ذخیره می‌شود.
کوچک‌ترین نقطه داده ذخیره می‌شود.
بزرگ‌ترین نقطه داده ذخیره می‌شود.
آخرین نقطه داده استفاده می‌شود.

توجه داشته باشید که تجمیع داده‌ها ناگزیر منجر به از دست رفتن دقت و اطلاعات می‌شود. ترفند کار در این است که تابع تجمیعی را به‌گونه‌ای انتخاب کنید که ویژگی‌های مهم داده‌های شما در طول فرایند تجمیع حفظ شوند.

قالب خط RRA برای این توابع تجمیع به صورت زیر است:

RRA:{AVERAGE | MIN | MAX | LAST}:xff:steps:rows

xff ضریب xfiles مشخص می‌کند چه بخشی از یک بازه تجمیع می‌تواند از داده‌های *UNKNOWN* تشکیل شده باشد در حالی که مقدار تجمیع‌شده همچنان شناخته‌شده در نظر گرفته شود. این مقدار به عنوان نسبت PDPهای مجاز *UNKNOWN* به تعداد PDPها در بازه بیان می‌شود. بنابراین، دامنه آن بین 0 تا 1 (غیرشامل) است.

steps مشخص می‌کند چند مورد از این نقاط داده اولیه برای ساخت یک nقطه داده تجمیع‌شده استفاده می‌شوند که سپس وارد بایگانی می‌گردد. همچنین بخش "STEP, HEARTBEAT, and Rows As Durations" را ببینید.

rows مشخص می‌کند چه تعداد نسل از مقادیر داده در یک RRA نگهداری می‌شوند. بدیهی است که این مقدار باید بزرگتر از صفر باشد. همچنین بخش "STEP, HEARTBEAT, and Rows As Durations" را ببینید.

علاوه بر توابع تجمیعی، مجموعه‌ای از توابع تخصصی وجود دارند که به RRDtool امکان می‌دهند تا هموارسازی داده‌ها (از طریق الگوریتم پیش‌بینی هولت-وینترز)، باندهای اطمینان، و علامت‌گذاری رفتار ناهنجار را در سری‌های زمانی منبع‌داده ارائه دهد:

  • RRA:HWPREDICT:rows:alpha:beta:seasonal period[:rra-num]
  • RRA:MHWPREDICT:rows:alpha:beta:seasonal period[:rra-num]
  • RRA:SEASONAL:seasonal period:gamma:rra-num[:smoothing-window=fraction]
  • RRA:DEVSEASONAL:seasonal period:gamma:rra-num[:smoothing-window=fraction]
  • RRA:DEVPREDICT:rows:rra-num
  • RRA:FAILURES:rows:threshold:window length:rra-num

این RRAها از چند جهت با توابع تجمیع واقعی تفاوت دارند. نخست اینکه، هر یک از RRAها به ازای هر نقطه داده اولیه یک بار به‌روزرسانی می‌شوند. دوم اینکه، این RRAها به یکدیگر وابسته هستند. برای تولید محدوده‌های اطمینان بی‌درنگ (real-time)، باید یک مجموعه منطبق از SEASONAL، DEVSEASONAL، DEVPREDICT و یکی از HWPREDICT یا MHWPREDICT وجود داشته باشد. تولید مقادیر هموارشده از نقاط داده اولیه نیازمند یک RRA از نوع SEASONAL و یکی از RRAهای HWPREDICT یا MHWPREDICT است. تشخیص رفتار ناهنجار نیازمند FAILURES، DEVSEASONAL، SEASONAL و یکی از HWPREDICT یا MHWPREDICT می‌باشد.

مقادیر پیش‌بینی‌شده یا هموارشده در RRAهای HWPREDICT یا MHWPREDICT ذخیره می‌شوند. در واقع HWPREDICT و MHWPREDICT دو گونه مختلف از روش هولت-وینترز هستند. آنها با یکدیگر قابل تعویض‌اند. هر دو تلاش می‌کنند داده‌ها را به سه مؤلفه تجزیه کنند: خط مبنا (baseline)، روند (trend)، و ضریب فصلی. تابع HWPREDICT ضریب فصلی خود را برای تشکیل پیش‌بینی با خط مبنا جمع می‌کند، در حالی که MHWPREDICT ضریب فصلی خود را در خط مبنا ضرب می‌کند تا پیش‌بینی حاصل شود. تفاوت زمانی محسوس است که خط مبنا در طول یک فصل تغییر چشمگیری کند؛ HWPREDICT پیش‌بینی می‌کند که فصلی بودن همگام با تغییر خط مبنا ثابت بماند، اما MHWPREDICT پیش‌بینی می‌کند که فصلی بودن به نسبت خط مبنا رشد کند یا کاهش یابد. انتخاب مناسب روش بستگی به پدیده‌ای دارد که مدل‌سازی می‌شود. برای سادگی، در ادامه این بحث به HWPREDICT اشاره خواهد شد، اما می‌توان MHWPREDICT را به جای آن به کار برد.

انحراف‌های پیش‌بینی‌شده در DEVPREDICT ذخیره می‌شوند (مشابه انحراف معیاری که می‌تواند برای ایجاد باند اطمینان مقیاس‌بندی شود). بایگانی RRA از نوع FAILURES نشانگرهای دودویی را ذخیره می‌کند. مقدار 1 مشاهدهٔ نمایه‌گذاری‌شده را به عنوان شکست (ناهنجاری) علامت‌گذاری می‌کند؛ یعنی تعداد نقض‌های محدوده اطمینان در پنجره مشاهدات قبلی به حد آستانه تعیین‌شده رسیده یا از آن فراتر رفته است. مثالی از استفاده از این RRAها برای رسم نمودار محدوده‌های اطمینان و شکست‌ها در rrdgraph آمده است.

بایگانی‌های RRA از نوع SEASONAL و DEVSEASONAL به ترتیب ضرایب فصلی برای الگوریتم پیش‌بینی هولت-وینترز و انحرافات فصلی را ذخیره می‌کنند. به ازای هر نقطه زمانی مشاهده در چرخه فصلی، یک مدخل وجود دارد. به عنوان مثال، اگر نقاط داده اولیه هر پنج دقیقه یک بار تولید شوند و چرخه فصلی ۱ روز باشد، هر دو بایگانی SEASONAL و DEVSEASONAL دارای ۲۸۸ ردیف خواهند بود.

به منظور ساده‌سازی ایجاد برای کاربران تازه‌کار، علاوه بر پشتیبانی از ایجاد صریح RRAهای HWPREDICT، SEASONAL، DEVPREDICT، DEVSEASONAL و FAILURES، دستور create در RRDtool از ایجاد ضمنی چهار مورد دیگر در صورتی که HWPREDICT به تنهایی مشخص شده و آرگومان پایانی rra-num حذف شده باشد، پشتیبانی می‌کند.

rows طول RRA را پیش از چرخش مجدد مشخص می‌کند. به یاد داشته باشید که بین نقاط داده اولیه و مدخل‌های این RRAها یک تطابق یک‌به‌یک وجود دارد. برای تابع تجمیع HWPREDICT، مقدار rows باید بزرگتر از seasonal period باشد. اگر RRA از نوع DEVPREDICT به صورت ضمنی ایجاد شود، تعداد ردیف‌های پیش‌فرض برابر با آرگومان rows در HWPREDICT خواهد بود. اگر RRA از نوع FAILURES به صورت ضمنی ایجاد شود، rows بر روی مقدار آرگومان seasonal period از RRA مربوط به HWPREDICT تنظیم خواهد شد. البته دستور resize در RRDtool در صورتی که این مقادیر پیش‌فرض کافی نباشند و ایجادکننده مایل باشد از ایجاد صریح سایر RRAهای توابع تخصصی اجتناب کند، در دسترس است.

seasonal period تعداد نقاط داده اولیه را در یک چرخه فصلی مشخص می‌کند. اگر SEASONAL و DEVSEASONAL به صورت ضمنی ایجاد شوند، این آرگومان برای آن RRAها به طور خودکار روی مقدار مشخص‌شده توسط HWPREDICT تنظیم می‌شود. در صورتی که به صورت صریح ایجاد شوند، ایجادکننده باید بررسی کند که هر سه آرگومان seasonal period با یکدیگر همخوانی داشته باشند.

alpha پارامتر تطبیق ضریب عرض از مبدأ (یا خط مبنا) در الگوریتم پیش‌بینی هولت-وینترز است. برای توضیح این الگوریتم rrdtool را ببینید. مقدار alpha باید بین 0 و 1 باشد. مقداری نزدیک‌تر به 1 به این معنی است که مشاهدات اخیر در پیش‌بینی مؤلفه خط مبنا وزن بیشتری دارند. مقداری نزدیک‌تر به 0 بدین معناست که تاریخچه گذشته در پیش‌بینی مؤلفه خط مبنا وزن بیشتری دارد.

beta پارامتر تطبیق ضریب شیب (یا روند خطی) در الگوریتم پیش‌بینی هولت-وینترز است. مقدار beta باید بین 0 و 1 باشد و همان نقشی را ایفا می‌کند که alpha نسبت به روند خطی پیش‌بینی‌شده دارد.

gamma پارامتر تطبیق ضرایب فصلی در الگوریتم پیش‌بینی هولت-وینترز (HWPREDICT) یا پارامتر تطبیق در به‌روزرسانی هموارسازی نمایی انحرافات فصلی است. این مقدار باید بین 0 و 1 باشد. اگر RRAهای SEASONAL و DEVSEASONAL به صورت ضمنی ایجاد شوند، هر دو دارای مقدار یکسانی برای gamma خواهند بود: مقداری که برای آرگومان alpha در HWPREDICT مشخص شده است. توجه داشته باشید که چون برای هر نقطه زمانی در طول چرخه فصلی یک ضریب فصلی (یا انحراف) وجود دارد، نرخ تطبیق بسیار کُندتر از خط مبنا است. هر ضریب فصلی فقط زمانی به‌روزرسانی می‌شود (یا تطبیق می‌یابد) که مقدار مشاهده‌شده در آفست متناظر با آن ضریب در چرخه فصلی رخ دهد.

اگر RRAهای SEASONAL و DEVSEASONAL به صورت صریح ایجاد شوند، نیازی نیست gamma برای هر دو یکسان باشد. توجه داشته باشید که gamma همچنین می‌تواند از طریق دستور tune در RRDtool تغییر یابد.

smoothing-window کسری از یک فصل را مشخص می‌کند که باید در اطراف هر نقطه میانگین‌گیری شود. به طور پیش‌فرض، مقدار smoothing-window برابر با 0.05 است، به این معنی که هر مقدار در SEASONAL و DEVSEASONAL گهگاه با میانگین‌گیری از (seasonal period*0.05) نزدیک‌ترین همسایگانش جایگزین خواهد شد. تنظیم smoothing-window روی صفر، هموارساز میانگین متحرک (running-average) را به طور کامل غیرفعال می‌کند.

rra-num پیوندهای بین RRAهای مرتبط را فراهم می‌سازد. اگر HWPREDICT به تنهایی مشخص شده باشد و سایر RRAها به صورت ضمنی ایجاد شوند، نیازی به نگرانی در مورد این آرگومان نیست. اگر RRAها به صورت صریح ایجاد شوند، باید به این آرگومان دقت کافی مبذول فرمایید. برای هر RRA که شامل این آرگومان باشد، یک وابستگی بین آن RRA و یک RRA دیگر وجود دارد. آرگومان rra-num نمایهٔ بر مبنای ۱ در ترتیب ایجاد RRA است (یعنی ترتیبی که در دستور create ظاهر می‌شوند). RRA وابسته برای هر RRA که نیازمند آرگومان rra-num است، در اینجا فهرست شده است:

  • در HWPREDICT مقدار rra-num نمایهٔ RRA مربوط به SEASONAL است.
  • در SEASONAL مقدار rra-num نمایهٔ RRA مربوط به HWPREDICT است.
  • در DEVPREDICT مقدار rra-num نمایهٔ RRA مربوط به DEVSEASONAL است.
  • در DEVSEASONAL مقدار rra-num نمایهٔ RRA مربوط به HWPREDICT است.
  • در FAILURES مقدار rra-num نمایهٔ RRA مربوط به DEVSEASONAL است.

threshold حداقل تعداد تخطی‌ها (مقادیر مشاهده‌شده خارج از محدوده‌های اطمینان) در یک پنجره است که یک شکست (failure) را تشکیل می‌دهد. اگر RRA از نوع FAILURES به صورت ضمنی ایجاد شود، مقدار پیش‌فرض 7 است.

window length تعداد نقاط زمانی در پنجره است. یک عدد صحیح بزرگتر یا مساوی با آستانه (threshold) و کمتر یا مساوی با 28 مشخص کنید. بازه زمانی که این پنجره نشان می‌دهد به بازه بین نقاط داده اولیه بستگی دارد. اگر RRA از نوع FAILURES به صورت ضمنی ایجاد شود، مقدار پیش‌فرض 9 است..SH "STEP، HEARTBEAT و سطرها به عنوان مدت‌زمان (STEP, HEARTBEAT, and Rows As Durations)" به‌طور سنتی RRDtool بازه‌های PDP را بر حسب ثانیه و بیشتر مقادیر دیگر را بر حسب ثانیه یا تعداد PDP مشخص می‌کرد. این امر پیکربندی پایگاه‌های داده را تا حدی مبهم می‌ساخت؛ برای مثال:

rrdtool create power.rrd \
  --start now-2h --step 1 \
  DS:watts:GAUGE:300:0:24000 \
  RRA:AVERAGE:0.5:1:864000 \
  RRA:AVERAGE:0.5:60:129600 \
  RRA:AVERAGE:0.5:3600:13392 \
  RRA:AVERAGE:0.5:86400:3660

یک پایگاه‌داده از مقادیر توان (power) جمع‌آوری‌شده در هر ثانیه یک‌بار، با یک heartbeat پنج دقیقه‌ای (۳۰۰ ثانیه) و چهار RRA ایجاد می‌کند: ده روز میانگین‌های یک ثانیه‌ای، ۹۰ روز میانگین‌های یک دقیقه‌ای، ۱۸ ماه میانگین‌های یک ساعته، و ده سال میانگین‌های یک روزه.

مقادیر step، heartbeat، و تعداد و سطرهای PDP را می‌توان به عنوان مدت‌زمان (durations) نیز مشخص کرد؛ این مقادیر اعداد صحیح مثبتی هستند که یک پسوند تک‌نویسه‌ای برای تعیین ضریب مقیاس به همراه دارند. برای مشاهده ضرایب مقیاس پسوندهای پشتیبانی‌شده، بخش "rrd_scaled_duration" در librrd را ببینید: "s" (ثانیه)، "m" (دقیقه)، "h" (ساعت)، "d" (روز)، "w" (هفته)، "M" (ماه)، و "y" (سال).

مقادیر مقیاس‌بندی‌شده‌ی step و heartbeat (که ذاتا مدت‌زمان‌هایی بر حسب ثانیه هستند) مستقیما استفاده می‌شوند، در حالی که آرگومان‌های سطر توابع تجمیع (consolidation function) بر مقدار step آن‌ها تقسیم می‌شوند تا تعداد سطرها به دست آید.

با استفاده از این قابلیت، همان پیکربندی بالا را می‌توان به این صورت نوشت:

rrdtool create power.rrd \
  --start now-2h --step 1s \
  DS:watts:GAUGE:5m:0:24000 \
  RRA:AVERAGE:0.5:1s:10d \
  RRA:AVERAGE:0.5:1m:90d \
  RRA:AVERAGE:0.5:1h:18M \
  RRA:AVERAGE:0.5:1d:10y

در اینجا توضیحی توسط Don Baarda درباره عملکرد درونی RRDtool ارائه شده است. این توضیح ممکن است به شما کمک کند تا متوجه شوید چرا این همه داده‌ی *UNKNOWN* در پایگاه‌های داده‌تان ظاهر می‌شود:

به RRDtool در زمان‌های دلخواه نمونه‌ها/به‌روزرسانی‌ها تحویل داده می‌شود. این ابزار از روی آن‌ها در هر بازه زمانی "step"، نقاط اولیه‌ی داده یا همان Primary Data Points (به اختصار PDP) را می‌سازد. سپس PDPها در RRAها تجمیع می‌شوند.

مقدار "heartbeat" حداکثر بازه زمانی مجاز بین نمونه‌ها/به‌روزرسانی‌ها را تعریف می‌کند. اگر فاصله بین نمونه‌ها کمتر از "heartbeat" باشد، نرخ میانگین محاسبه شده و برای آن بازه اعمال می‌گردد. اگر فاصله بین نمونه‌ها بیشتر از "heartbeat" باشد، کل آن بازه به عنوان "unknown" (نامشخص) در نظر گرفته می‌شود. توجه داشته باشید عوامل دیگری نیز می‌توانند یک بازه نمونه را "unknown" کنند، مانند فراتر رفتن نرخ از حدود مجاز یا نمونه‌ای که صراحتا نامشخص علامت‌گذاری شده باشد.

نرخ‌های مشخص در طول بازه "step" یک PDP برای محاسبه میانگین نرخ آن PDP استفاده می‌شوند. اگر مجموع زمان‌های "unknown" بیش از نیمی از "step" را تشکیل دهد، کل PDP به عنوان "unknown" علامت زده می‌شود. این بدان معناست که ترکیبی از زمان‌های نمونه‌برداری مشخص و "unknown" در یک "step" منفرد، ممکن است برای ایجاد یک PDP معتبر به مقدار کافی زمان «مشخص» برسد یا نرسد.

مقدار "heartbeat" می‌تواند نسبت به بازه "step" بین PDPها کوتاه (غیرمعمول) یا بلند (معمول) باشد. یک "heartbeat" کوتاه یعنی برای هر PDP به چندین نمونه نیاز دارید، و اگر آن‌ها را دریافت نکنید، آن PDP به عنوان unknown علامت‌گذاری می‌شود. یک heartbeat بلند می‌تواند چندین "step" را پوشش دهد، به این معنی که محاسبه چندین PDP از یک نمونه منفرد قابل قبول است. نمونه‌ای افراطی از این حالت می‌تواند یک "step" پنج دقیقه‌ای و یک "heartbeat" یک روزه باشد؛ در این حالت، ثبت فقط یک نمونه در هر روز باعث می‌شود که همه PDPهای کل دوره آن روز با یک نرخ میانگین یکسان تنظیم شوند. -- Don Baarda <don.baarda@baesystems.com>

      time|
      axis|
begin__|00|
       |01|
      u|02|----* sample1, restart "hb"-timer
      u|03|   /
      u|04|  /
      u|05| /
      u|06|/     "hbt" expired
      u|07|
       |08|----* sample2, restart "hb"
       |09|   /
       |10|  /
      u|11|----* sample3, restart "hb"
      u|12|   /
      u|13|  /
step1_u|14| /
      u|15|/     "swt" expired
      u|16|
       |17|----* sample4, restart "hb", create "pdp" for step1 =
       |18|   /  = unknown due to 10 "u" labeled secs > 0.5 * step
       |19|  /
       |20| /
       |21|----* sample5, restart "hb"
       |22|   /
       |23|  /
       |24|----* sample6, restart "hb"
       |25|   /
       |26|  /
       |27|----* sample7, restart "hb"
step2__|28|   /
       |22|  /
       |23|----* sample8, restart "hb", create "pdp" for step1, create "cdp"
       |24|   /
       |25|  /

گرافیک از vladimir.lavrov@desy.de.

در اینجا چند نکته درباره نحوه اندازه‌گیری آورده شده است:

دما (Temperature)
معمولا نوعی سنجش‌گر در اختیار دارید که می‌توانید برای خواندن دما از آن استفاده کنید. دما در واقع به یک بازه زمانی متصل نیست؛ تنها ارتباط موجود این است که قرائت دما در زمان معینی انجام شده است. می‌توانید از نوع منبع داده GAUGE برای این منظور استفاده کنید. در این صورت RRDtool مقدار قرائت‌شده را به همراه زمان مربوطه ثبت خواهد کرد.
پیام‌های ایمیل (Mail Messages)
فرض کنید روشی برای شمارش تعداد پیام‌های جابه‌جا شده توسط سرور ایمیلتان در یک بازه زمانی مشخص دارید، که داده‌هایی مانند «۵ پیام در ۶۵ ثانیه گذشته» به شما می‌دهد. اگر به عدد ۵ به چشم یک نوع داده‌ی ABSOLUTE نگاه کنید، می‌توانید به سادگی RRD را با عدد ۵ و زمان پایان دوره نظارت خود به‌روزرسانی کنید. آن‌گاه RRDtool تعداد پیام‌ها در ثانیه را ثبت خواهد کرد. اگر بعدا بخواهید تعداد پیام‌های منتقل‌شده در یک روز را بدانید، می‌توانید میانگین پیام‌ها در ثانیه را برای روز مورد نظر از RRDtool دریافت کرده و آن را در تعداد ثانیه‌های یک روز ضرب کنید. از آنجا که تمام محاسبات ریاضی با اعداد ممیز شناور دو‌دقتی (Doubles) انجام می‌شوند، دقت کار باید کاملا قابل قبول باشد.
همیشه یک نرخ است (Its always a Rate)
ابزار RRDtool نرخ‌ها را برای داده‌های COUNTER، DERIVE، DCOUNTER، DDERIVE و ABSOLUTE به صورت مقدار/ثانیه ذخیره می‌کند. وقتی داده‌ها را رسم می‌کنید، در محور y مقدار/ثانیه را مشاهده خواهید کرد و ممکن است وسوسه شوید با ضرب کردن آن در اختلاف زمانی (delta-time) بین نقاط، آن را به یک مقدار مطلق تبدیل کنید. ابزار RRDtool داده‌های پیوسته را رسم می‌کند و به همین دلیل برای رسم مقادیر مطلق، مانند «مجموع کل بایت‌های» ارسال‌شده و دریافت‌شده در یک روتر، مناسب نیست. چیزی که احتمالا می‌خواهید، رسم نرخ‌هایی است که می‌توانید آن‌ها را مثلا به بایت/ساعت تغییر مقیاس دهید، یا رسم مقادیر مطلق با ابزار دیگری است که نمودارهای ستونی (bar-plots) رسم می‌کند؛ جایی که delta-time برای هر نقطه روی نمودار مشخص است (به گونه‌ای که هنگام خواندن نمودار، مثلا گیگابایت را روی محور y، روزها را روی محور x و یک ستون را برای هر روز ببینید)..SH "مثال (EXAMPLE)"
rrdtool create temperature.rrd --step 300 \
 DS:temp:GAUGE:600:-273:5000 \
 RRA:AVERAGE:0.5:1:1200 \
 RRA:MIN:0.5:12:2400 \
 RRA:MAX:0.5:12:2400 \
 RRA:AVERAGE:0.5:12:2400

این دستور یک RRD به نام temperature.rrd را راه‌اندازی می‌کند که هر ۳۰۰ ثانیه یک مقدار دما را می‌پذیرد. اگر برای بیش از ۶۰۰ ثانیه دادهٔ جدیدی ارائه نشود، دما به وضعیت *UNKNOWN* درمی‌آید. کمترین مقدار قابل‌قبول -273 و بیشترین مقدار 5'000 است.

چند ناحیهٔ بایگانی نیز تعریف شده است. اولین ناحیه دماهای ارائه‌شده را برای ۱۰۰ ساعت ذخیره می‌کند (1'200 * 300 ثانیه = ۱۰۰ ساعت). دومین RRA کمترین دمای ثبت‌شده در هر ساعت (12 * 300 ثانیه = ۱ ساعت) را برای ۱۰۰ روز (2'400 ساعت) ذخیره می‌کند. سومین و چهارمین RRA نیز به ترتیب همین کار را برای بیشترین و میانگین دما انجام می‌دهند.

rrdtool create monitor.rrd --step 300        \
  DS:ifOutOctets:COUNTER:1800:0:125000000    \
  RRA:AVERAGE:0.5:1:2016                     \
  RRA:HWPREDICT:1440:0.1:0.0035:288

این مثال بر یک رابط روتر (router interface) نظارت می‌کند. اولین RRA جریان ترافیک را بر حسب بایت (octets) ردیابی می‌کند؛ دومین RRA توابع اختصاصی RRAها را برای شناسایی رفتارهای ناهنجار ایجاد می‌نماید. توجه داشته باشید که آرگومان rra-num در HWPREDICT ذکر نشده است، بنابراین سایر RRAها به‌طور ضمنی با مقادیر پارامتر پیش‌فرض ساخته خواهند شد. در این مثال، خط مبنای (baseline) الگوریتم پیش‌بینی به سرعت تطبیق می‌یابد؛ در واقع مشاهدات یک ساعت اخیر (هر کدام در فواصل ۵ دقیقه‌ای) ۷۵٪ از پیش‌بینی خط مبنا را تشکیل می‌دهند. پیش‌بینی روند خطی بسیار کندتر تطبیق پیدا می‌کند. مشاهدات انجام‌شده در طول روز گذشته (با ۲۸۸ مشاهده در روز) تنها ۶۵٪ از روند خطی پیش‌بینی‌شده را شامل می‌شوند. نکته: این محاسبات بر پایه یک فرمول هموارسازی نمایی (exponential smoothing) هستند که در مقالهٔ LISA 2000 شرح داده شده است. حداکثر ۱۲۵۰۰۰۰۰۰ بایت در ثانیه متناظر با یک پیوند 1 Gbit/s است.

چرخهٔ فصلی یک روز است (۲۸۸ نقطه داده در فواصل ۳۰۰ ثانیه‌ای)، و پارامتر تطبیق فصلی روی 0.1 تنظیم می‌شود. فایل RRD پیش از بازنویسی چرخشی (wrap around)، پیش‌بینی‌ها و مقادیر انحراف مربوط به ۵ روز (1'440 نقطه داده) را ذخیره خواهد کرد. این فایل یک روز (یک چرخهٔ فصلی) از نشانگرهای 0-1 را در RRA از نوع FAILURES نگهداری می‌کند.

همان فایل RRD و RRAها را می‌توان با دستور زیر نیز ایجاد کرد، که تمام RRAهای توابع اختصاصی را به صورت صریح با استفاده از «STEP، HEARTBEAT و سطرها به عنوان مدت زمان» می‌سازد.

rrdtool create monitor.rrd --step 5m \
  DS:ifOutOctets:COUNTER:30m:0:125000000 \
  RRA:AVERAGE:0.5:1:2016 \
  RRA:HWPREDICT:5d:0.1:0.0035:1d:3 \
  RRA:SEASONAL:1d:0.1:2 \
  RRA:DEVSEASONAL:1d:0.1:2 \
  RRA:DEVPREDICT:5d:5 \
  RRA:FAILURES:1d:7:9:5

البته ایجاد صریح نیازی به بازتولید دقیق ایجاد ضمنی ندارد و می‌توان تعدادی از آرگومان‌ها را تغییر داد.

rrdtool create proxy.rrd --step 300 \
  DS:Requests:DERIVE:1800:0:U  \
  DS:Duration:DERIVE:1800:0:U  \
  DS:AvgReqDur:COMPUTE:Duration,Requests,0,EQ,1,Requests,IF,/ \
  RRA:AVERAGE:0.5:1:2016

این مثال بر میانگین مدت‌زمان درخواست‌ها در طول هر بازهٔ ۳۰۰ ثانیه‌ای برای درخواست‌های پردازش‌شده توسط یک وب‌پروکسی نظارت می‌کند. در این مورد، پروکسی دو شمارنده ارائه می‌دهد: تعداد درخواست‌های پردازش‌شده از زمان بوت سیستم، و مجموع مدت‌زمان تجمعی تمامی درخواست‌های پردازش‌شده. مسلماً هر دوی این شمارنده‌ها نقطه سرریز دارند، اما استفاده از منبع دادهٔ DERIVE همچنین بازنشانی ناشی از متوقف شدن و راه‌اندازی مجدد وب‌پروکسی را مدیریت می‌کند.

در RRD، اولین منبع داده نرخ درخواست بر ثانیه را در طول بازه ذخیره می‌کند. دومین منبع داده مدت‌زمان کل تمام درخواست‌های پردازش‌شده در طول بازه تقسیم بر ۳۰۰ را ذخیره می‌نماید. منبع دادهٔ COMPUTE هر PDP از AccumDuration را بر PDP متناظر آن در TotalRequests تقسیم کرده و میانگین مدت‌زمان درخواست را ذخیره می‌کند. بخش باقی‌ماندهٔ عبارت RPN حالت تقسیم بر صفر را مدیریت می‌کند.

توجه داشته باشید که فایل‌های جدید rrd صرف‌نظر از تنظیمات umask شما، دارای مجوز 0644 خواهند بود. اگر فایلی با همان نام از قبل وجود داشته باشد، تنظیمات مجوز آن به فایل جدید رونوشت خواهد شد.

Tobias Oetiker <tobi@oetiker.ch>, Peter Stamfest <peter@stamfest.at>

2026-08-08 1.11.0