ساخت داشبورد
پیشنیاز
برای خواندن این مستند لازم است آشنایی مختصری با متریکهای پرومتئوس و اجزای آن داشته باشید. به طور خلاصه یک تایمسری پرومتئوس به صورت زیر نمایش داده میشود:
my_metric_name{label1="Any string value",label2="value of label 2"}
- my_metric_name نام متریک مورد نظر است.
- داخل
{}
تعدادی label با مقادیر string قرار میگیرد که عمدتا به نقطه جمعآوری و جزئیات متریک اشاره میکند.
برای مطالعه دقیقتر در این مورد میتوانید به این مستند مراجعه کنید.
شناخت متریکها
فواید مشاهدهپذیر بودن سیستم برای سهولت در رفع مشکلات بر کسی پوشیده نیست. سیستمی مشاهدهپذیر نامیده میشود که وضعیت داخلی آن از بیرون توسط ابزارهای بیرونی قابل تفسیر باشد؛ صرف نظر از این که وضعیت فعلی، چقدر غیر منتظره یا خاص است.
قدم اول در راه افزایش مشاهدهپذیری سیستمی که توسعه میدهیم، شناخت درست متریکهای موجود و همچنین تولید متریک درست در صورت نیاز است. به صورت عام، برای افزایش مشاهده پذیری سیستم، پیشنهاد ما این است که دو دستورالعمل USE Method و RED Method را در نظر داشته باشید. در ادامه با هم یک مثال از مسیر پیدا کردن متریکها و اضافه کردن آنها به گرافانا طی خواهیم کرد.
چطور متریکهای موجود را پیدا کنیم؟
بعد از فعال سازی سرویس مانیتورینگ هم روش ، به صورت پیشفرض متریکهای سیستمی در اختیار شما قرار خواهد گرفت. مشابه تصویر زیر و در بخش Explore گرافانا با استفاده از Metrics browser میتوانید لیست متریکهای فعال را مشاهده کنید
فرض کنید که ما علاقه داریم مصرف CPU را برای کانتینرهای خودمان استخراج کنیم. با استفاده ازmetric browser گرافانا و یا با استفاده از گوگل به دنبال متریکهای مرتبط با CPU جستجو میکنیم و به متریک زیر میرسیم:container_cpu_usage_seconds_total
با کمی جستجو تعریف این متریک را پیدا میکنیم:
Cumulative cpu time consumed by the container in core-seconds
این متریک labelهای زیادی دارد؛ اما موارد زیر احتمالا برای ما مفید خواهد بود:
- cluster
- namespace
- pod
- container
نوع این متریک از جنس
counter
است.
یعنی یک عدد اکیدا صعودی است که در گاهی مواقع به صفر ریست میشود.
به طور معمول متریکهای از نوع
counter به _total
ختم میشوند؛
اما این یک قرارداد است و ممکن است گاهی بر خلاف این موضوع راه مشاهده کنید.
انواع کلی متریکهای پرومتئوس را میتوانید از این لینک بیشتر مطالعه کنید. همچنین برای بررسی متریکهای موجود در کوبرنتیز مشاهده این لینک کمک کننده خواهد بود.
انتخاب کوئری مناسب
پس از یافتن متریکهای مورد نظر و برای ساخت داشبورد گرافانا لازم است کوئری مناسبی متناسب با خواسته خودمان و ماهیت متریکهای مورد استفاده بنویسیم. برای آشنایی بیشتر با زبان کوئری نویسی promql و قواعد و ساختارهای مورد استفاده توصیه میشود به این مستند یا این مستند مراجعه فرمایید.
در ادامه به عنوان مثال فرض کنید میخواهیم یک کوئری بنویسیم که Memory Utilization پادها (درصد اسفاده از مموری) را برای ما نشان دهد.
فرمول ریاضی میزان درصد مصرف (Utilization) با عمل تقسیم مقدار مصرفی فعلی بر مقدار کل محاسبه میشود.
با توجه به نکته بالا برای ساخت کوئری مصرف مموری به متریک مصرف فعلی مموری کانیتنر نیاز داریم. برای این منظور متریکهای متفاوتی وجود دارد که بیان تفاوت آنها خارج از بحث این مستند است:
container_memory_working_set_bytes
container_memory_usage_bytes
همچنین مقدار کل مموری در دسترس کانتینر را میتوان از این متریک استخراج کرد:
kube_pod_container_resource_limits
با تقسیم دو متریک ذکر شده که در بازه زمانیهای مشخص میزان مصرف مموری به byte به ازای هر container از پاد مربوطه را در اختیار ما قرار میدهد.
در نظر داشته باشید که دو متریک مزبور از نوع gauge هستند و نیازی به محاسبه نرخ آنها نداریم.
در تصویر زیر نحوهی استفاده از Grafana/Explore را برای تست و تنظیم کوئری مشاهده میکنید.
(
sum(container_memory_working_set_bytes{cluster="hamravesh-c11",namespace="mynamespace", pod="mypod-697476b655-4gqhk", image!=""}) by (container)
/
sum(kube_pod_container_resource_limits{cluster="hamravesh-c11",namespace="mynamespace", pod="mypod-697476b655-4gqhk", unit="byte"}) by (container)
)
ساخت اولین پنل
از منوی گرفانا از CREATE روی dashboard کلیک کنید. صفحه جدیدی جهت ساخت داشبورد دلخواهتان ایجاد میشود.
با اضافه کردن پنل جدید , مشابه تصویر زیر ابتدا data source مورد نظر را انتخاب کنید .
سپس مشابه تصویر زیر کوئری ایجاد شده در مرحله قبل را در آن وارد کنید.
منوی سمت راست شامل تنظیماتی است که برای شخصیسازی نحوهی نمایش کوئری میتوانید استفاده کنید. به طور مثال فرض کنید میخواهیم مقدار پنل به صورت درصد نمایش داده شود. برای این کار در قسمت تنظیمات Unit مقدار Percent (0.0-1.0) را وارد میکنیم.
برای این که ناحیههای Warning و Over Utilized را به صورت نوار رنگی نمایش دهیم در قسمت thresholds مشابه تصویر زیر محدوده درصدهای مورد نظر را وارد میکنیم. سپس Show threshold را به As filled regions تغییر میدهیم.
اکنون بعد از اعمال تغییرات بالا و پنل مصرف مموری داشبورد مشابه تصویر زیر به نمایش در خواهد آمد.
اضافه کردن متغیر
پیش از این مقدار Memory Utilization برای یک (کلاستر،نیماسپیس،پاد،کانتینر) را داخل یک پنل اضافه کردیم. در ادامه با هم بررسی میکنیم که چطور میتوانیم داشبوردهایی بسازیم که فیلترهای متغیر داشته باشند. چارهی این موضوع استفاده از متغیرهای گرافانا می باشد. این قابلیت به شما امکان میدهد که با انتخاب فیلترهای مورد نظر همهی پنلهای داشبورد شما متناسب با متغیر شما فیلتر شوند و مقادیر مورد نظر شما را نمایش دهند.
برای مثال فرض کنید میخواهیم این امکان را داشته باشیم که pod مورد نظر را انتخاب کنیم تا مصرف مموری پادهای داخل آن کلاستر را مشاهده و بررسی کنیم.
برای ایجاد متغیر از طریق تنظیمات داشبورد وارد قسمت variables شده و متغیر query را مشابه تصویر زیر وارد نمایید.
label_values(kube_pod_info{cluster="my_clsuter",namespace="my_namespace"},pod)
برای اینکه کوئری بتواند از متغیرهای تعریف شده بخواند نام متغیر را مشابه تصور زیر با $ در فیلتر کوئری مورد نظر قرار میدهیم.
در این نقطه با استفاده از انتخاب متغیر pod در بالای دشبرد محتویات پنل تغییر خواهد کرد: