prometheus

Prometheus و کاربردهای آن

Prometheus چیست؟

Prometheus یک اپلیکیشن open-source است که برای ارائه عملکرد monitoring و alerting برای محیط های مختلف از جمله Kubernetes طراحی شده است. می‌تواند metric ها را به عنوان داده‌های time-series جمع‌آوری و ذخیره کند و اطلاعات را با timestamp ثبت کند. همچنین می‌تواند label ها را جمع‌آوری و ضبط کند، که key-value pairs اختیاری هستند.

قابلیت های کلیدی Ptometheus شامل موارد زیر می باشد:

  • Multidimensional data model  – با استفاده از داده‌های time-series، که با نام metric و key-value pairs شناسایی می‌شوند.
  • PromQLیک زبان جستجوی انعطاف پذیر که می تواند از مدل داده های multi-dimensional استفاده کند.
  • No reliance on distributed storage – تمام گره های سرور منفرد مستقل باقی می مانند.
  • Pull model ء Prometheus می‌تواند داده‌های سری زمانی را با «pull» داده‌ها از طریق HTTP جمع‌آوری کند.
  • Pushing time-series data  – از طریق استفاده از یک gateway واسطه در دسترس است.
  • Monitoring target discovery – از طریق static configuration یا service discovery در دسترس است.
  • Visualizationء Prometheus انواع مختلفی از نمودارها و داشبوردها را ارائه می دهد.

Prometheus در ابتدا توسط SoundCloud در سال 2012 ایجاد شد. از زمان آغاز به کار، Prometheus به یک ابزار monitoring محبوب تبدیل شده است که توسط یک جامعه مستقل از مشارکت کنندگان پشتیبانی می شود. در سال 2016، Prometheus به بنیاد محاسبات بومی ابری (CNCF) پیوست و اکنون یک پروژه CNCF فارغ التحصیل است.

Prometheus چگونه کار می کند؟

برای دریافت metirc ها، Prometheus به یک HTTP endpoint در expose شده نیاز دارد. هنگامی که یک endpoint در دسترس است، Prometheus می‌تواند شروع به جمع‌آوری داده‌های عددی کند، آن‌ها را به‌ عنوان یک time series ضبط کند و در یک local database مناسب برای داده‌های time series ذخیره کند. Prometheus همچنین می تواند با remote storage repositories ادغام شود.

کاربران می توانند از query ها برای ایجاد times series موقت از source استفاده کنند. این series با نام ها و label های metric تعریف می شوند. query ها در PromQL نوشته می شوند، زبانی منحصر به فرد که به کاربران امکان می دهد داده های times series را در زمان واقعی انتخاب و جمع آوری کنند. PromQL همچنین می تواند به شما در ایجاد alert conditions کمک کند و در نتیجه به سیستم های خارجی مانند ایمیل، PagerDuty یا Slack اعلان می شود.

Prometheus می‌تواند داده‌های جمع‌آوری‌شده را به صورت tabular یا graph که در رابط کاربری مبتنی بر وب نشان داده شده است، نمایش دهد. همچنین می توانید از API ها برای ادغام با راه حل های third-party visualization مانند Grafana استفاده کنید.

چه چیزی را می توانید با Prometheus مانیتور کنید؟

Prometheus یک ابزار monitoring همه کاره است که می توانید از آن برای نظارت بر انواع زیرساخت ها و metric های برنامه استفاده کنید. در اینجا چند مورد استفاده رایج آورده شده است.

Service Metrics

Prometheus معمولاً برای جمع‌آوری metric های عددی از سرویس‌هایی استفاده می‌شود که 24/7 اجرا می‌شوند و امکان دسترسی به داده‌های metric از طریق HTTP endpoint را فراهم می‌کنند. این را می توان به صورت دستی یا با کتابخانه های مختلف client انجام داد. Prometheus داده ها را با استفاده از یک قالب ساده، با یک خط جدید برای هر metirc، جدا شده با کاراکترهای line feed، در معرض نمایش قرار می دهد. این فایل بر روی یک سرور HTTP منتشر شده است که Prometheus می تواند بر اساس مسیر، پورت و hostname مشخص شده، metric ها را از آن query کند و از آن scrape کند.

Prometheus همچنین می تواند برای سرویس های distributed استفاده شود که بر روی چندین host اجرا می شوند. هر اینستنس metric های خود را منتشر می کند و نامی دارد که Prometheus می تواند آن را تشخیص دهد.

Host Metrics

شما می توانید سیستم عامل را برای شناسایی زمانی که هارد دیسک سرور پر است یا اینکه سرور به طور مداوم با 100٪ CPU کار می کند، monitor کنید. می‌توانید یک exporter ویژه روی هاست نصب کنید تا اطلاعات سیستم عامل را جمع‌آوری کرده و در مکانی قابل دسترسی HTTP منتشر کنید.

Website Uptime/Up Status

Prometheus معمولاً وضعیت وب سایت را monitor نمی کند، اما می توانید از Blackbox exporter برای فعال کردن آن استفاده کنید. شما URL مورد نظر را برای query از یک endpoint مشخص می‌کنید و برای دریافت اطلاعاتی مانند response time وب‌سایت، یک بررسی uptime انجام می‌دهید. شما با استفاده از relabel_configs برای اطمینان از اینکه Prometheus از Blackbox exporter استفاده می‌کند، host هایی را که باید در فایل پیکربندی prometheus.yml query شوند، تعریف می‌کنید.

Cronjobs

برای بررسی اینکه آیا یک cronjob در بازه‌های زمانی مشخص اجرا می‌شود، می‌توانید از Push Gateway برای نمایش metric ها به Prometheus از طریق یک HTTP endpoint استفاده کنید. می توانید timestamp آخرین job موفق (یعنی یک backup job) را push کنید به Gateway و آن را با زمان فعلی در Prometheus مقایسه کنید. اگر زمان از threshold مشخص شده بیشتر شود، زمان monitor تمام می شود و یک alert را راه اندازی می کند.

چرا برای Monitor کردن Kubernetes از Prometheus استفاده کنیم؟

Prometheus یک انتخاب رایج برای monitor کردن Kubernetes است، زیرا برای یک محیط cloud-native ساخته شده است. در اینجا چندین مزیت کلیدی استفاده از Prometheus برای monitor بر Kubernetes workloads وجود دارد:

Multidimensional data model – استفاده از key-value pairs شباهتی به نحوه استفاده Kubernetes از label ها برای سازمان‌دهی infrastructure metadata ایجاد می‌کند. این شباهت تضمین می کند که داده های time series می توانند به طور دقیق توسط Prometheus جمع آوری و تجزیه و تحلیل شوند.

Accessible format and protocolsء Prometheus امکان نمایش آسان و ساده metric ها را فراهم می کند. این اطمینان حاصل می کند که metric ها برای انسان قابل خواندن هستند و می توانند از طریق استاندارد HTTP transport منتشر شوند.

Service discovery – سرور Prometheus به صورت دوره ای target ها را scrape می کند. سرویس‌ها و برنامه‌ها مجبور نیستند دائماً داده‌ها را منتشر کنند – metric ها pull می‌شوند. سرورهای Prometheus می توانند از چندین تکنیک برای discover خودکار scrape target ها استفاده کنند. برای مثال، می‌توانید سرورها را به گونه‌ای کانفیگ کنید که container metadata را فیلتر و مطابقت دهند.

Modular and highly available components – سرویس‌های composable مسئول انجام metric collection، graphical visualization، alerting و موارد دیگر هستند. هر یک از این سرویس ها از sharding و redundancy پشتیبانی می کنند.

metric

انواع Metric های Prometheus

Prometheus client libraries چهار نوع اصلی metric را ارائه می دهند. با این حال، سرور Prometheus در حال حاضر این metric ها را به عنوان انواع داده های مختلف ذخیره نمی کند. در عوض، تمام اطلاعات را در یک time series تایپ نشده مسطح می کند.

Counter

این یک cumulative metric است. این یک monotonically-increasing counter را نشان می‌دهد و مقدار آن می‌تواند با راه‌اندازی مجدد افزایش یابد یا به صفر بازنشانی شود.

موارد استفاده متعددی وجود دارد که با counter metrics مطابقت دارند. برای مثال می توانید از آن برای نمایش تعداد درخواست های ارائه شده، خطاها یا task های تکمیل شده استفاده کنید. شما بهتر است هرگز از counter برای نمایش مقادیری که ممکن است کاهش یابند، مانند تعداد running processes، استفاده کنید.

Gauge

این metric یک مقدار عددی را نشان می‌دهد که می‌تواند خودسرانه پایین و بالا برود. guage اغلب برای اندازه گیری مقادیری مانند میزان memory usage یا temperature استفاده می شود.

Histogram

یک histogram از observations، مانند مدت زمان request یا اندازه response، نمونه برداری می کند. سپس observations را در یک bucket قابل تنظیم شمارش می کند. یک histogram همچنین می تواند مجموع کل مقادیر observe شده را ارائه دهد.

Summary

یک summary می تواند observations را نمونه برداری کند، مانند مدت زمان request و اندازه response. علاوه بر این، می تواند تعداد کل observations و همچنین مجموع کل مقادیر observe شده را ارائه دهد. این می تواند quantile های قابل تنظیم را در یک sliding time window محاسبه کند.

Prometheus bestpractices

در اینجا چندین روش کلیدی برای Prometheus monitoring آورده شده است.

Choose the Best Exporter

Prometheus از exporter ها برای retrieve کردن metric ها از سیستم هایی استفاده می کند که به راحتی قابل scrape نیستند، مانند سیستم عامل های Linux یا HAProxy.ء exporter ها client librar هایی هستند که روی سیستم target مستقر شده‌اند، که metric ها را export کرده و به Prometheus ارسال می‌کنند.

در حالی که همه Prometheus exporter ها عملکرد مشابهی را ارائه می دهند، شما باید مرتبط ترین exporter را برای target خود انتخاب کنید. این می تواند موفقیت استراتژی Kubernetes monitoring شما را به شدت تحت تاثیر قرار دهد. می‌توانید درباره exporter های موجود تحقیق کنید و ارزیابی کنید که چگونه هر کدام metric های مربوط به کار شما را مدیریت می‌کنند. همچنین باید کیفیت exporter را با توجه به پارامترهایی مانند نظرات کاربران، به‌روزرسانی‌های اخیر و توصیه‌های امنیتی ارزیابی کنید.

Label Carefully

documentation های exporter های انتخابی را بخوانید و بیاموزید که چگونه metric های خود را به روشی که زمینه را فراهم می کند label گذاری کنید. بیاموزید که چگونه label گذاری ثابتی را در monitoring target های مختلف ایجاد کنید. در حالی که می توانید داده های سفارشی خود را تعریف کنید، به یاد داشته باشید که هر label که ایجاد می کنید از resource ها استفاده می کند. در مقیاس بزرگ‌تر، label های زیاد می‌تواند هزینه‌های کلی resource شما را افزایش دهد. به همین دلیل است که باید سعی کنید تا از حداکثر 10 label استفاده کنید.

Set Actionable Alerts

یک alerting strategy خوب می تواند به شما در دستیابی به monitoring موثر بر عملکرد کمک کند. ابتدا باید تعیین کنید که کدام event ها یا metric ها برای monitoring حیاتی هستند، و سپس یک threshold معقول تعیین کنید که بتواند مشکلات را قبل از اینکه بر client نهایی شما تأثیر بگذارد، شناسایی کند. در حالت ایده آل، شما باید threshold ای را تعریف کنید که باعث alert fatigue نشود. همچنین باید مطمئن شوید کهalert ها به درستی کانفیگ شده‌اند تا به موقع به تیم مربوطه برسند.

 

0 دیدگاه در “Prometheus و کاربردهای آنافزودن → خودتان

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *