انگلیسیفرانسویاسپانیایی

Ad


فاویکون OnWorks

cdeftutorial - آنلاین در ابر

cdeftutorial را در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا کنید.

این دستور cdeftutorial است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


cdeftutorial - آموزش CDEF Alex van den Bogaerdt

شرح


هدف از این سند: ارائه چند نمونه از قطعات پرکاربرد
زبان CDEF RRDtool.

اگر فکر می کنید برخی از ویژگی های مهم به درستی توضیح داده نشده است، و اگر آن را به این اضافه کنید
سند برای اکثر کاربران مفید است، لطفاً از من بخواهید که آن را اضافه کنم. سپس سعی خواهم کرد ارائه کنم
پاسخ در نسخه بعدی این آموزش. بدون بازخورد مساوی بدون تغییر است! اضافات
به این سند نیز خوش آمدید. الکس ون دن بوگارت[ایمیل محافظت شده]>

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

بیشتر مطالعه
اگر با روشی که من سعی می کنم آن را توضیح دهم مشکل دارید، لطفاً استیو رادر را بخوانید
rpntutorial. ممکن است به شما کمک کند تا بفهمید این همه چگونه کار می کند.

چی هستند CDEF ها؟


هنگام بازیابی داده ها از یک RRD، از "DEF" برای کار با آن داده استفاده می کنید. در فکر
آن را به عنوان یک متغیر که در طول زمان تغییر می کند (که در آن زمان محور x است). ارزش این
متغیر چیزی است که در آن زمان خاص در پایگاه داده یافت می شود و شما نمی توانید هیچ کاری انجام دهید
تغییرات روی آن این همان چیزی است که CDEF ها برای آن هستند: آنها مقادیری را از DEF ها می گیرند و انجام می دهند
محاسبات روی آنها

نحو


DEF:var_name_1=some.rrd:ds_name:CF
CDEF:var_name_2=RPN_expression

ابتدا "var_name_1" را به عنوان داده جمع آوری شده از منبع داده "ds_name" موجود در RRD تعریف می کنید.
"some.rrd" با تابع ادغام "CF".

فرض کنید شمارنده ifInOctets SNMP در mrtg.rrd به عنوان DS "in" ذخیره شده است. سپس
DEF زیر یک متغیر برای میانگین آن منبع داده تعریف می کند:

DEF:inbytes=mrtg.rrd:in:AVERAGE

فرض کنید می‌خواهید بیت‌ها در ثانیه را نمایش دهید (به‌جای بایت‌ها در ثانیه که در آن ذخیره می‌شود
پایگاه داده.) شما باید یک محاسبه (از این رو "CDEF") روی متغیر "inbytes" تعریف کنید و از آن استفاده کنید.
آن متغیر (inbit) به جای اصلی:

CDEF:inbits=inbytes,8,*

این به RRDtool می گوید که برای بدست آوردن این بیت، این بایت ها را در هشت ضرب کند. بعداً توضیح خواهم داد که چگونه این
آثار. در توابع نمودار یا چاپ، اکنون می توانید از این بیت ها در جایی که استفاده می کنید استفاده کنید
این بایت در غیر این صورت.

توجه داشته باشید که نام متغیر مورد استفاده در CDEF (inbits) نباید با متغیر یکسان باشد
در DEF (اینبایت) نامگذاری شده است!

RPN-عبارات


RPN مختصری برای Reverse Polish Notation است. به صورت زیر عمل می کند. شما متغیرها را قرار دهید
یا اعداد روی یک پشته شما همچنین عملیات (چیزهایی که باید انجام دهید) را روی پشته و این پشته قرار می دهید
سپس پردازش می شود. نتیجه روی پشته قرار می گیرد. در پایان، باید وجود داشته باشد
دقیقاً یک عدد باقی مانده است: نتیجه یک سری عملیات. اگر دقیقا وجود ندارد
یک عدد باقی مانده است، RRDtool با صدای بلند شکایت خواهد کرد.

ضرب فوق در هشت به صورت زیر خواهد بود:

1. با یک پشته خالی شروع کنید

2. محتوای این بایت های متغیر را در پشته قرار دهید

3. عدد هشت را روی پشته قرار دهید

4. عملیات ضرب را روی پشته قرار دهید

5. پشته را پردازش کنید

6. مقدار را از پشته بازیابی کنید و آن را در این بیت های متغیر قرار دهید

اکنون یک مثال با اعداد واقعی انجام می دهیم. فرض کنید متغیر inbytes مقدار داشته باشد
10، پشته خواهد بود:

1. ||

2. |10|

3. |10|8|

4. |10|8|*|

5. |80|

6. ||

پردازش پشته (مرحله 5) یک مقدار را از پشته بازیابی می کند (از سمت راست در
مرحله 4). این عملیات ضرب است و دو مقدار را از پشته به عنوان ورودی می گیرد.
نتیجه دوباره روی پشته قرار می گیرد (مقدار 80 در این مورد). برای ضرب
ترتیب مهم نیست، اما برای عملیات های دیگر مانند تفریق و تقسیم مهم است.
به طور کلی شما ترتیب زیر را دارید:

y = A - B --> y = منهای (A,B) --> CDEF:y=A,B,-

این خیلی شهودی نیست (حداقل اکثر مردم اینطور فکر نمی کنند). برای تابع f(A,B)
شما موقعیت "f" را معکوس می کنید، اما ترتیب متغیرها را معکوس نمی کنید.

در حال تبدیل خود را خواسته به RPN


ابتدا تصویر واضحی از کاری که می خواهید انجام دهید به دست آورید. مشکل را در ابعاد کوچکتر تقسیم کنید
تا زمانی که دیگر نتوان آنها را تقسیم کرد. سپس تبدیل آن نسبتاً ساده است
ایده ها در RPN

فرض کنید چندین RRD دارید و می خواهید تعدادی شمارنده در آنها اضافه کنید. اینها می توانستند
به عنوان مثال، شمارنده‌های هر پیوند WAN که نظارت می‌کنید باشد.

شما باید:

router1.rrd با link1in link2in
router2.rrd با link1in link2in
router3.rrd با link1in link2in

فرض کنید می‌خواهید همه این شمارنده‌ها را جمع کنید، به جز link2in در داخل
router2.rrd. شما باید انجام دهید:

(در این مثال، "router1.rrd:link1in" به معنای DS link1in در RRD router1.rrd است)

router1.rrd:link1in
router1.rrd:link2in
router2.rrd:link1in
router3.rrd:link1in
router3.rrd:link2in
-------------------- +
(نتیجه جمع)

به عنوان یک تابع ریاضی، می توان این را نوشت:

"add(router1.rrd:link1in, router1.rrd:link2in, router2.rrd:link1in, router3.rrd:link1in
، router3.rrd:link2.in)"

با RRDtool و RPN ابتدا ورودی ها را تعریف کنید:

DEF:a=router1.rrd:link1in:AVERAGE
DEF:b=router1.rrd:link2in:AVERAGE
DEF:c=router2.rrd:link1in:AVERAGE
DEF:d=router3.rrd:link1in:AVERAGE
DEF:e=router3.rrd:link2in:AVERAGE

حالا تابع ریاضی تبدیل به "add(a,b,c,d,e) می شود.

در RPN، هیچ اپراتوری وجود ندارد که بیش از دو مقدار را جمع کند، بنابراین باید چندین کار را انجام دهید
اضافات شما a و b را اضافه می کنید، c را به نتیجه اضافه می کنید، d را به نتیجه اضافه می کنید و e را به نتیجه اضافه می کنید
نتيجه

فشار a: یک پشته حاوی مقدار a است
b را فشار دهید و اضافه کنید: پشته b،+ حاوی نتیجه a+b است
c را فشار دهید و اضافه کنید: پشته c,+ حاوی نتیجه a+b+c است
d را فشار داده و اضافه کنید: پشته d,+ حاوی نتیجه a+b+c+d است
e را فشار دهید و اضافه کنید: پشته e,+ حاوی نتیجه a+b+c+d+e است

آنچه در اینجا محاسبه می شود به صورت زیر نوشته می شود:

( ( ( (الف + ب) + ج) + د) + ه) >

این در RPN است: "CDEF:result=a,b,+,c,+,d,+,e,+"

این درست است، اما می‌توان آن را برای انسان‌ها روشن‌تر کرد. مهم نیست که یک را اضافه کنید
به b و سپس c را به نتیجه اضافه کنید یا ابتدا b را به c اضافه کنید و سپس a را به نتیجه اضافه کنید. این
بازنویسی RPN به "CDEF:result=a,b,c,d,e,+,+,+,+" که
متفاوت ارزیابی می شود:

مقدار فشار متغیر a در پشته: a
مقدار فشار متغیر b در پشته: ab
مقدار فشار متغیر c در پشته: abc
مقدار فشار متغیر d در پشته: abcd
مقدار فشار متغیر e در پشته: abcde
فشار عملگر + روی پشته: abcde +
و آن را پردازش کنید: abc P (که در آن P == d+e)
اپراتور فشار + در پشته: abc P +
و آن را پردازش کنید: ab Q (که در آن Q == c+P)
اپراتور فشار + روی پشته: ab Q +
و آن را پردازش کنید: a R (که در آن R == b+Q)
فشار عملگر + روی پشته: یک R +
و آن را پردازش کنید: S (که در آن S == a+R)

همانطور که می بینید عبارت RPN "a,b,c,d,e,+,+,+,+,+" در
"((((d+e)+c)+b)+a)" و همان نتیجه را دارد که "a,b,+,c,+,d,+,e,+". به این می گویند
قانون جابجایی جمع، اما شما ممکن است این را فوراً فراموش کنید، تا زمانی که شما
معنی آن را به خاطر بسپار

اکنون به عبارتی نگاه کنید که دارای ضرب است:

اول در ریاضی عادی: "بگذارید نتیجه = a+b*c". در این صورت شما نمی توانید ترتیب را انتخاب کنید
خودتان باید از ضرب شروع کنید و سپس a را به آن اضافه کنید. شما ممکن است تغییر دهید
موقعیت b و c، شما نباید موقعیت a و b را تغییر دهید.

هنگام تبدیل این عبارت به RPN باید این را در نظر بگیرید. بخوانش
به عنوان: "نتیجه b*c را به a اضافه کنید" و سپس نوشتن عبارت RPN آسان است:
"result=a,b,c,*,+" عبارت دیگری که همان را برمی گرداند: "result=b,c,*,a,+"

در ریاضیات عادی، ممکن است با چیزی مانند "a*(b+c)" مواجه شوید و این نیز قابل تبدیل است.
به RPN. پرانتز فقط به شما می گوید که ابتدا b و c را جمع کنید و سپس a را در the ضرب کنید
نتیجه دوباره، اکنون نوشتن آن در RPN آسان است: "result=a,b,c,+,*". توجه داشته باشید که این است
بسیار شبیه به یکی از عبارات پاراگراف قبل، فقط ضرب
و اضافه شدن جای خود را تغییر داد.

هنگامی که با RPN مشکل دارید یا زمانی که RRDtool شکایت می کند، معمولاً چیز خوبی است
پشته را روی یک تکه کاغذ یادداشت کنید و ببینید چه اتفاقی می افتد. دفترچه راهنما را آماده کنید
و وانمود کنید که RRDtool هستید. مطمئنم تمام محاسبات را با دست انجام دهید تا ببینید چه اتفاقی می افتد
این بیشتر، اگر نه همه، مشکلاتی را که با آن روبرو می شوید حل می کند.

برخی از ویژه تعداد


La ناشناخته ارزش
گاهی اوقات جمع آوری داده های شما با شکست مواجه می شود. این می تواند بسیار رایج باشد، به خصوص زمانی که
پرس و جو از طریق لینک های مشغول RRDtool را می توان به گونه ای پیکربندی کرد که به یک (یا حتی بیشتر) اجازه دهد.
مقدار(های) ناشناخته و به روز رسانی گم شده را محاسبه کنید. به عنوان مثال می توانید از خود پرس و جو کنید
دستگاه در هر دقیقه این یک به اصطلاح PDP یا نقطه داده اولیه در دقیقه ایجاد می کند.
اگر RRD خود را به گونه‌ای تعریف کرده‌اید که حاوی RRA باشد که مقادیر 5 دقیقه‌ای را ذخیره می‌کند، به پنج مورد نیاز دارید
آن PDP ها برای ایجاد یک CDP (نقطه داده تلفیقی). این PDP ها می توانند ناشناخته شوند
دو مورد:

1. به روز رسانی ها خیلی از هم فاصله دارند. این با استفاده از تنظیم "تپش قلب" تنظیم می شود.

2. به‌روزرسانی با درج هیچ مقدار (با استفاده از الگو) به طور عمدی روی ناشناخته تنظیم شد
گزینه) یا با استفاده از "U" به عنوان مقدار برای درج.

هنگامی که یک CDP محاسبه می شود، مکانیسم دیگری تعیین می کند که آیا این CDP معتبر است یا خیر. اگر
تعداد زیادی PDP ناشناخته وجود دارد، CDP نیز ناشناخته است. این توسط تعیین می شود
فاکتور xff لطفاً توجه داشته باشید که یک به روز رسانی شمارنده ناشناخته می تواند منجر به دو PDP ناشناخته شود! اگر
شما فقط یک PDP ناشناخته را در هر CDP مجاز می‌کنید، این باعث می‌شود که CDP ناشناخته بماند!

فرض کنید شمارنده با یک در ثانیه افزایش می یابد و شما هر دقیقه آن را بازیابی می کنید:

نرخ برابری حاصل
10'000
10'060 1; (10'060-10'000)/60 == 1
10'120 1; (10'120-10'060)/60 == 1
ناشناخته ناشناخته؛ شما آخرین ارزش را نمی دانید
10'240 ناشناخته; شما ارزش قبلی را نمی دانید
10'300 1; (10'300-10'240)/60 == 1

اگر قرار بود CDP از پنج به روز رسانی گذشته محاسبه شود، دو PDP ناشناخته دریافت می کند
و سه PDP شناخته شده. اگر xff روی 0.5 تنظیم می شد که اتفاقاً معمول است
فاکتور استفاده شده، CDP مقدار شناخته شده 1 خواهد داشت. اگر xff روی 0.2 تنظیم می شد، آنگاه
CDP حاصل ناشناخته خواهد بود.

شما باید مقادیر مناسب برای ضربان قلب، تعداد PDP در هر CDP و xff را تعیین کنید
عامل. همانطور که از متن قبلی می بینید، آنها رفتار RRA شما را تعریف می کنند.

کارگر با ناشناخته داده ها in خود را پایگاه داده
همانطور که در فصل قبل خواندید، ورودی های یک RRA را می توان روی مجهول تنظیم کرد
ارزش. اگر محاسباتی را با این نوع مقدار انجام دهید، نتیجه نیز باید ناشناخته باشد.
این بدان معنی است که اگر a یا b باشد، عبارتی مانند "نتیجه=a,b,+" ناشناخته خواهد بود
ناشناس. نادیده گرفتن مقدار مجهول و برگرداندن مقدار the اشتباه است
پارامتر دیگر با انجام این کار، فرض کنید "ناشناخته" به معنای "صفر" است و این نیست
درست است

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

در این مورد، استفاده از یک CDEF که داده های ناشناخته را به صفر تبدیل می کند، نسبتا معقول است.
شمارنده های دستگاه ناشناخته بود (بالاخره هنوز نصب نشده بود!) اما می دانید
که نرخ داده از طریق دستگاه باید صفر می شد (به همین دلیل: بود
نصب نشده).

چند مثال در زیر وجود دارد که این تغییر را ایجاد می کند.

ابدیت
داده های بی نهایت شکل دیگری از یک عدد خاص است. نمی توان آن را نمودار کرد زیرا توسط
تعریف شما هرگز به ارزش بی نهایت نمی رسید. شما می توانید به مثبت فکر کنید و
بی نهایت منفی بسته به موقعیت نسبت به صفر.

RRDtool قادر است بی نهایت را با توقف در جریان آن نمایش دهد (-نه نمودار!)
حداکثر (برای بینهایت مثبت) یا حداقل (برای بی نهایت منفی) بدون اینکه بدانیم
حداکثر (حداقل).

Infinity در RRDtool بیشتر برای ترسیم یک AREA بدون اطلاع از عمودی آن استفاده می شود
ابعاد شما می توانید آن را به عنوان ترسیم یک AREA با ارتفاع بی نهایت و نمایش در نظر بگیرید
فقط بخشی که در نمودار فعلی قابل مشاهده است. این احتمالا یک راه خوب برای
بی نهایت تقریبی است و مطمئناً برخی از ترفندهای شسته و رفته را می دهد. برای نمونه به زیر مراجعه کنید.

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

برخی از مثال ها


مثال: با استفاده از a تازه ایجاد شده DRR
اکنون بیش از یک سال است که آماری را روی روتر خود نگه می دارید. اخیرا شما یک را نصب کرده اید
روتر اضافی و شما مایلید توان عملیاتی ترکیبی این دو دستگاه را نشان دهید.

اگر فقط شمارنده ها را از router.rrd و router2.rrd جمع کنید، داده های شناخته شده را اضافه خواهید کرد
(از router.rrd) تا داده های ناشناخته (از router2.rrd) برای بخش بزرگتری از آمار شما.
شما می توانید این را به چند روش حل کنید:

· هنگام ایجاد پایگاه داده جدید، از ابتدا تا کنون آن را با صفر پر کنید. شما دارید
برای شروع پایگاه داده در کمترین زمان اخیر یا قبل از آن در پایگاه داده دیگر.

· متناوبا، می توانید از CDEF استفاده کنید و داده های ناشناخته را به صفر تغییر دهید.

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

آنچه ما می خواهیم این است: "اگر مقدار ناشناخته است، آن را با صفر جایگزین کنید". این را می توان در نوشت
شبه کد به صورت: اگر (مقدار ناشناخته است) سپس (صفر) دیگری (مقدار). هنگام خواندن rdgraph
شما متوجه عملکرد "UN" می شوید که صفر یا یک را برمی گرداند. شما همچنین متوجه "IF" می شوید
تابعی که صفر یا یک را به عنوان ورودی می گیرد.

ابتدا به تابع "IF" نگاه کنید. سه مقدار از پشته می گیرد، مقدار اول است
در نقطه تصمیم گیری، اگر ارزیابی "درست" باشد، مقدار دوم به پشته برگردانده می شود.
و اگر نه، مقدار سوم به پشته برگردانده می شود. ما می خواهیم که عملکرد "UN" تصمیم بگیرد
چه اتفاقی می افتد بنابراین ما این دو تابع را در یک CDEF ترکیب می کنیم.

اجازه دهید دو مسیر ممکن برای تابع "IF" را بنویسیم:

در صورت بازگشت واقعی a
اگر بازگشت کاذب ب

در RPN: "result=x,a,b,IF" که در آن "x" درست یا نادرست است.

حالا باید "x" را پر کنیم، این باید قسمت "(مقدار ناشناخته است)" باشد و این در است
RPN: "result=value,UN"

اکنون آنها را با هم ترکیب می کنیم: "result=value,UN,a,b,IF" و وقتی موارد مناسب را پر می کنیم
برای "a" و "b" ما به پایان رسیدیم:

"CDEF:result=value,UN,0,value,IF"

اگر با روش من مشکل دارید، ممکن است بخواهید راهنمای RPN استیو رادر را بخوانید
این مثال آخر را توضیح داد.

اگر می خواهید این عبارت RPN را بررسی کنید، فقط رفتار RRDtool را تقلید کنید:

برای هر مقدار شناخته شده، عبارت به صورت زیر ارزیابی می شود:
CDEF:result=value,UN,0,value,IF (value,UN) درست نیست بنابراین تبدیل به 0 می شود
CDEF:result=0,0,value,IF "IF" مقدار سوم را برمی گرداند
CDEF:result=value مقدار شناخته شده برگردانده می شود

برای مقدار ناشناخته، این اتفاق می افتد:
CDEF:result=value,UN,0,value,IF (value,UN) درست است پس تبدیل به 1 می شود
CDEF:result=1,0,value,IF "IF" 1 را می بیند و مقدار دوم را برمی گرداند
CDEF:result=0 صفر برگردانده شد

البته اگر دوست دارید به جای صفر مقدار دیگری ببینید، می توانید از آن دیگری استفاده کنید
ارزش.

در نهایت، هنگامی که تمام داده های ناشناخته از RRD حذف می شوند، ممکن است بخواهید آن را حذف کنید
قانون به گونه ای که داده های ناشناخته به درستی نمایش داده شوند.

مثال: بهتر اداره of ناشناخته داده ها، by با استفاده از زمان
مثال بالا یک اشکال دارد. اگر بعد از آن داده های ناشناخته را در پایگاه داده خود وارد کنید
با نصب تجهیزات جدید خود، آن نیز به صفر تبدیل می شود و بنابراین شما
نمی بینم که مشکلی وجود دارد این خوب نیست و آنچه شما واقعاً می خواهید انجام دهید این است:

· اگر داده های ناشناخته وجود دارد، به زمان اخذ این نمونه نگاه کنید.

· اگر مقدار مجهول قبل از زمان xxx باشد، آن را صفر کنید.

· اگر بعد از زمان xxx است، آن را به عنوان داده ناشناخته بگذارید.

این قابل انجام است: شما می توانید زمان برداشتن نمونه را با زمان مشخصی مقایسه کنید.
با فرض اینکه شما شروع به نظارت بر دستگاه خود در جمعه 17 سپتامبر 1999، 00:35:57 MET کرده اید.
DST از 1970-01-01 این زمان را در ثانیه ترجمه کنید و به 937'521'357 تبدیل شود. اگر شما
مقادیر ناشناخته ای را که پس از این زمان دریافت شده اند پردازش کنید، می خواهید آنها را ناشناخته بگذارید
و اگر قبل از این زمان "دریافت" شده بودند، می خواهید آنها را به صفر ترجمه کنید (پس شما
می توانید به طور موثر آنها را نادیده بگیرید و آنها را به شمارنده روترهای دیگر خود اضافه کنید).

ترجمه جمعه 17 سپتامبر 1999، 00:35:57 MET DST به 937'521'357 می تواند توسط،
به عنوان مثال، با استفاده از تاریخ gnu:

date -d "19990917 00:35:57" +%s

شما همچنین می توانید پایگاه داده را تخلیه کنید و ببینید که داده ها از کجا شروع به شناخته شدن می کنند. وجود دارد
چندین راه دیگر برای انجام این کار، فقط یکی را انتخاب کنید.

اکنون ما باید جادویی را ایجاد کنیم که به ما امکان می دهد مقادیر ناشناخته را متفاوت پردازش کنیم
بسته به زمان نمونه برداری این یک فرآیند سه مرحله ای است:

1. اگر مهر زمانی مقدار بعد از 937'521'357 است، آن را همانطور که هست بگذارید.

2. اگر مقدار یک مقدار شناخته شده است، آن را همانطور که هست رها کنید.

3. مقدار مجهول را به صفر تغییر دهید.

بیایید به قسمت اول نگاه کنیم:

اگر (درست) مقدار اصلی را برگردانید

این را بازنویسی می کنیم:

اگر (درست) "a" را برگردانید
اگر (نادرست) "ب" را برگرداند

ما باید درست یا نادرست را از مرحله 1 محاسبه کنیم. تابعی وجود دارد که برمی‌گرداند
مهر زمانی برای نمونه فعلی به طرز شگفت انگیزی «زمان» نامیده می شود. این بار
باید با یک عدد ثابت مقایسه شود، ما به "GT" نیاز داریم. خروجی "GT" درست یا نادرست است
و این ورودی خوبی برای "IF" است. ما می خواهیم "اگر (زمان > 937521357) سپس (بازگشت a) دیگری
(برگشت ب)".

این فرآیند قبلاً به طور کامل در فصل قبل توضیح داده شده است، بنابراین اجازه دهید آن را سریع انجام دهیم:

اگر (x) سپس یک دیگری ب
جایی که x نشان دهنده "زمان> 937521357" است
جایی که a نشان دهنده مقدار اصلی است
که در آن b نتیجه مثال قبلی را نشان می دهد

time>937521357 --> TIME,937521357,GT

اگر (x) سپس یک دیگری b --> x,a,b,IF
جایگزین x --> TIME,937521357,GT,a,b,IF
جایگزین --> TIME,937521357,GT,value,b,IF
جایگزین b --> TIME,937521357,GT,value,value,UN,0,value,IF,IF

در نهایت به این موارد می رسیم: "CDEF:result=TIME,937521357,GT,value,value,UN,0,value,IF,IF"

این بسیار پیچیده به نظر می رسد، با این حال، همانطور که می بینید، رسیدن به آن خیلی سخت نبود.

مثال: وانمود کردن خارق العاده داده ها نه آنجا
فرض کنید مشکلی دارید که به صورت اسپک های بزرگ در نمودار شما ظاهر می شود. شما این را می دانید
اتفاق می افتد و چرا، بنابراین شما تصمیم می گیرید که مشکل را حل کنید. شاید شما از خود استفاده می کنید
شبکه برای انجام یک نسخه پشتیبان در شب و با انجام این کار تقریباً 10 مگابایت بر ثانیه دریافت می کنید در حالی که بقیه
فعالیت شبکه شما اعدادی بالاتر از 100 کیلوبایت بر ثانیه تولید نمی کند.

دو گزینه وجود دارد:

1. اگر عدد از 100 کیلوبایت بر ثانیه بیشتر شود، اشتباه است و می‌خواهید با تغییر آن، آن را پنهان کنید.
به ناشناخته

2. شما نمی خواهید نمودار بیش از 100 کیلوبایت بر ثانیه نشان دهد.

کد شبه: اگر (تعداد > 100) سپس عدد دیگری ناشناخته یا کد شبه: اگر (تعداد > 100)
سپس 100 عدد دیگر.

دومین "مشکل" نیز ممکن است با استفاده از گزینه سفت و سخت گراف RRDtool حل شود.
با این حال این نتیجه یکسانی ندارد. در این مثال می توانید با نموداری که
مقیاس خودکار را انجام می دهد. همچنین، اگر از اعداد برای نمایش ماکزیمم استفاده کنید، روی آنها تنظیم می شود
100 کیلوبایت بر ثانیه

ما دوباره از "IF" و "GT" استفاده می کنیم. "اگر (x) سپس (y) else (z)" به صورت نوشته می شود
"CDEF:result=x,y,z,IF"; حالا x، y و z را پر کنید. برای x باید «عدد بزرگتر از
100kb/s تبدیل به "number,100000,GT" می شود (کیلو 1 است و b/s همان چیزی است که اندازه می گیریم!). "z"
قسمت در هر دو حالت "عدد" است و قسمت "y" یا "UNKN" برای مجهول یا "100000" است.
برای 100 کیلوبایت بر ثانیه

دو عبارت CDEF عبارتند از:

CDEF:result=number,100000,GT,UNKN,number,IF
CDEF:result=number,100000,GT,100000,number,IF

مثال: کارگر on a معین زمان محدوده
اگر نموداری می‌خواهید که چند هفته طول بکشد، اما فقط می‌خواهید اطلاعات برخی از روترها را ببینید
برای یک هفته، باید بقیه بازه زمانی را "پنهان" کنید. از من نپرس این کی می شود
مفید باشد، فقط برای مثال اینجاست :)

باید مهر زمانی را با تاریخ شروع و پایان مقایسه کنیم. مقایسه کردن نیست
دشوار:

TIME، شروع، GE
TIME، زمان پایان، LE

این دو بخش از CDEF یا 0 برای false یا 1 برای true تولید می کنند. اکنون می توانیم بررسی کنیم که آیا
آنها هر دو 0 (یا 1) هستند و از چند دستور IF استفاده می کنند، اما همانطور که واتارو ساتو اشاره کرد، ما می توانیم
از توابع "*" یا "+" به عنوان AND و منطقی OR استفاده کنید.

برای "*"، اگر یکی از دو عملگر صفر باشد، نتیجه صفر (نادرست) خواهد بود. برای
"+"، نتیجه فقط زمانی نادرست (0) خواهد بود که دو عملگر نادرست (0) اضافه شود.
هشدار: *هر* عددی که مساوی 0 نباشد "درست" در نظر گرفته خواهد شد. این بدان معنی است که، برای
به عنوان مثال، "-1,1،XNUMX،+" (که باید "درست یا درست" باشد) FALSE می شود ... به عبارت دیگر،
فقط در صورتی از "+" استفاده کنید که مطمئن باشید فقط اعداد مثبت (یا صفر) دارید.

بیایید CDEF کامل را کامپایل کنیم:

DEF:ds0=router1.rrd:AVERAGE
CDEF:ds0modified=TIME،شروع،GT،TIME،پایان زمان،LE،*،ds0،UNKN،IF

این مقدار ds0 را برمی‌گرداند اگر هر دو مقایسه true را برگردانند. شما همچنین می توانید آن را انجام دهید
برعکس:

DEF:ds0=router1.rrd:AVERAGE
CDEF:ds0modified=TIME،شروع،LT،TIME،پایان،GT،+،UNKN،ds0،IF

اگر هر یک از مقایسه‌ها درست را برگرداند، یک ناشناخته برمی‌گرداند.

مثال: شما مظنون به داشته باشد مشکلات و می خواهم به دیدن ناشناخته داده است.
فرض کنید تعداد کاربران فعال را در چندین سرور ترمینال جمع کنید. اگر یکی از آنها
پاسخی نمی دهد (یا پاسخی نادرست) شما "NaN" را در پایگاه داده دریافت می کنید ("نه یک
عدد") و NaN به عنوان ناشناخته ارزیابی می شود.

در این صورت، شما می خواهید به آن هشدار داده شود و مجموع مقادیر باقی مانده برابر است
برای شما ارزشی ندارد

چیزی شبیه به این خواهد بود:

DEF:users1=location1.rrd:onlineTS1:LAST
DEF:users2=location1.rrd:onlineTS2:LAST
DEF:users3=location2.rrd:onlineTS1:LAST
DEF:users4=location2.rrd:onlineTS2:LAST
CDEF: allusers=users1,users2,users3,users4,+,+,+

اگر اکنون نشانگرها را رسم کنید، داده های ناشناخته در یکی از users1..users4 به صورت یک شکاف در نشان داده می شود.
نمودار شما شما می خواهید این را تغییر دهید تا یک خط قرمز روشن نشان دهد، نه یک شکاف.

یک CDEF اضافی تعریف کنید که اگر همه چیز درست باشد ناشناخته است و اگر مجهول وجود داشته باشد نامحدود است
مقدار:

CDEF:wrongdata=Allusers,UN,INF,UNKN,IF

"Allusers,UN" به درست یا نادرست ارزیابی می شود، این قسمت (x) از "IF" است.
تابع و بررسی می کند که آیا اشاره گر ناشناخته است. قسمت (y) تابع "IF" تنظیم شده است
به "INF" (که به معنای بی نهایت است) و قسمت (z) تابع "UNKN" را برمی گرداند.

منطق این است: اگر (اشاره کننده == ناشناخته) سپس INF را برگردانید و در غیر این صورت UNKN را برگردانید.

اکنون می توانید از AREA برای نمایش این "داده های اشتباه" به رنگ قرمز روشن استفاده کنید. اگر ناشناخته باشد (چون
allusers شناخته شده است) سپس AREA قرمز نشان داده نمی شود. اگر مقدار INF باشد (به دلیل اشاره‌گرها
ناشناخته است) سپس AREA قرمز رنگ در آن زمان خاص در نمودار پر می شود.

AREA:allusers#0000FF:تعداد کاربر ترکیبی
AREA:wrongdata#FF0000:داده ناشناخته

یکسان مثال مفید با انباشته داده ها:
اگر در مثال قبلی از stack استفاده می‌کنید (همانطور که من انجام می‌دهم) پس مقادیر را جمع نمی‌کنید.
بنابراین، هیچ رابطه ای بین چهار مقدار وجود ندارد و شما یک واحد دریافت نمی کنید
ارزش برای آزمایش فرض کنید users3 در یک نقطه از زمان ناشناخته باشد: users1 رسم شده است،
users2 در بالای users1 انباشته شده است، users3 ناشناخته است و بنابراین هیچ اتفاقی نمی افتد،
users4 در بالای users2 انباشته شده است. به هر حال CDEF های اضافی را اضافه کنید و از آنها برای همپوشانی استفاده کنید
نمودار "عادی":

DEF:users1=location1.rrd:onlineTS1:LAST
DEF:users2=location1.rrd:onlineTS2:LAST
DEF:users3=location2.rrd:onlineTS1:LAST
DEF:users4=location2.rrd:onlineTS2:LAST
CDEF: allusers=users1,users2,users3,users4,+,+,+
CDEF:wrongdata=Allusers,UN,INF,UNKN,IF
AREA:users1#0000FF:کاربران در ts1
STACK:users2#00FF00:کاربران در ts2
STACK:users3#00FFFF:کاربران در ts3
STACK:users4#FFFF00:کاربران در ts4
AREA:wrongdata#FF0000:داده ناشناخته

اگر در یکی از users1..users4 داده ناشناخته وجود داشته باشد، AREA "wongdata" رسم می شود و
از آنجایی که از محور X شروع می شود و ارتفاع نامحدودی دارد، به طور موثر روی آن بازنویسی می شود
قطعات انباشته شده

در صورت تمایل می توانید دو خط CDEF را در یک خط ترکیب کنید (ما از "تماس دهنده ها" استفاده نمی کنیم). ولی
دلایل خوبی برای نوشتن دو CDEFS وجود دارد:

· خوانایی متن را بهبود می بخشد.

· می توان از آن در داخل GPRINT برای نمایش تعداد کل کاربران استفاده کرد.

اگر ترکیب آنها را انتخاب کردید، می‌توانید «اشاره‌کننده‌ها» را در CDEF دوم جایگزین کنید
قسمت بعد از علامت مساوی از خط اول:

CDEF:wrongdata=users1,users2,users3,users4,+,+,+,UN,INF,UNKN,IF

اگر این کار را انجام دهید، نمی توانید از GPRINT های بعدی استفاده کنید:

نظر: "تعداد کل کاربران دیده شده"
GPRINT:allusers:MAX:"حداکثر: %6.0lf"
GPRINT:allusers:MIN:"حداقل: %6.0lf"
GPRINT:allusers:AVERAGE:"میانگین: %6.0lf"
GPRINT:allusers:LAST:"جاری: %6.0lf\n"

La مثال ها از جانب la DRR گراف کتابچه راهنمای با ما


درجه سانتیگراد در مقابل درجه فارنهایت
برای تبدیل درجه سانتیگراد به فارنهایت از فرمول F=9/5*C+32 استفاده کنید

rdtool graph demo.png --title="نمودار نمودار" \
DEF:cel=demo.rrd:exhaust:AVERAGE \
CDEF:far=9,5,/,cel,*,32,+ \
LINE2:cel#00a000:"D. Celsius" \
LINE2:far#ff0000:"D. Fahrenheit\c"

این مثال DS به نام "Exhaust" را از پایگاه داده "demo.rrd" دریافت کرده و مقادیر را در
متغیر "cel". CDEF مورد استفاده به صورت زیر ارزیابی می شود:

CDEF:far=9,5,/,cel,*,32,+
1. فشار 9، فشار 5
2. تابع "تقسیم" را فشار دهید و آن را پردازش کنید
پشته در حال حاضر شامل 9/5 است
3. متغیر "cel" را فشار دهید
4. فشار تابع "ضرب" و پردازش آن
پشته در حال حاضر شامل 9/5 * cel است
5. فشار 32
6. تابع "plus" را فشار دهید و آن را پردازش کنید
پشته در حال حاضر شامل دما بر حسب فارنهایت است

تغییر دادن ناشناخته به صفر
rdtool graph demo.png --title="نمودار نمودار" \
DEF:idat1=interface1.rrd:ds0:AVERAGE \
DEF:idat2=interface2.rrd:ds0:AVERAGE \
DEF:odat1=interface1.rrd:ds1:AVERAGE \
DEF:odat2=interface2.rrd:ds1:AVERAGE \
CDEF:agginput=idat1,UN,0,idat1,IF,idat2,UN,0,idat2,IF,+,8,* \
CDEF:aggoutput=odat1,UN,0,odat1,IF,odat2,UN,0,odat2,IF,+,8,* \
AREA:agginput#00cc00:Input Aggregate \
LINE1:aggoutput#0000FF:مجموعه خروجی

این دو CDEF از چندین تابع ساخته شده اند. این کمک می کند که آنها را هنگام مشاهده چه چیزی تقسیم کنید
انجام می دهند. از اولین CDEF شروع می کنیم:

idat1,UN --> a
0 --> ب
idat1 --> ج
اگر (الف) سپس (ب) در غیر این صورت (ج)

بنابراین اگر درست باشد که "idat0" برابر "UN" است، نتیجه "1" است. اگر نه، اصل است
مقدار "idat1" دوباره در پشته قرار می گیرد. اجازه دهید این پاسخ را "د" بنامیم. فرآیند است
برای پنج آیتم بعدی روی پشته تکرار می شود، به همین صورت انجام می شود و به پاسخ باز می گردد
"h". بنابراین پشته به دست آمده "d,h" است. عبارت ساده شده است
"d,h,+,8,*" و اکنون به راحتی می توان دید که "d" و "h" را جمع کرده و عدد را ضرب می کنیم.
نتیجه با هشت

نتیجه نهایی این است که ما "idat1" و "idat2" را اضافه کرده‌ایم و در این فرآیند به طور موثری انجام می‌دهیم
مقادیر ناشناخته را نادیده گرفت. نتیجه در هشت ضرب می شود، به احتمال زیاد تبدیل بایت در ثانیه
به بیت/ثانیه

ابدیت نسخه ی نمایشی
rrdtool graph example.png --title="INF demo" \
DEF:val1=some.rrd:ds0:AVERAGE \
DEF:val2=some.rrd:ds1:AVERAGE \
DEF:val3=some.rrd:ds2:AVERAGE \
DEF:val4=other.rrd:ds0:AVERAGE \
CDEF:background=val4,POP,TIME,7200,%3600,LE,INF,UNKN,IF \
CDEF:wipeout=val1,val2,val3,val4,+,+,+,UN,INF,UNKN,IF \
AREA:background#F0F0F0 \
AREA:val1#0000FF:Value1 \
STACK:val2#00C000:Value2 \
STACK:val3#FFFF00:Value3 \
STACK:val4#FFC000:Value4 \
AREA:whipeout#FF0000:ناشناس

این دمو دو روش برای استفاده از بی نهایت را نشان می دهد. دیدن آنچه در آن اتفاق می افتد کمی دشوار است
"پس زمینه" CDEF.

"val4,POP,TIME,7200,%3600,LE,INF,UNKN,IF"

این RPN مقدار "val4" را به عنوان ورودی می گیرد و بلافاصله آن را از پشته حذف می کند
با استفاده از "POP". پشته اکنون خالی است، اما به عنوان یک اثر جانبی، اکنون زمان آن را می دانیم
نمونه گرفته شد. این زمان توسط تابع "TIME" در پشته قرار می گیرد.

"TIME,7200,%" مدول زمان و 7'200 (که دو ساعت است) را می گیرد. نتیجه
مقدار روی پشته عددی در محدوده 0 تا 7199 خواهد بود.

برای افرادی که تابع مدول را نمی دانند: باقیمانده بعد از یک عدد صحیح است
تقسیم اگر 16 را بر 3 تقسیم کنید، جواب 5 و باقیمانده 1 می شود.
"16,3،%" 1 را برمی گرداند.

ما نتیجه "TIME,7200,%" را در پشته داریم، اجازه دهید این را "a" بنامیم. شروع RPN
تبدیل به "a,3600,LE" شده است و این بررسی می کند که "a" کمتر یا مساوی "3600" باشد. درست است
نیمی از زمان اکنون باید بقیه RPN را پردازش کنیم و این فقط یک کار ساده است
تابع "IF" که بسته به زمان "INF" یا "UNKN" را برمی‌گرداند. این برگردانده شده است
به متغیر "پس زمینه".

CDEF دوم قبلاً در این سند مورد بحث قرار گرفته است، بنابراین ما در اینجا این کار را انجام نمی دهیم.

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

سپس داده‌ها را در بالای این پس‌زمینه رسم می‌کنید، پس‌زمینه را پوشش می‌دهد. فرض کنید
یکی از val1..val4 ناشناخته خواهد بود، در این صورت شما تنها با سه نوار انباشته می شوید
روی هم شما نمی‌خواهید این را ببینید زیرا داده‌ها فقط زمانی معتبر هستند که همه
چهار متغیر معتبر هستند به همین دلیل است که از CDEF دوم استفاده می کنید، داده ها را پوشش می دهد
با یک AREA بنابراین داده ها دیگر دیده نمی شوند.

اگر داده‌های شما می‌توانند مقادیر منفی نیز داشته باشند، باید نیمه دیگر آن را نیز بازنویسی کنید
نمودار شما این را می توان به روشی نسبتاً ساده انجام داد: آنچه شما نیاز دارید "پاک کردن" است
متغیر و علامت منفی را قبل از آن قرار دهید: "CDEF:wipeout2=wipeout,-1,*"

فیلتر داده ها
ممکن است برخی از فیلترهای پیچیده داده را انجام دهید:

فیلتر میانه: نویز شات را فیلتر می کند

DEF:var=database.rrd:traffic:AVERAGE
CDEF:prev1=PREV(var)
CDEF:prev2=PREV(prev1)
CDEF:median=var,prev1,prev2,3,SORT,POP,EXC,POP
LINE3:median#000077:filtered
LINE1:prev2#007700:'داده خام'

مشتق:

DEF:var=database.rrd:traffic:AVERAGE
CDEF:prev1=PREV(var)
CDEF:time=var،POP،TIME
CDEF:prevtime=PREV(زمان)
CDEF:derivate=var,prev1,-,time,prevtime,-,/
LINE3:derivate#000077:اشتقاق
LINE1:var#007700:'داده خام'

خارج of ایده ها برای اکنون


این سند از سوالاتی که توسط خودم یا افراد دیگر پرسیده شده است ایجاد شده است
لیست پستی RRDtool لطفاً اگر در آن خطایی پیدا کردید یا مشکلی دارید به من اطلاع دهید
درک آن اگر فکر می کنید باید اضافه شود، به من ایمیل بزنید:
<[ایمیل محافظت شده]>

یاد آوردن: نه باز خورد برابر است نه تغییرات!

با استفاده از خدمات onworks.net از cdeftutorial آنلاین استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

  • 1
    فایر فاکس
    فایر فاکس
    Firebird RDBMS ویژگی های ANSI SQL را ارائه می دهد
    و روی لینوکس، ویندوز و اجرا می شود
    چندین پلتفرم یونیکس امکانات
    همزمانی و عملکرد عالی
    & قدرت...
    Firebird را دانلود کنید
  • 2
    KompoZer
    KompoZer
    KompoZer یک ویرایشگر HTML wysiwyg است که از آن استفاده می کند
    پایگاه کد موزیلا کامپوزر مانند
    توسعه Nvu متوقف شده است
    در سال 2005، KompoZer بسیاری از باگ ها را برطرف کرد و
    اف می افزاید...
    دانلود KompoZer
  • 3
    دانلود مانگا رایگان
    دانلود مانگا رایگان
    دانلودر رایگان مانگا (FMD) یک برنامه است
    برنامه متن باز نوشته شده در
    Object-Pascal برای مدیریت و
    دانلود مانگا از وب سایت های مختلف
    این یک آینه است...
    دانلود رایگان مانگا دانلود
  • 4
    اتبوتین
    اتبوتین
    UNetbootin به شما این امکان را می دهد که بوتیبل ایجاد کنید
    درایوهای USB زنده برای اوبونتو، فدورا و
    سایر توزیع های لینوکس بدون
    رایت سی دی روی ویندوز، لینوکس و
    و ...
    UNetbootin را دانلود کنید
  • 5
    Dolibarr ERP - CRM
    Dolibarr ERP - CRM
    Dolibarr ERP - CRM یک ابزار آسان برای استفاده است
    بسته نرم افزاری منبع باز ERP و CRM
    (با یک سرور وب php یا به عنوان اجرا شود
    نرم افزار مستقل) برای مشاغل،
    پایه های ...
    دانلود Dolibarr ERP - CRM
  • 6
    SQuirreL SQL مشتری
    SQuirreL SQL مشتری
    SQuirreL SQL Client یک SQL گرافیکی است
    مشتری نوشته شده در جاوا که اجازه می دهد
    برای مشاهده ساختار یک JDBC
    پایگاه داده سازگار، داده ها را در آن مرور کنید
    جداول...
    دانلود SQuirreL SQL Client
  • بیشتر "

دستورات لینوکس

Ad