WIUNIX ACADEMY
کاردینالیتی بالای Prometheus؛ یافتن برچسب مسئلهساز و آزمایش Recording Rule
صفحهٔ 2 از 3؛ مراحل قبلی و پیشنیازها را پیش از ادامه مرور کن.
آموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من4 مقدار قابلتغییر
برچسبی با تعداد مقادیر نامحدود را همانجا که تولید میشود اصلاح کنید
از الگوی محدود مسیر مانند /items/:id، دستههای ثابت نتیجه و فهرست بازبینیشدهٔ ابعاد استفاده کنید. هویت کاربر یا درخواست را در صورت نیاز در لاگ یا trace با قواعد حریم خصوصی نگه دارید، نه در برچسب متریک. حاصلضرب تعداد مقادیر برچسبها یک تخمین اولیه است؛ ترکیبهای واقعی را هم بسنجید چون الزاماً همهٔ آنها رخ نمیدهند.
حذف یک برچسب هنگام scrape ممکن است دو نمونه را به مجموعهٔ برچسب یکسان تبدیل کند و خطای تکرار یا ترتیب زمانی بسازد؛ labeldrop معادل sum نیست. حذف کامل متریک ناخواسته پس از بازبینی ممکن است مناسب باشد، اما ابتدا وابستگی هشدار و داشبورد را بررسی کنید. ابعاد مفید وضعیت و مسیر را که برای SLO لازماند از بین نبرید.
قدم بعدی
قاعده و آزمون را در پوشهای تازه بنویسید
پنلهای بعد محتوای فایلاند، نه فرمان خط فرمان. قاعده، job و route و status را نگه میدارد و instance را پس از محاسبهٔ نرخ هر سری کنار میگذارد. rate باید پیش از جمعزدن انجام شود تا صفرشدن شمارندهٔ هر نمونه درست تفسیر شود.
خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید
umask 077
mkdir '/tmp/academy-prom-rules' && cd '/tmp/academy-prom-rules' || exit 1
(set -C; : > rules.yaml; : > rules-test.yaml) || exit 1
${EDITOR:-vi} rules.yaml rules-test.yamlفایلهای تازه برای بازبینی آماده باشند و قواعد فعال هنوز تغییر نکرده باشند.
قدم بعدی
فقط تجمیعی را ذخیره کنید که معنایش روشن است
محدودیت گروه جلوی تولید بیمهار خروجی را میگیرد؛ رسیدن به آن خطایی برای بررسی است، نه کوتاهکردن خودکار و بیخطر نتیجه. نام خروجی باید عملیات و برچسبهای باقیمانده را بیان کند. نام سری خروجی قاعدهٔ قبلی را با معنای تازه به کار نبرید. شمارندهٔ درخواست و برچسبهای route و status باید واقعاً در برنامه وجود داشته باشند.
محتوای فایل؛ در مسیر درجشده ذخیره کنید
groups:
- name: academy-http
interval: 1m
limit: 1000
rules:
- record: job_route_status:http_requests:rate5m
expr: sum by (job, route, status) (rate(http_requests_total{job="api"}[5m]))
قاعدهٔ پیشنهادی نرخ هر نمونه را پیش از تجمیع محاسبه کند و فقط ابعاد مورد تأیید را نگه دارد.
قدم بعدی
جمع دو شمارنده و مجموعهٔ دقیق برچسبها را آزمون کنید
دادهٔ آزمون دو instance با نرخ ثابت۱ و۲ در ثانیه در بازهٔ پنجدقیقهای دارد. نتیجهٔ مورد انتظار۳ است و instance نباید در خروجی بماند. این فقط همین حالت حسابی را میسنجد؛ پیش از استفادهٔ عملیاتی، حالتهای واقعی صفرشدن شمارنده و کهنهشدن داده را هم اضافه کنید.
محتوای فایل؛ در مسیر درجشده ذخیره کنید
rule_files: [rules.yaml]
evaluation_interval: 1m
tests:
- interval: 1m
input_series:
- series: 'http_requests_total{job="api",route="/items",status="200",instance="a"}'
values: '0 60 120 180 240 300'
- series: 'http_requests_total{job="api",route="/items",status="200",instance="b"}'
values: '0 120 240 360 480 600'
promql_expr_test:
- expr: 'job_route_status:http_requests:rate5m{job="api"}'
eval_time: 5m
exp_samples:
- labels: 'job_route_status:http_requests:rate5m{job="api",route="/items",status="200"}'
value: 3
آزمون مقدار۳ و نبود برچسب instance را انتظار داشته باشد؛ نمونهٔ محدود با آزمون بار سرور اشتباه نشود.
قدم بعدی
هم نحو فایل و هم نتیجهٔ محاسبه را بررسی کنید
promtool سازگارِ نصب موجود را در پوشهٔ پیشنهادی اجرا کنید تا مسیر نسبی rule_files درست حل شود. پذیرفتهشدن نحو بهتنهایی نتیجهٔ قاعده را ثابت نمیکند. موفقیت دادهٔ آزمون هم آزمون بار سرور یا اثبات وجود متریک فرضشده در برنامه نیست. این فرمانها مسیر مستند اجرا هستند و در نگارش آموزش اجراشده اعلام نمیشوند.
خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید
cd '/tmp/academy-prom-rules' || exit 1
'/usr/local/bin/promtool' check rules rules.yaml
'/usr/local/bin/promtool' test rules rules-test.yamlبررسی نحو و آزمون رفتاری هر دو موفق شوند؛ در صورت اختلاف، پیش از انتشار علت را در ورودی و برچسبها پیدا کنید.
قدم بعدی
قاعده را از مسیر بارگذاری موجود وارد کنید
فایل پیشنهادی را بازبینی کنید و در منبع اصلی rule_files ارجاع دهید. پیکربندی کامل مورد نظر را از مسیر انتشار معمول اعتبارسنجی کنید. صرفاً برای این آموزش پایانهٔ lifecycle را فعال نکنید و سرور را دوباره راهاندازی نکنید. پس از reload معمول، سلامت قاعده و خطای محاسبه را ببینید و نتیجهٔ عبارت خام و خروجی ذخیرهشده را در زمان یکسان مقایسه کنید. اجرای دورهای قاعده ممکن است در ابتدا بازهٔ خالی ایجاد کند.
خط فرمان؛ فقط در محیطی که مجوز بررسی آن را دارید
curl --noproxy '*' --fail --silent --show-error --max-time 10 'http://127.0.0.1:9090/api/v1/rules?type=record'
curl --noproxy '*' --fail --silent --show-error --get --max-time 10 'http://127.0.0.1:9090/api/v1/query' --data-urlencode 'query=job_route_status:http_requests:rate5m{job="api"}'
curl --noproxy '*' --fail --silent --show-error --get --max-time 10 'http://127.0.0.1:9090/api/v1/query' --data-urlencode 'query=sum by(job,route,status)(rate(http_requests_total{job="api"}[5m]))'rule سالم است و نتیجه در زمان همتراز برابر است؛ فاصلهٔ اجرای دورهای قاعده و اثر آن بر زمان مشاهدهٔ داده روشن باشد است.