PMIECONF(5) File Formats Manual PMIECONF(5)

pmieconf - قواعد تعمیم‌یافته و سفارشی‌سازی‌های pmie

قالب‌های فایل pmieconf توسط ابزار pmieconf(1) به عنوان روشی برای تعمیم مجموعه‌قواعد pmie(1) استفاده می‌شوند تا بتوان آن‌ها را به‌راحتی برای سیستم‌ها و محیط‌های گوناگون پیکربندی کرد. در اینجا دو قالب فایل کاملاً متفاوت (اگرچه بسیار مرتبط) مورد بحث قرار می‌گیرند، یعنی «pmieconf-rules» و «pmieconf-pmie».

دایرکتوری $PCP_VAR_DIR/config/pmieconf حاوی اطلاعاتی درباره تمام قواعد و متغیرهای تعمیم‌یافته پیش‌فرض سیستم برای pmie است، از جمله مقادیر پیش‌فرض برای تمام متغیرها. این فایل‌ها در قالب pmieconf-rules هستند. اگرچه می‌توان فایل‌های جدید pmieconf-rules را اضافه کرد، اما فایل‌های موجود در این دایرکتوری نباید هرگز تغییر داده شوند. در عوض، از ابزار pmieconf برای تغییر مقادیر متغیرها در فایل پیکربندی pmie استفاده کنید.

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

فایل $PCP_VAR_DIR/config/pmieconf/config.pmie حاوی تنظیمات محلی سیستم برای متغیرهای قابل‌پیکربندی pmieconf است. تنظیمات متغیر در این فایل جایگزین مقادیر پیش‌فرض مشخص‌شده در $PCP_VAR_DIR/config/pmieconf/*/* می‌شوند.

تمام خطوط سفارشی‌سازی قواعد در یک مشخصات معتبر pmieconf-pmie با «//» شروع می‌شوند و در ابتدای فایل قرار دارند - این ویژگی به فایل‌های حاوی مشخصات pmieconf-pmie اجازه می‌دهد تا با موفقیت توسط pmie تجزیه شوند. یک فایل pmieconf-pmie باید همیشه خط اولی به شکل زیر داشته باشد:

// pmieconf-pmie version pmieconf_path

مقدار version مشخص می‌کند که کدام نسخه از ساختار pmieconf-pmie باید برای تجزیه این فایل استفاده شود. در حال حاضر تنها نسخه پشتیبانی‌شده 1 است. مقدار pmieconf_path مسیری را به فایل‌های pmieconf-rules مشخص می‌کند که توسط pmieconf برای تولید این فایل استفاده شده‌اند. این موضوع در صفحه راهنمای pmieconf(1) مورد بحث قرار گرفته است (گزینه -r را ببینید).

بقیه مشخصات شامل ورودی‌های تک‌خطی برای هر یک از متغیرهای تغییریافته است. ساختار هر خط به صورت زیر است:

// rule_version rule_name rule_variable = value

پارامترهای rule_version و rule_name برای شناسایی قاعده‌ای که سفارشی‌سازی باید با آن مرتبط شود استفاده می‌شوند. به دنبال این‌ها نام rule_variable (یعنی متغیر قاعده rule_name که تغییر کرده است) می‌آید که مقدار جدید value باید برای آن اعمال شود.

یک مشخصات pmieconf-pmie باید با کلمه کلیدی «end» خاتمه یابد. این کلمه توسط pmieconf برای تشخیص جایی که سفارشی‌سازی‌ها پایان می‌یابند و مؤلفه قاعده واقعی pmie آغاز می‌شود، استفاده می‌گردد.

مثال زیر یک فایل معتبر با قالب pmieconf-pmie است که توسط pmieconf تولید شده است. به منظور اعمال تغییرات دستی به گونه‌ای که توسط pmieconf حفظ شوند، به توضیحات موجود در فایل تولیدشده (در زیر) در مورد محل انجام چنین تغییراتی مراجعه کنید.

// pmieconf-pmie 1 $PCP_VAR_DIR/config/pmieconf
// 1 memory.exhausted delta = "4 minutes"
// 1 memory.exhausted enabled = yes
// 1 memory.exhausted pcplog_action = yes
// end
//
// --- START GENERATED SECTION (do not change this section) ---
//     generated by pmieconf on:  [DATESTAMP]
//
// 1 memory.exhausted
delta = 4 minutes;
some_host (
    ( avg_sample (swap.pagesout @0..9 ) ) > 0 &&
    30 %_sample swap.pagesout >= 5
) -> shell 10 min "$PCP_BINADM_DIR/pmpost Severe demand for real memory" \
        " %vpgsout/s@%h";
// --- END GENERATED SECTION (changes below will be preserved) ---

برای مشاهده نحوه عملکرد این فرایند، می‌توانید این فایل را به صورت زیر تولید کنید:

# cat - | pmieconf -f /tmp/pmieconf.out \
    -r $PCP_VAR_DIR/config/pmieconf/memory:$PCP_VAR_DIR/config/pmieconf/global
modify memory.exhausted delta "4 minutes"
modify memory.exhausted enabled yes
modify memory.exhausted pcplog_action yes
^D
#

سپس با استفاده از دستور زیر بررسی کنید که فایل تولیدشده یک فایل پیکربندی معتبر pmie است:

# pmie -C /tmp/pmieconf.out

این دستور فایل را تجزیه کرده و پس از گزارش هرگونه خطای نحوی خارج می‌شود. اکنون -C را با -v (در بالا) جایگزین کنید و عملکرد pmie را مشاهده نمایید!

یک مشخصات pmieconf-rules شامل تعدادی شیء داده‌ای مجزا است که با هم یک مشخصات کامل قاعده را تشکیل می‌دهند (توجه داشته باشید که یک مشخصات ممکن است در چندین فایل و حتی چندین زیردایرکتوری گسترده شده باشد). هر شیء باید یک رشته شناسه (identifier) و یک نوع داده (type) داشته باشد که پس از آن فهرستی (اختیاری) از ویژگی‌ها (attributeها) قرار می‌گیرد.

ساختار کلی یک شیء pmieconf-rules به صورت زیر است:

type identifier [ attribute = value ]* ;

مجموعه typeهای معتبر عبارتند از: "rule" (تعریف قاعده)، "string" (رشته دلخواه درون گیومه)، "double"، "integer"، "unsigned"، "percent" (عدد حقیقی بین 0 و 100)، "hostlist" (فهرستی از نام‌های میزبان که با فاصله جدا شده‌اند)، "instlist" (فهرستی از نام‌های نمونه معیار که با فاصله جدا شده‌اند)، و چهار نوع کنش pmie، یعنی "print"، "shell"، "alarm"، و "syslog".

نام‌های قواعد از نویسه «.» برای معرفی مفهوم گروه قاعده استفاده می‌کنند، به عنوان مثال "memory.exhausted" این قاعده را با گروه "memory" مرتبط می‌کند. pmieconf می‌تواند در سطح گروه‌های قواعد یا قواعد منفرد عمل کند. نام گروه "global" رزرو شده است و نباید برای هیچ قاعده‌ای استفاده شود.

معمولاً هنگامی که یک شیء ایجاد می‌شود، با قاعده فعلی مرتبط است. با این حال، اگر نام یک شیء با نام گروه رزروشده "global" آغاز شود، آن شیء برای همه قواعد قابل مشاهده خواهد بود.

مجموعه attributeهای معتبر عبارتند از: "help" (متن توضیحی درباره این شیء)، "modify" (مقدار value برابر با yes/no است، و مشخص می‌کند آیا pmieconf باید اجازه تغییرات را بدهد یا خیر)، "enabled" (مقدار value برابر با yes/no است، و روشن یا خاموش بودن را مشخص می‌کند - تنها برای قواعد و کنش‌ها معنادار است)، "display" (مقدار yes/no - مشخص می‌کند آیا pmieconf باید این شیء را نمایش دهد یا خیر)، "default" (مقدار value با توجه به type تعیین می‌شود و مقدار پیش‌فرض این شیء است)، و ویژگی‌های مختص اشیاء از نوع قاعده شامل "version"، "predicate" و "enumerate". ویژگی‌های "version" و "predicate" کاملاً واضح هستند ("predicate" در زمان بسط باید با یک قاعده معتبر pmie مطابقت داشته باشد)، اما "enumerate" نیاز به توضیح بیشتری دارد.

بند "enumerate" زمانی مفید است که می‌خواهید چندین قاعده مشابه pmie را از یک گزاره (predicate) واحد تولید کنید. این قابلیت بیش از همه برای تعاریف قواعدی مفید است که می‌خواهند از بند "some_inst" در زبان pmie در چندین میزبان استفاده کنند. برای اینکه یک قاعده بتواند از این‌ها با هم استفاده کند، باید مطمئن بود که فهرست نمونه‌ها در تمام میزبان‌های تحت نظارت یکسان است. از آنجا که این موضوع به ندرت صادق است، ویژگی "enumerate" به ما اجازه می‌دهد چندین قاعده تولید کنیم که بر روی متغیرهایی از نوع "instlist" یا "hostlist" بسط داده می‌شوند. این متغیرها مقدار ویژگی "enumerate" را تشکیل می‌دهند - که فهرستی از نام‌های متغیر "instlist" یا "hostlist" است که با فاصله از هم جدا شده‌اند.

اشیاء می‌توانند با استفاده از ساختار $identifier$ در تعاریف سایر اشیاء گنجانده شوند. برای درک بهتر کاربرد این مورد، به مثال زیر مراجعه کنید.

هنگامی که pmieconf در حال تولید فایل پیکربندی pmie است، به هر قاعده فعال با N کنش فعال (که در آن N > 0 است) نگاه می‌کند و رشته زیر را بسط می‌دهد:

// "version" identifier
delta = $delta$;
"predicate" -> $threshold$ $action1$ & ... & $actionN$ ;

متغیرهای delta، threshold و action به صورت سراسری (با استفاده از کلمه کلیدی "global") برای همه قواعد تعریف شده‌اند، اما البته می‌توان آن‌ها را در سطح یک قاعده منفرد یا یک گروه قاعده تغییر داد.

در ادامه مثالی از یک مشخصات pmieconf-rules آورده شده است که جنبه‌های مختلف زبان مورد بحث در بالا را نشان می‌دهد. این مثال یک قاعده ("memory.exhausted") و یک رشته ("rule") را تعریف می‌کند.

rule    memory.exhausted
        default = "$rule$"
        predicate =
"some_host (
    ( avg_sample (swap.pagesout $hosts$ @0..9 ) ) > 0 &&
    $pct$ %_sample swap.pagesout $hosts$ @0..9 >= $threshold$
)"
        enabled = yes
        version = 1
        help    =
"The system is swapping modified pages out of main memory to the
swap partitions, and has been doing this on at least pct of the
last 10 evaluations of this rule.
There appears to be insufficient main memory to meet the resident
demands of the current workload.";
string  rule
        default = "Severe demand for real memory"
        modify  = no
        display = no;

توجه داشته باشید برای اینکه قاعده بالا کامل باشد، "threshold" و "pct" نیز باید تعریف شوند - برای عبارت کامل این قاعده، به $PCP_VAR_DIR/config/pmieconf/memory/exhausted مراجعه کنید.

$PCP_VAR_DIR/config/pmieconf/*/*
قواعد تعمیم‌یافته نظارت بر منابع سیستم
$PCP_VAR_DIR/config/pmieconf/config.pmie
تنظیمات پیش‌فرض کاربر ارشد (superuser) برای قواعد نظارت بر منابع سیستم
$HOME/.pcp/pmie/config.pmie
تنظیمات پیش‌فرض کاربر برای قواعد نظارت بر منابع سیستم

pmie(1) و pmieconf(1).

PCP Performance Co-Pilot