Prometheus یک زبان پرس و جو کاربردی به نام PROMQL (زبان پرس و جو پرومتئوس) را ارائه می دهد که به کاربر اجازه می دهد داده های سری زمانی را در زمان واقعی انتخاب و جمع کند. نتیجه یک عبارت یا می تواند به عنوان یک نمودار نشان داده شود ، که به عنوان داده های جدولی در مرورگر بیان پرومتئوس مشاهده می شود ، یا توسط سیستم های خارجی از طریق API HTTP مصرف می شود.
مثال ها
این سند به عنوان مرجع منظور شده است. برای یادگیری ، ممکن است با چند مثال شروع شود.
انواع داده های زبان بیان
در زبان بیان پرومتئوس ، یک عبارت یا بیان زیر می تواند به یکی از چهار نوع ارزیابی شود:
- وکتور فوری - مجموعه ای از سری های زمانی که شامل یک نمونه واحد برای هر سری زمانی است ، همه به اشتراک می گذارند
- بردار دامنه - مجموعه ای از سری زمانی که حاوی طیف وسیعی از نقاط داده در طول زمان برای هر سری زمانی است
- SCALAR - یک مقدار نقطه شناور عددی ساده
- رشته - یک مقدار رشته ساده ؛در حال حاضر استفاده نشده
بسته به مورد استفاده (به عنوان مثال هنگام نمایش نمودار در مقابل نمایش خروجی یک عبارت) ، فقط برخی از این نوع ها به عنوان نتیجه یک عبارت مشخص شده توسط کاربر قانونی هستند. به عنوان مثال ، عبارتی که یک بردار فوری را برمی گرداند ، تنها نوع است که می توان مستقیماً گرافیکی کرد.
یادداشت هایی درباره هیستوگرام های بومی تجربی:
- مصرف هیستوگرام های بومی باید از طریق پرچم ویژگی فعال شود.
- هنگامی که هیستوگرام های بومی به TSDB (و حتی پس از غیرفعال کردن پرچم ویژگی) مصرف شدند ، هر دو بردار فوری و بردارهای دامنه ممکن است اکنون حاوی نمونه هایی باشند که شماره های نقطه شناور ساده نیستند (نمونه های شناور) اما هیستوگرام کامل (نمونه های هیستوگرام). یک بردار ممکن است حاوی ترکیبی از نمونه های شناور و نمونه های هیستوگرام باشد.
لفظات
لفظهای رشته ای
رشته ها ممکن است در نقل قول های منفرد ، نقل قول های مضاعف یا پشتی به عنوان تحت اللفظی مشخص شوند.
PromQl همان قوانین فرار را دنبال می کند. در نقل قول های یک یا دو برابر ، یک backslash یک دنباله فرار را آغاز می کند ، که ممکن است توسط A ، B ، F ، N ، R ، T ، V یا دنبال شود. شخصیت های خاص را می توان با استفاده از اکتال ( nnn) یا شش ضلعی ( xnn ، unnnn و unnnnnnnn) ارائه داد.
هیچ فرار در داخل پشتی پردازش نمی شود. بر خلاف GO ، Prometheus خطوط جدیدی را در قسمت پشتی قرار نمی دهد.
"این یک رشته است" "این موارد غیرقابل انکار است: n \ t '` اینها غیرقابل تحمل نیستند: n "" t`
لفظهای شناور
مقادیر شناور مقیاس را می توان به عنوان عدد صحیح تحت اللفظی یا شماره شناور در قالب نوشت (فضای سفید فقط برای خوانایی بهتر گنجانده شده است):
[-+]؟ ([0-9]*.؟ [0-9]+([ee] [-+]؟ [0-9]+)؟ | 0 [xx] [0-9a-fa-f]+ | [nn] [aa] [nn] | [ii] [nn] [ff])
2 3-2. 43 3. 4 e-9 0x8 f-inf nan
انتخاب کننده های سری زمانی
انتخاب کننده های بردار فوری
انتخاب کننده بردار فوری اجازه می دهد تا مجموعه ای از سری های زمانی و یک مقدار نمونه واحد را برای هر یک در یک زمان بندی مشخص (فوری) انتخاب کنید: در ساده ترین شکل ، فقط یک نام متریک مشخص شده است. این منجر به یک بردار فوری حاوی عناصر برای تمام سری های زمانی که دارای این نام متریک هستند ، منجر می شود.
این مثال تمام سریال های زمانی را که دارای نام متریک http_requests_total هستند ، انتخاب می کند:
http_requests_total
با افزودن لیست جدا شده کاما از تطبیق های برچسب در بریس های فرفری ، می توان این سری های زمانی را بیشتر فیلتر کرد (<> ).
این مثال فقط آن سری های زمانی را با نام متریک http_requests_total انتخاب می کند که دارای برچسب کار نیز در پرومتئوس است و برچسب گروه آنها روی قناری تنظیم شده است:
http_requests_total
همچنین می توان با یک مقدار برچسب منفی یا مطابقت با مقادیر برچسب در برابر عبارات منظم مطابقت داشت. اپراتورهای تطبیق برچسب زیر وجود دارد:
- =: برچسب هایی را انتخاب کنید که دقیقاً برابر با رشته ارائه شده است.
- ! =: برچسب هایی را انتخاب کنید که برابر با رشته ارائه شده نباشد.
- =~: برچسب هایی را انتخاب کنید که رشته ارائه شده را به هم وصل کنید.
- !~: برچسب هایی را انتخاب کنید که رشته ارائه شده را به هم نزنند.
مسابقات Regex کاملاً لنگر انداخته شده است. یک مسابقه env =~"foo" به عنوان env = رفتار می شود~"^foo $".
به عنوان مثال ، این همه سری زمانی HTTP_REQUESTS_TOTAL را برای محیط های مرحله بندی ، آزمایش و توسعه و روش های HTTP غیر از دریافت انتخاب می کند.
http_requests_total
برچسب های برچسب که با مقادیر برچسب خالی مطابقت دارند نیز تمام سری های زمانی را انتخاب می کنند که به هیچ وجه برچسب خاصی ندارند. امکان داشتن چندین مسابقه برای همان نام برچسب امکان پذیر است.
انتخاب کنندگان بردار یا باید یک نام یا حداقل یک تطبیق برچسب را مشخص کنند که با رشته خالی مطابقت ندارد. عبارت زیر غیرقانونی است:
در مقابل ، این عبارات معتبر هستند زیرا هر دو انتخاب کننده ای دارند که با مقادیر برچسب خالی مطابقت ندارد.
# خوب!# خوب!
با تطبیق در برابر برچسب داخلی __name__ ، می توان از برچسب های برچسب نیز در نامهای متریک استفاده کرد. به عنوان مثال ، عبارت http_requests_total معادل است. تطابق غیر از = (! = ، =~ , !~) همچنین ممکن است مورد استفاده قرار گیرد. عبارت زیر تمام معیارهایی را که دارای نامی هستند با شروع کار انتخاب می کند:
نام متریک نباید یکی از کلمات کلیدی باشد ، در ، نادیده گرفتن ، Group_left و Group_right. عبارت زیر غیرقانونی است:
on<># بد!
راه حل این محدودیت استفاده از برچسب __name__ است:
# خوب!
تمام عبارات منظم در پرومتئوس از نحو RE2 استفاده می کنند.
انتخاب کننده بردار دامنه
لفظات بردار دامنه مانند لفظات بردار فوری کار می کنند ، به جز اینکه طیف وسیعی از نمونه ها را از لحظه فعلی انتخاب می کنند. از نظر نحوی ، مدت زمان در انتهای انتخاب کننده بردار در براکت های مربعی ([]) ضمیمه می شود تا مشخص کند که مقادیر زمان باید برای هر عنصر بردار دامنه حاصل شود.
در این مثال ، ما تمام مقادیری را که در 5 دقیقه گذشته ضبط کرده ایم برای تمام سری های زمانی که دارای نام متریک HTTP_REQUESTS_TOTAL و یک برچسب شغلی روی پرومتئوس است ، انتخاب می کنیم:
http_requests_total [5m]
مدت زمان
مدت زمان به عنوان یک عدد مشخص می شود ، و بلافاصله توسط یکی از واحدهای زیر دنبال می شود:
- MS - میلی ثانیه
- s - ثانیه
- م - دقیقه
- ح - ساعت
- د - روزها - با فرض اینکه یک روز همیشه 24 ساعت داشته باشد
- W - هفته ها - با فرض یک هفته همیشه 7d
- y - سال - با فرض اینکه یک سال همیشه 365d داشته باشد
با هماهنگی می توان مدت زمان را با هم ترکیب کرد. واحدها باید از طولانی ترین تا کوتاهترین سفارش داده شوند. یک واحد معین فقط باید یک بار در مدت زمان ظاهر شود.
در اینجا چند نمونه از مدت زمان معتبر آورده شده است:
5h 1h30m 5m 10s
اصلاح کننده
اصلاح کننده افست اجازه می دهد تا زمان جبران زمان برای بردارهای فوری و دامنه فردی در یک پرس و جو را تغییر دهد.
به عنوان مثال ، عبارت زیر مقدار HTTP_REQUESTS_TOTAL 5 دقیقه در گذشته نسبت به زمان ارزیابی پرس و جو فعلی را برمی گرداند:
http_requests_total افست 5M
توجه داشته باشید که اصلاح کننده افست همیشه باید بلافاصله انتخاب کننده را دنبال کند ، یعنی موارد زیر صحیح است:
جمع (http_requests_total افست 5m) // خوب.
در حالی که موارد زیر نادرست خواهد بود:
مبلغ (http_requests_total) افست 5m // نامعتبر است.
همان آثار برای بردارهای دامنه. این نرخ 5 دقیقه ای را که HTTP_REQUESTS_TOTAL یک هفته پیش داشت ، برمی گرداند:
نرخ (http_requests_total [5m] افست 1W)
برای مقایسه با تغییرات زمانی به موقع ، یک جبران منفی را می توان مشخص کرد:
نرخ (http_requests_total [5m] افس ت-1W)
توجه داشته باشید که این اجازه می دهد تا یک پرس و جو از زمان ارزیابی خود نگاه کند.
@ اصلاح کننده
اصلاح کننده @ اجازه می دهد تا زمان ارزیابی را برای بردارهای فوری و محدوده فردی در یک پرس و جو تغییر دهد. زمان تهیه شده به اصلاح کننده @ یک جدول زمانی UNIX است و با یک لفظی شناور شرح داده شده است.
به عنوان مثال ، عبارت زیر مقدار http_requests_total را در 2021-01-04T07: 40: 00+00: 00 برمی گرداند:
http_requests_total @ 1609746000
توجه داشته باشید که اصلاح کننده @ همیشه باید انتخاب کننده را بلافاصله دنبال کند ، یعنی موارد زیر صحیح است:
جمع (http_requests_total @ 1609746000) // خوب.
در حالی که موارد زیر نادرست خواهد بود:
جمع (http_requests_total) @ 1609746000 // نامعتبر.
همان آثار برای بردارهای دامنه. این نرخ 5 دقیقه ای را که HTTP_REQUESTS_TOTAL در 2021-01-04T07: 40: 00+00: 00 داشت ، برمی گرداند:
نرخ (http_requests_total [5m] @ 1609746000)
اصلاح کننده @ از تمام نمایندگی های شناور که در بالا در محدوده INT64 توضیح داده شده است ، پشتیبانی می کند. همچنین می تواند به همراه اصلاح کننده افست که در آن جبران شده نسبت به زمان اصلاح کننده @ استفاده می شود ، صرف نظر از اینکه ابتدا اصلاح کننده باشد ، استفاده شود. این 2 نمایش داده شده نتیجه مشابهی را تولید می کنند.
# افست بعد از @ http_requests_total @ 1609746000 افست 5M # افست قبل از @ http_requests_total افست 5m @ 1609746000
علاوه بر این ، شروع () و پایان () نیز می تواند به عنوان مقادیر اصلاح کننده @ به عنوان مقادیر ویژه استفاده شود.
برای یک پرس و جو دامنه ، آنها به ترتیب شروع و پایان پرس و جو دامنه را حل می کنند و برای همه مراحل یکسان هستند.
برای یک پرس و جو فوری ، شروع () و پایان () هر دو به زمان ارزیابی برطرف می شوند.
http_requests_total @ start () نرخ (http_requests_total [5m] @ end ())
توجه داشته باشید که اصلاح کننده @ به یک پرس و جو اجازه می دهد تا از زمان ارزیابی خود نگاه کند.
زیرنویس
Subquery به شما امکان می دهد یک پرس و جو فوری را برای یک محدوده و وضوح خاص اجرا کنید. نتیجه یک زیرمجموعه یک بردار دامنه است.
- اختیاری استپیش فرض فاصله ارزیابی جهانی است.
عملگر
پرومتئوس از بسیاری از اپراتورهای باینری و جمع آوری پشتیبانی می کند. اینها در صفحه اپراتورهای بیان زبان به تفصیل شرح داده شده است.
کارکرد
پرومتئوس از چندین کارکرد برای کار بر روی داده ها پشتیبانی می کند. اینها در صفحه توابع بیان زبان به تفصیل شرح داده شده است.
نظرات
PROMQL از نظرات خط پشتیبانی می کند که از # شروع می شود. مثال:
# این یک نظر است
گودال
استحکامات
هنگامی که نمایش داده شدگان اجرا می شوند ، جدول زمانی که برای نمونه برداری از داده ها به طور مستقل از داده های سری زمانی فعلی انتخاب می شوند. این امر عمدتاً برای حمایت از مواردی مانند تجمع (جمع ، AVG و غیره) است ، جایی که چندین سری زمانی جمع شده دقیقاً به موقع تراز نمی شوند. به دلیل استقلال آنها ، پرومتئوس برای هر سری زمانی مربوطه باید در آن زمان بندی ها ارزش خود را اختصاص دهد. این کار را با گرفتن جدیدترین نمونه قبل از این زمان بندی انجام می دهد.
اگر یک ضایعات هدف یا ارزیابی قانون دیگر نمونه ای را برای یک سری زمانی که قبلاً در آن حضور داشت ، برنگردد ، آن سری زمانی به عنوان بی نظیر مشخص می شود. اگر یک هدف حذف شود ، سری زمانی که قبلاً بازگردانده شده است ، به زودی پس از آن به صورت بی نظیر مشخص می شود.
اگر یک پرس و جو در یک مهر زمانی نمونه گیری پس از علامت گذاری یک سری زمانی کهنه شده ارزیابی شود، آنگاه هیچ مقداری برای آن سری زمانی برگردانده نمی شود. اگر نمونه های جدید متعاقباً برای آن سری زمانی مصرف شوند، به طور عادی برگردانده می شوند.
اگر 5 دقیقه قبل از مهر زمانی نمونه برداری (به طور پیش فرض) نمونه ای یافت نشد، در این نقطه از زمان هیچ مقداری برای آن سری زمانی بازگردانده نمی شود. این در واقع به این معنی است که سری های زمانی در زمان هایی که آخرین نمونه جمع آوری شده آن ها قدیمی تر از 5 دقیقه است یا پس از علامت گذاری کهنه شده اند، از نمودارها «ناپدید» می شوند.
بیات بودن برای سری های زمانی که دارای مهر زمانی هستند علامت گذاری نمی شود. فقط آستانه 5 دقیقه در آن صورت اعمال خواهد شد.
اجتناب از پرس و جوهای کند و اضافه بار
اگر یک پرس و جو باید روی حجم بسیار زیادی از داده ها کار کند، ترسیم نمودار ممکن است به پایان برسد یا سرور یا مرورگر را بارگذاری کند. بنابراین، هنگام ساخت پرس و جو بر روی داده های ناشناخته، همیشه شروع به ساخت پرس و جو در نمای جدولی مرورگر عبارت Prometheus کنید تا زمانی که مجموعه نتایج معقول به نظر برسد (حداکثر صدها، نه هزاران سری زمانی). فقط زمانی که داده های خود را به اندازه کافی فیلتر یا جمع کرده اید، به حالت نمودار بروید. اگر این عبارت هنوز خیلی طول می کشد تا نمودارهای موقتی را نشان دهید، آن را از طریق یک قانون ضبط از قبل ضبط کنید.
این به ویژه برای زبان پرس و جو پرومتئوس مرتبط است، جایی که یک انتخابگر نام متریک ساده مانند api_http_requests_total می تواند به هزاران سری زمانی با برچسب های مختلف گسترش یابد. همچنین به خاطر داشته باشید که عباراتی که در بسیاری از سری های زمانی جمع می شوند، بار روی سرور ایجاد می کنند، حتی اگر خروجی فقط تعداد کمی از سری های زمانی باشد. این شبیه به چگونگی جمع کردن تمام مقادیر یک ستون در یک پایگاه داده رابطه ای است، حتی اگر مقدار خروجی فقط یک عدد باشد.
آموزش تحلیل گری...
ما را در سایت آموزش تحلیل گری دنبال می کنید
برچسب :
نویسنده : ملیکا زارعی
بازدید : 35
تاريخ : دوشنبه
5 تير
1402 ساعت: 23:55