RRDTOOL(1) rrdtool RRDTOOL(1)

rrdtool - ابزار پایگاه‌داده راند رابین (Round Robin Database Tool)

rrdtool - [workdir]| function

جمع‌آوری اطلاعات وضعیت از انواع منابع مختلف، از دمای دفتر کار شما گرفته تا تعداد بایت‌هایی (octets) که از رابط FDDI مسیریاب شما عبور کرده‌اند، کار بسیار ساده‌ای است. اما ذخیره‌سازی این داده‌ها به شیوه‌ای کارآمد و ساختاریافته چندان بدیهی نیست. اینجاست که RRDtool به کار می‌آید. این ابزار به شما امکان می‌دهد داده‌هایی را که از انواع مختلف منابع داده (DS) جمع‌آوری می‌کنید، ثبت و تحلیل کنید. بخش تحلیل داده در RRDtool مبتنی بر توانایی تولید سریع نمایش‌های گرافیکی از مقادیر داده‌های جمع‌آوری‌شده در طول یک بازه زمانی قابل‌تعریف است.

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

برای آشنایی مقدماتی با نحوه کارکرد RRDtool، حتماً rrdtutorial را مطالعه کنید..SS "توابع (FUNCTIONS)" اگرچه صفحات راهنما (man pages) از سوئیچ‌های خط فرمان صحبت می‌کنند که باید برای به‌کارگیری RRDtool تنظیم کنید، اما ذکر این نکته حائز اهمیت است که RRDtool می‌تواند از راه دور و از طریق مجموعه‌ای از لوله‌ها (pipes) کنترل شود. این امر در مواردی که قصد دارید RRDtool کارهای زیادی را به‌سرعت انجام دهد، صرفه‌جویی قابل‌توجهی در زمان راه‌اندازی به همراه دارد. بخش «REMOTE CONTROL» را در ادامه بررسی کنید. همچنین تعدادی رابط زبانی (language bindings) برای RRDtool وجود دارد که به شما امکان می‌دهد مستقیماً از Perl، python، Tcl، PHP و غیره از آن استفاده کنید.

راه‌اندازی یک Round Robin Database (RRD) جدید. rrdcreate را بررسی کنید.
ذخیره مقادیر داده جدید در یک RRD. rrdupdate را بررسی کنید.
از نظر عملیاتی معادل update است، به‌جز در خروجی. rrdupdate را بررسی کنید.
ایجاد یک نمودار از داده‌های ذخیره‌شده در یک یا چند RRD. جدا از تولید نمودارها، داده‌ها را می‌توان در stdout نیز استخراج کرد. rrdgraph را بررسی کنید.
ایجاد یک نمودار از داده‌های ذخیره‌شده در یک یا چند RRD. مشابه graph است، اما متادیتا پیش از نمودار چاپ می‌شود. rrdgraph را بررسی کنید.
تخلیه محتویات یک RRD در قالب ASCII ساده. در ارتباط با restore می‌توانید از این دستور برای انتقال یک RRD از یک معماری رایانه به معماری دیگر استفاده کنید. rrddump را بررسی کنید.
بازگردانی یک RRD در قالب XML به یک RRD باینری. rrdrestore را بررسی کنید.
دریافت داده‌ها برای یک دوره زمانی مشخص از یک RRD. تابع graph برای بازیابی داده‌های خود از یک RRD از fetch استفاده می‌کند. rrdfetch را بررسی کنید.
تغییر پیکربندی و ساختار یک RRD. rrdtune را بررسی کنید.
یافتن اولین زمان به‌روزرسانی یک RRD. rrdfirst را بررسی کنید.
یافتن آخرین زمان به‌روزرسانی یک RRD. rrdlast را بررسی کنید.
یافتن آخرین زمان به‌روزرسانی یک RRD. همچنین مقدار ذخیره‌شده برای هر داده را در جدیدترین به‌روزرسانی بازمی‌گرداند. rrdlastupdate را بررسی کنید.
دریافت اطلاعات درباره یک RRD. rrdinfo را بررسی کنید.
تغییر اندازه RRAهای مجزا. این کار خطرناک است! rrdresize را بررسی کنید.
برون‌بری داده‌های بازیابی‌شده از یک یا چند RRD. rrdxport را بررسی کنید.
تخلیه مقادیر یک فایل RRD خاص از حافظه. rrdflushcached را بررسی کنید.
فهرست کردن دایرکتوری‌ها و پایگاه‌های داده rrd از راه دور. rrdlist را بررسی کنید.

جمع‌آوری داده‌ها (Data Acquisition)
هنگام پایش وضعیت یک سیستم، در دسترس بودن داده‌ها در فواصل زمانی ثابت بسیار مطلوب است. متأسفانه، ممکن است همیشه قادر نباشید داده‌ها را دقیقاً در همان زمانی که می‌خواهید واکشی کنید. بنابراین RRDtool به شما امکان می‌دهد فایل لاگ را در هر زمان دلخواهی به‌روزرسانی کنید. این ابزار به‌طور خودکار مقدار منبع داده (DS) را در آخرین بازه زمانی رسمی (فاصله زمانی) درون‌یابی کرده و این مقدار درون‌یابی‌شده را در لاگ می‌نویسد. مقدار اصلی که ارائه کرده‌اید نیز ذخیره می‌شود و هنگام درون‌یابی ورودی بعدی لاگ مد نظر قرار می‌گیرد.
تجمیع (Consolidation)
شما ممکن است داده‌ها را در فواصل ۱ دقیقه‌ای ثبت کنید، اما ممکن است به دانستن روند تغییرات داده‌ها در طول سال گذشته نیز علاقه‌مند باشید. شما می‌توانید این کار را با ذخیره ساده داده‌ها در فواصل ۱ دقیقه‌ای برای کل سال انجام دهید. در حالی که این کار فضای دیسک قابل‌توجهی را اشغال می‌کند، تحلیل داده‌ها هنگام ایجاد یک نمودار که کل سال را پوشش دهد نیز زمان زیادی خواهد برد. RRDtool از طریق ویژگی تجمیع داده‌های خود راه‌حلی برای این مشکل ارائه می‌دهد. هنگام راه‌اندازی یک Round Robin Database (RRD)، می‌توانید تعیین کنید که این تجمیع در چه بازه‌ای رخ دهد و از کدام تابع تجمیع (CF) (میانگین، حداقل، حداکثر، آخرین مقدار) برای ساخت مقادیر تجمیع‌شده استفاده شود (rrdcreate را ببینید). می‌توانید هر تعداد پیکربندی تجمیع مختلف را درون یک RRD تعریف کنید. تمامی آن‌ها هنگام بارگذاری داده‌های جدید در RRD به‌صورت خودکار و در لحظه نگهداری و به‌روزرسانی خواهند شد.
آرشیوهای گردشی (Round Robin Archives)
مقادیر داده مربوط به یک پیکربندی تجمیع یکسان در Round Robin Archives (RRA) ذخیره می‌شوند. این روشی بسیار کارآمد برای ذخیره داده‌ها برای مدت‌زمانی معین و در عین حال با استفاده از مقدار مشخص و ثابتی از فضای ذخیره‌سازی است.

نحوه کارکرد آن به این صورت است: اگر بخواهید ۱'۰۰۰ مقدار را در فواصل ۵ دقیقه‌ای ذخیره کنید، RRDtool فضایی برای ۱'۰۰۰ مقدار داده و یک ناحیه سرایند (header) اختصاص می‌دهد. در سرایند، اشاره‌گری ذخیره می‌شود که نشان می‌دهد آخرین بار در کدام خانه (مقدار) از ناحیه ذخیره‌سازی نوشته شده است. مقادیر جدید به روش چرخشی (round robin) در Round Robin Archive نوشته می‌شوند. این کار به‌طور خودکار تاریخچه را به آخرین ۱'۰۰۰ مقدار (در مثال ما) محدود می‌کند. از آنجا که می‌توانید چندین RRA را درون یک RRD واحد تعریف کنید، می‌توانید مورد دیگری را برای مثال جهت ذخیره ۷۵۰ مقدار داده در فواصل ۲ ساعته تنظیم کنید و بنابراین لاگی را برای دو ماه گذشته با وضوح کمتر نگهداری نمایید.

استفاده از RRAها تضمین می‌کند که حجم RRD در طول زمان افزایش نمی‌یابد و داده‌های قدیمی به‌طور خودکار حذف می‌شوند. با استفاده از قابلیت تجمیع، همچنان می‌توانید داده‌ها را برای مدت‌زمانی بسیار طولانی نگهداری کنید، در حالی که وضوح داده‌ها در طول محور زمان به‌تدریج کاهش می‌یابد.

استفاده از توابع تجمیع (CF) مختلف به شما امکان می‌دهد دقیقاً همان نوع اطلاعاتی را ذخیره کنید که واقعاً مورد علاقه شماست: حداکثر ترافیک یک دقیقه‌ای روی LAN، حداقل دمای سرداب شما، ... و غیره.

داده‌های نامشخص (Unknown Data)
همان‌طور که پیش‌تر اشاره شد، RRD داده‌ها را در فواصل زمانی ثابت ذخیره می‌کند. گاهی ممکن است هنگامی که باید مقداری در RRD نوشته شود، هیچ داده جدیدی در دسترس نباشد. جمع‌آوری داده‌ها ممکن است به دلایل مختلف امکان‌پذیر نباشد. با RRDtool می‌توانید با ذخیره مقدار *UNKNOWN* در پایگاه داده، این شرایط را مدیریت کنید. مقدار '*UNKNOWN*' در تمامی توابع این ابزار پشتیبانی می‌شود. هنگام تجمیع یک مجموعه داده، میزان مقادیر داده *UNKNOWN* محاسبه می‌شود و هنگامی که مقدار تجمیع‌شده جدید آماده نوشتن در Round Robin Archive (RRA) خود باشد، یک بررسی اعتبار انجام می‌شود تا اطمینان حاصل گردد درصد مقادیر نامشخص در نقطه داده بالاتر از یک سطح قابل‌پیکربندی است. در غیر این صورت، یک مقدار *UNKNOWN* در RRA نوشته خواهد شد.
رسم نمودار (Graphing)
RRDtool به شما امکان می‌دهد بر اساس داده‌های ذخیره‌شده در یک یا چند RRD، گزارش‌هایی به شکل عددی و گرافیکی تولید کنید. قابلیت رسم نمودار کاملاً قابل‌پیکربندی است. اندازه، رنگ و محتویات نمودار را می‌توان آزادانه تعریف کرد. برای اطلاعات بیشتر در این مورد، rrdgraph را بررسی کنید.
تشخیص رفتار ناهنجار (Aberrant Behavior Detection)
توسط Jake Brutlag

RRDtool بلوک‌های سازنده را برای تشخیص تقریباً بی‌درنگ (near real-time) رفتار ناهنجار فراهم می‌کند. این مؤلفه‌ها شامل موارد زیر هستند:

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

در اینجا توضیح کوتاهی درباره این مؤلفه‌ها آمده است:

الگوریتم پیش‌بینی سری زمانی Holt-Winters یک الگوریتم برخط (on-line یا افزایشی) است که مشاهدات آینده در یک سری زمانی را به‌صورت تطبیقی پیش‌بینی می‌کند. پیش‌بینی آن حاصل‌جمع سه مؤلفه است: یک خط پایه (یا عرض از مبدأ)، یک روند خطی در طول زمان (یا شیب)، و یک ضریب فصلی (یک اثر دوره‌ای، مانند یک چرخه روزانه). برای هر نقطه زمانی در دوره (چرخه) یک ضریب فصلی وجود دارد. پس از مشاهده یک مقدار، هر یک از این مؤلفه‌ها از طریق هموارسازی نمایی (exponential smoothing) به‌روزرسانی می‌شوند. این بدان معناست که الگوریتم از مقادیر گذشته «یاد می‌گیرد» و از آن‌ها برای پیش‌بینی آینده استفاده می‌کند. نرخ انطباق توسط ۳ پارامتر هدایت می‌شود: alpha (عرض از مبدأ)، beta (شیب)، و gamma (فصلی). همچنین می‌توان پیش‌بینی را به‌عنوان یک مقدار هموارشده برای سری زمانی در نظر گرفت.

معیار انحراف، انحراف قدر مطلق وزنی فصلی است. اصطلاح فصلی بدان معناست که انحراف به‌طور جداگانه برای هر نقطه زمانی در چرخه فصلی اندازه‌گیری می‌شود. همانند پیش‌بینی Holt-Winters، انحراف با استفاده از معیار محاسبه‌شده از مقادیر گذشته (اما تنها در همان نقطه از چرخه فصلی) پیش‌بینی می‌شود. پس از مشاهده مقدار، الگوریتم از طریق هموارسازی نمایی از مقدار مشاهده‌شده یاد می‌گیرد. باندهای اطمینان (confidence bands) برای سری زمانی مشاهده‌شده با مقیاس‌بندی دنباله مقادیر انحراف پیش‌بینی‌شده تولید می‌شوند (ما معمولاً این دنباله را به‌جای مجموعه‌ای از نقاط گسسته، خطی پیوسته در نظر می‌گیریم).

رفتار ناهنجار (یک خرابی بالقوه) هر زمان که تعداد دفعاتی که مقدار مشاهده‌شده از باندهای اطمینان تخطی می‌کند در یک پنجره زمانی مشخص، برابر یا فراتر از یک آستانه تعیین‌شده باشد گزارش می‌شود (برای مثال ۵ بار تخطی در طول ۴۵ دقیقه گذشته با مقداری که هر ۵ دقیقه یک‌بار مشاهده می‌شود).

این قابلیت در مجموعه‌ای از RRAهای مرتبط گنجانده شده است. به‌ویژه، یک RRA از نوع FAILURES خرابی‌های بالقوه را لاگ می‌کند. با استفاده از این داده‌ها می‌توانید، برای مثال، از یک برنامه واسط کاربر (front-end) برای RRDtool جهت راه‌اندازی هشدارهای بی‌درنگ استفاده کنید.

برای توضیحات دقیق در مورد نحوه راه‌اندازی این مورد، rrdcreate را ببینید. هنگامی که RRDtool را با گزینه خط فرمان '-' اجرا می‌کنید، منتظر ورودی از طریق ورودی استاندارد (STDIN) می‌ماند. با این ویژگی می‌توانید با متصل کردن RRDtool به فرایندی دیگر (MRTG یک نمونه است) از طریق مجموعه‌ای از لوله‌ها (pipes)، کارایی را ارتقا دهید. از طریق این لوله‌ها، RRDtool همان آرگومان‌های خط فرمان و برخی دستورهای ویژه مانند cd، mkdir، pwd، ls و quit را می‌پذیرد. برای راهنمایی دقیق درباره دستورهای سرور تایپ کنید:

rrdtool help cd

هنگامی که دستوری کامل شود، RRDtool رشتهٔ '"OK"' را چاپ می‌کند که پس از آن اطلاعات زمان‌بندی به قالب u:usertime s:systemtimer:runtime می‌آید. مقادیر usertime و systemtime مجموع ثانیه‌های سپری‌شده از زمان آغاز به کار RRDtool هستند. runtime کل مدت ثانیه‌هایی است که RRDtool در حال اجرا بوده است. اگر خطایی رخ دهد، در عوض خطی به قالب '"ERROR:" شرح خطا' چاپ خواهد شد. RRDtool متوقف نخواهد شد، مگر اینکه اتفاقی واقعاً بحرانی رخ دهد. اگر یک workdir مشخص شده باشد و شناسه کاربری (UID) برابر 0 باشد، RRDtool یک chroot به آن workdir انجام می‌دهد. اگر UID برابر 0 نباشد، RRDtool تنها دایرکتوری جاری را به workdir تغییر می‌دهد.

اگر می‌خواهید یک RRD-Server ایجاد کنید، باید یک شماره سرویس TCP/IP انتخاب کرده و آن را به این صورت به /etc/services بیفزایید:

rrdsrv      13900/tcp                       # RRD server

توجه: درگاه TCP شماره 13900 به‌طور رسمی برای rrdsrv ثبت نشده است. می‌توانید از هر درگاه استفاده‌نشده‌ای در فایل services خود استفاده کنید، اما البته سیستم‌های سرور و کلاینت باید از یک درگاه یکسان استفاده کنند.

با این پیکربندی می‌توانید RRDtool را به عنوان یک فراسرور (meta-server) به /etc/inetd.conf اضافه کنید. برای نمونه:

rrdsrv stream tcp nowait root /opt/rrd/bin/rrdtool rrdtool - /var/rrd

فراموش نکنید که دایرکتوری پایگاه داده /var/rrd را ایجاد کرده و inetd خود را مجدداً راه‌اندازی کنید.

اگر همه چیز به درستی راه‌اندازی شده باشد، می‌توانید با سوکت‌های Perl، ابزارهایی مانند netcat، یا در یک آزمایش تعاملی سریع با استفاده از 'telnet localhost rrdsrv' به سرور دسترسی پیدا کنید.

نکته: در این قابلیت هیچ احراز هویتی وجود ندارد! چنین درگاهی را راه‌اندازی نکنید مگر اینکه بدانید دقیقاً چه کاری انجام می‌دهید.

متغیرهای محیطی زیر ممکن است برای تغییر رفتار بیشتر ابزارها مورد استفاده قرار گیرند.

اگر این متغیر محیطی تنظیم شده باشد، فایل RRD در حالت تعیین‌شده قفل می‌شود:
  • try چنانچه فایل توسط فرایند دیگری قفل شده باشد، با شکست روبرو می‌شود. این حالت پیش‌فرض است.
  • block تا زمان آزاد شدن قفل منتظر می‌ماند.
  • none به‌طور کلی قفل‌گذاری را نادیده می‌گیرد. فراخواننده باید از قفل‌گذاری مناسب که با "fcntl(fd, F_SETLK, ...)" سازگار باشد، اطمینان حاصل کند.

برخی از ابزارها دارای گزینه‌های خط فرمان (--locking) هستند که اولویت بالاتری نسبت به این متغیر دارند.

برای پیکربندی‌های بسیار بزرگ، به‌روزرسانی هزاران فایل RRD اغلب تبدیل به یک مشکل جدی در ورودی/خروجی (IO) می‌شود. اگر با چنین مشکلاتی مواجه شدید، شاید بهتر باشد نگاهی به rrdcached بیندازید؛ یک دیمن حافظه پنهان برای RRDtool که ممکن است به شما در کاهش فشار وارد بر دیسک‌هایتان کمک کند..SH "همچنین ببینید (SEE ALSO)" rrdcreate, rrdupdate, rrdgraph, rrddump, rrdfetch, rrdtune, rrdlast, rrdxport, rrdflushcached, rrdcached

باگ؟ ویژگی!

Tobias Oetiker <tobi@oetiker.ch>

2026-08-08 1.11.0