مقالات
Prometheus

Prometheus و جمع‌آوری پارامترها‌ی یک سرویس ابری

Prometheus (پرومتئوس) یک نرم‌افزار رایگان و متن‌باز است که به عنوان سیستم مانیتورینگ رویداد (event monitoring) و هشدار استفاده می‌شود. Prometheus رکوردهای بلادرنگ متریک‌ها را در دیتابیس‌های سری‌زمانی ذخیره می‌کند. پرومتئوس از Http pull model (مدلی که در آن درخواست برای دیتا از سمت کلاینت (در این‌جا Prometheus) آغاز می‌شود)، کوئری‌های منعطف و هشدار بلادرنگ استفاده می‌کند. این پروژه با زبان Go نوشته شده است.

تاریخچه

 Prometheus توسط SoundCloud در اوایل سال ۲۰۱۲ توسعه یافت، زمانی که این کمپانی متوجه شد که متریک‌ها و ابزار‌های مانیتورینگی (StatsD ،Graphite و …) که در اختیار دارند به حد کافی کارآمد نیستند. آن‌ها نیازهای مشخصی داشتند که Prometheus برای پاسخگویی به این نیازها ساخته شد: یک مدل چند بعدی دیتا (multi-dimensional data)، با قابلیت استفاده‌ی آسان، با کالکشن دیتای مقیاس‌پذیر و یک زبان کوئری قدرتمند.

Prometheus از سال ۲۰۱۳ در SoundCloud مورد استفاده قرار گرفت و اولین اعلان عمومی آن در سال ۲۰۱۵ اتفاق افتاد. پروژه از ابتدا به صورت متن‌باز آغاز شد و توسط Docker و Boxever شروع به استفاده شد. Prometheus 1.0  در سال ۲۰۱۶ و نسخه‌‌ی Prometheus 2.0 در نوامبر ۲۰۱۷ منتشر شد.

معماری

یک پلتفرم مانیتورینگ با استفاده از ابزارهای مختلفی شکل می‌گیرد:

  • Exporters: صادرکننده‌ها بر روی هاست مانیتور شونده ران شده و متریک‌های محلی را صادر می‌کنند تا Prometheus بتواند آن‌ها را جمع‌آوری کند.
  • Prometheus برای مرکزی کردن و ذخیره کردن متریک‌ها و تحریک هشدار بر پایه ی متریک‌ها.
  • Alertmanager برای مدیریت و ارسال هشدارها.
  • Grafana برای ساخت داشبورد
  • PromQL یک زبان کوئری که برای ساخت هشدارها و جست‌و‌جوی متریک‌ها استفاده می‌شود.

فرم ذخیره‌سازی داده

دیتای Prometheus به فرم متریک ذخیره می‌شود. هر متریک یک name دارد که برای آدرس‌دهی و کوئری استفاده می‌شود. هر متریک را می‌توان با هر تعداد دلخواه key=value برچسب زد. این برچسب‌ها می‌تواند حاوی اطلاعاتی باشد که از data source (سرور میزبان که داده ها را صادر می‌کند) می‌آیند و یا اطلاعات قابل تفکیک دیگر اپلیکیشن شامل HTTP status code (برای متریک های که مربوط به HTTP responses است)، متد کوئری و …

علت اصلی چند بعدی (multidimensional) بودن مدل دیتای Prometheus، همین توانایی تعیین برچسب‌ها ی دلخواه و کوئری بلادرنگ بر اساس این برچسب‌هاست.

Prometheus دیتا رو به فرم time series ذخیره می‌کند. سری‌های زمانی از طریق مدل Pull ساخته می‌شوند: سرور Prometheus، لیست datasource ها (یا همان صادرکننده‌ها )را در تناوب‌های مشخص، برای نمونه‌برداری (polling frequency) جست و جو می‌کند.

هر صادرکننده value ی مربوط به متریک‌های خودش را در endpoint ای که توسط Prometheus کوئری می‌شود، ارائه می‌دهد. Prometheus تعدادی مکانیسم برای تشخیص خودکار منابعی که باید از آن‌ها به عنوان datasource استفاده کند، دارد.

PromQL – Prometheus Query Language

Prometheus زبان جست‌و‌جوی مختص به خود یعنی PromQL را دارد که امکان انتخاب و جمع‌آوری دیتا را فراهم می‌کند. PromQL به صورت مشخص برای کار با دیتابیس سری‌زمانی ساخته شده است و بنابراین عملیات‌های جست‌وجوی زمانی را فراهم می‌کند.

انواع داده در Prometheus

Prometheus چهار تایپ مشخص برای متریک‌ها دارد:

Gauge

Counter

Histogram

Summary 

سیستم مانیتورینگ و هشدار

تنظیمات هشدارها در Prometheus تعریف می‌شود و این تنطیمات، شرایطی را تعریف می‌کنند که باید در بازه‌ی مشخصی ادامه‌‌دار شوند تا یک هشدار تحریک شود. وقتی یک هشدار تحریک می‌شود این هشدار به سرویس Alertmanager ارسال می‌شود. با استفاده از Alertmanager می‌توان هشدار را بی‌صدا و یا به ایمیل،‌ slack و سرویس‌های نوتیفیکیشن ارسال کرد.

داشبورد

پرومتئوس به عنوان یک راه‌حل برای داشبورد در نظر گرفته نمی‌شود. اگرچه می توان از آن برای ترسیم پرس‌و‌جوهای خاص استفاده کرد، اما یک راه حل داشبورد کامل نیست و برای ایجاد داشبورد باید به Grafana وصل شود. این اتصال به دلیل پیچیدگی نصب اضافی به عنوان یک نقطه ضعف Prometheus ذکر می‌شود.