پرومتئوس (Prometheus) یکی از انواع ابزارهای مانیتورینگ سرور است که به صورت منبع باز (Open-Source) بوده و داده ها را بر اساس خط زمانی (Time series) آن ها جمع آوری می کند.

Prometheus در ابتدا در Soundcloud توسعه داده شد اما اکنون توسط بنیاد محاسبات بومی ابری (CNCF) پشتیبانی می شود. این ابزار مانیتورینگ در دهه گذشته به سرعت به شهرت رسید، زیرا ترکیبی از ویژگی های خاص آن که از فضای ابری هم پشتیبانی می کنند، آن را به مجموعه مانتیورینگی ایده آل برای برنامه های امروزی تبدیل کرده است.

در این مقاله، وظیفه پرومتئوس را توضیح می‌ دهیم، نحوه ذخیره و افشای داده‌ ها را بررسی می ‌کنیم و مشخص می‌ کنیم که مسئولیت پرومتئوس دقیقا چیست؟

بخشی از محبوبیت این ابزار مربوط به قابلیت همکاری یا ادغام با سایر پلتفرم‌ های دیگر است که می ‌تواند داده ‌ها را در قالب ‌های راحتتری نمایش دهد. Prometheus معمولا در کنار Grafana استفاده می شود. Grafana یک ابزار گرافیکی است که معیارهای Prometheus را نشان می دهد و کار با آن را آسان تر می کند.

وظیفه پرومتئوس چیست؟

Prometheus داده ها یا رویدادها را در لحظه ذخیره می کند. این رویدادها می توانند هر چیز مرتبط با برنامه شما باشند، مانند میزان مصرف حافظه، استفاده از شبکه یا درخواست های ورودی. به واحد داده های جمع آوری شده "متریک" می گویند. هر معیار، یک نام و مجموعه ای از برچسب ها (Tag) دارد که می توانند برای فیلتر کردن معیارهای موجود در پایگاه داده استفاده شوند.

این معیارها، همیشه براساس یکی از این چهار نوع ابزار اصلی هستند:

  • Counter: مقدار یا ارزشی که به طور پیوسته افزایش پیدا می کند و هرگز کم یا مجدد تنظیم نمی شود.
  • Gauge: مقدار یا ارزشی که می تواند در هر زمانی به هر جهتی تغییر کند.
  • Histogram: نمونه برداری از مقادیر یا ارزش های متعدد که مجموع تمام مقادیر ذخیره شده و همچنین تعداد رویدادهای ثبت شده را ارائه می دهد.
  • Summary: همانند هیستوگرام عمل می کند اما از معیارهای قابل تنظیم برای نظارت بر کل دوره های زمانی پشتیبانی می کند.

ساختار پرومتئوس (Prometheus)

Prometheus از اجزای متعددی تشکیل شده است که هر یک از آن ها عملکرد خاصی را ارائه می کنند که برای سیستم مانیتورینگ سرور و هشدار، این ابزار حیاتی هستند. این اجزا عبارتند از:

سرور پرومتئوس:

به عنوان مغز سیستم شناخته می شود. سرور، معیارها یا داده ها را در طول خط زمانی جمع آوری و آن ها را ذخیره می کند. فرآیند جمع آوری داده ها به عنوان Scraping نامیده می شود. این داده ها را می توانید با استفاده از تگ ها فیلتر کنید و فقط معیارهای مشخصی از آن ها را بررسی کنید.

به عنوان مثال می خواهید تعداد درخواست های HTTP برای ورود به صفحات مختلف وب را بررسی کنید. یکی از روش های انجام این کار، ایجاد معیارهای متعدد است که هر کدام به یک مسیر مختلف مربوط می شوند مانند:

  • http_requests_login_total
  • http_requests_logout_total
  •  http_requests_adduser_total
  •  http_requests_comment_total

این درخواست ها مربوط به صفحه ورود، صفحه خروج، صفحه addUser و صفحه نظرات است.

اگر در شرایط خاصی نیاز دارید تا تمام درخواست های HTTP را در کوئری های وب سرور خود بررسی کنید، کار کمی دشوار می شود. در این حالت باید تمام مسیرهای برنامه وب تان را بشناسید و تمام معیارهای آن را جستجو کنید. اما با برچسب ها می توانید یک معیار واحد تنظیم کنید، مثلا http_requests_total را به همراه یک تگ "Path" به آن اضافه کنید:

http_requests_total{path="/login"{

این کار به شما کمک می کند که کل درخواست ها را صرفا با حذف تگ "path" از کوئری ها و یا افزودن آن به درخواست های مربوط به یک صفحه خاص را در قالبی که بالا توضیح دادیم جستجو کنید.

سرور Prometheus به طور فعال داده ها را از برنامه هایی که نظارت می کند در فواصل زمانی خاص جمع آوری یا Scrapes می کند. سرور پرومتئوس با انجام تمام کارهای سنگین از بار کاری کلاینت ها کم می کند، تنها کاری که کلاینت ها باید انجام دهند این است که معیارهای خود را به گونه ای نشان دهند که سرور Prometheus بتواند به آن ها دسترسی داشته باشد. 

کتابخانه های مشتری و صادرکنندگان (Client Libraries and Exporters):

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

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

اما در مواردی که کنترلی بر روی کد منبع ندارید، امکان کد زدن هم وجود ندارد. برای مثال، می خواهید اطلاعات متریکی درمورد هسته لینوکس داشته باشید. اگرچه خود هسته احتمالاً مکانیزمی برای خروجی اطلاعات متریکی دارد، اما بعید است که این داده ها در قالبی باشند که توسط Prometheus قابل درک و جمع آوری باشند. در این حالت نمی توانیم از کتابخانه استفاده کنیم زیرا به کد منبع هسته لینوکس دسترسی نداریم. در این حالت از صادرکنندگان (Exporters) استفاده می کنیم.

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

یک صادر کننده متشکل از ویژگی‌ های نرم ‌افزاری است که داده ‌های اندازه ‌گیری را تولید و یک سرور HTTP که معیارهای تولید شده را از طریق یک نقطه پایانی مشخص در دسترس قرار می ‌دهد می باشد. معیارها بر اساس فرمت خاصی که سرور Prometheus می تواند بخواند و جمع آوری کند در معرض نمایش قرار می گیرند.

ابزار مانیتورینگ پرومتئوس

Push Gateway:

اگر کاری که انجام می دهید، زمان آن به قدری کوتاه است که به پرومتئوس اجازه جمع آوری داده ها را نمی دهد، پس چطور باید معیارهای آن را جمع آوری کرد؟ 

Push Gateway در پرومتئوس دقیقا برای همین منظور استفاده می شود. این برنامه ها به جای اینکه منتظر باشند اطلاعات شان توسط Prometheus جمع آوری شود، انقدر زمان شان کوتاه است که پرومتئوس فرصت این کار نمی کند، در نتیجه آن ها را به Push Gateway ارسال می کند و از طریق آن به دست پرومتئوس می رسند. 

مدیریت هشدارها (Alertmanager):

اگرچه پرومتئوس ابزاری قوی برای شناسایی خطاها در سرور است اما اگر به سرعت این خطاها را به مدیران سرور اعلام نکند، دیگر ارزشی ندارد. Alertmanager این امکان را به شما می دهد تا هشدارها و آلارم های لازم را براساس معیارهای جمع آوری شده تعریف کنید تا در صورت وجود هرگونه مغایرت در داده های جمع آوری شده آن ها را به شما اطلاع دهد.

بصری سازی (Visualization):

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

ادغام ابزار گرافانا با پرومتئوس

با همه این توصیفات، از آنجایی که Prometheus یک پروژه منبع باز است، باید به صورت دستی هر یک از این مؤلفه ها را تنظیم کنید تا مطمئن شوید که ویژگی هایی که در بالا گفته شده است را در اختیار شما قرار می دهد. 

موارد استفاده از پرومتئوس

پرومتئوس اخیرا به عنوان یکی از ابزارهای مانیتورینگ سرور شهرت پیدا کرده است. استفاده آسان، ادغام شدن با دیگر ابزار و برنامه ها و تطبیق پذیری با دستورات، باعث محبوبیت آن در دنیای مانیتورینگ شده است. 

این ابزار با اینترنت اشیاء (IOT)، مانیتورینگ سرور ابری و هر مورد دیگری به خوبی سازگاری دارد. البته یکی از ضعف های پرومتئوس عدم توانایی در جمع آوری اطلاعات پروژه های کوتاه مدت است. هر چند Pushgateway برای رسیدگی به جمع آوری این داده ها ایجاد شده است اما خود پرومتئوس به تنهایی قادر به انجام این کار نیست.

Pushgateway به عنوان نوعی حافظه پنهان متریکی برای پروژه های کوتاه مدت عمل می کند. جدا از این نکته، باید بگوییم پرومتئوس می تواند اکثر نیازهای شما را برای مانیتورینگ سرورتان برآورده کند و با توجه به منبع باز بودنش، می توانید در صورت نیاز آن را بسته به نیازهای خود شخصی سازی کنید.

پرومتئوس چه وظایفی را نمی تواند انجام دهد؟

با توجه به همه صحبت های قبل، تقریبا می توان گفت Prometheus یک بازیکن همه فن حریف است، اما در این میان نقش هایی هم وجود دارند که قادر به انجام شان نیست. این ابزار طبق اصول مهندسی طراحی شده تا به طور دقیق تمام داده ها را جمع آوری کند. اما در کل Prometheus تضمین نمی کند که تمام داده های جمع آوری شده 100% دقیق باشند. البته این مورد برای پروژه های با حجم بالاست. اگر آمار بسیار حساسی را در سرور خود رصد می کنید پس بهتر است ابزارهای دیگر مانیتورینگ را هم بررسی کنید.

ابزار Prometheus یک ابزار همه فن حریف

سخن آخر

در ساده ترین حالت بیان، پرومتئوس یک انبار داده است که داده های مرتبط با خط زمانی را مدیریت می کند و برای نظارت بر داده های برنامه های شما در سرور استفاده می شود. 

همچنین این ابزار برای کاربرد بهتر و موثرتر می تواند با دیگر برنامه ها مانند Grafana ادغام شود تا بتواند اطلاعات را با جلوه های بصری بهتری ارائه کند. 
محبوبیت پرومتئوس به دلیل توانایی آن در کار با معیارهای سفارشی، پشتیبانی از کوئری ها و تعامل با سایر برنامه های سرور ابری است.