فناوریهای زیرساخت مدرن بهسرعت در حال تغییرند. بههمین خاطر، کنترل و نگهداری سیستمهای پیچیده میتواند به یکی از چالشبرانگیزترین وظایف بدل شود. و دقیقا برای حل همین چالش است که Prometheus به میدان میآید!
Prometheus یک سیستم نظارت و هشداردهی متنباز است که بهخاطر تواناییهای زیاد و سهولت استفاده، بسیار محبوب شده است.
Prometheus چیست؟
Prometheus یک سیستم مانیتورینگ متنباز و دیتابیسی برای دادههای سری-زمانی (Time series) است.
این سیستم، ابتدا در سال ۲۰۱۲ در شرکت SoundCloud توسعه یافت و پس از آن در سال ۲۰۱۵ به صورت متنباز منتشر شد. Prometheus برای جمعآوری متریکها از منابع مختلفی همچون سیستمها، اپلیکیشنها و سرویسها طراحی شده است . این سیستم برای تحلیل و واکنش به متریکهای مختلف از یک زبان کوئری قدرتمند و یک سیستم هشداردهنده استفاده میکند.
متریک چیست؟
متریکها (metrics) سنجههای عددی هستند. سریهای زمانی (Time series) به تغییرات ثبت شده در طول زمان گفته میشود. نوع متریکهایی که اندازهگیری میشود، به برنامه مورد نظر و کاربرد خاص آن وابسته است. به عنوان مثال، در یک وبسرور ممکن است زمان پاسخ درخواستها به تعداد کانکشنها یا تعداد کوئریها فعال و… بستگی داشته باشد.
متریکها نقش مهمی در درک نحوه عملکرد برنامه شما ایفا میکنند. فرض کنید یک برنامه وب را اجرا میکنید و متوجه میشوید که برنامه شما کند است. برای بررسی دلیل این اتفاق، نیاز به برخی اطلاعات دارید. به عنوان مثال، برنامه ممکن است زمانی که تعداد درخواستها بالا است، کند شود. اگر معیار شما، شمارش درخواستها باشد، شما میتوانید با استفاده از این متریک، دلیل را شناسایی کرده و تعداد سرورها را برای مدیریت بار افزایش دهید.
چه مشکلی سبب ایجاد Prometheus شد؟
ابزارهای مانیتورینگ سنتی برای محیطهای بومی ابری مناسب نبودند؛ چراکه محیطهای بومی ابری (Cloud Native) زیرساختهای بسیار پویا و با سرعت بالا دارند. به همین دلیل، Prometheus ایجاد شد. پرومتئوس ابزار مانیتورینگی است که سازگاری بالایی با ساختار پویای زیرساختهای مدرن دارد.
علاوه بر این، زیرساختهای بومی ابری اغلب تعداد زیادی میکروسرویس دارند که تحلیل روابط میان اجزا و سرویسهای مختلف کار دشواری است که ابزارهای مانیتورینگ سنتی از پس آن برنمیآیند.
مدل استخراج داده (pull-based) و پشتیبانی از مجموعهای گسترده از ادغامها (integrations) به Prometheus این امکان را میدهد تا متریکها را از منابع متنوعی جمعآوری کند. در حالی که قابلیتهای کوئری و هشداردهی قدرتمند آن به کاربران اجازه میدهد بهسرعت مشکلات را شناسایی و در کوتاهترین زمان ممکن به آنها پاسخ دهند.
به طور خلاصه، نیروی محرکهای که باعث ایجاد Prometheus شد، نیازمندی به یک ابزار مانیتورینگ بود که بتواند با زیرساختهای مدرن سازگار باشد.
قابلیت ارائه مانیتورینگ و هشداردهی زمانبندیشده برای محیطهای بومی ابری، آن را به انتخابی محبوب برای تیمهای DevOps در سراسر جهان تبدیل کرده است.
اجزای Prometheus
اکوسیستم Prometheus شامل چندین جزء است. البته بسیاری از این اجزا اختیاری و آپشنال محسوب میشوند:
- سرور اصلی Prometheus که دادههای سری زمانی را جمعآوری و ذخیره میکند
- کتابخانههای مشتری برای نصب برنامهها
- Push Geteway برای پشتیبانی از وظایف کوتاه مدت
- صادرکنندههای ویژه برای سرویسهایی مانند HAProxy، StatsD، Graphite و غیره
- مدیریتکننده هشدارها
- ابزارهای پشتیبانی متنوع
بیشتر اجزای پرومتئوس با زبان Go نوشته شدهاند، که این باعث شده است که ساخت و استقرار آنها بهصورت باینریهای استاتیک ساده باشد.
معماری Prometheus
این نمودار، معماری پرومتئوس و برخی از اجزای اکوسیستم آن را نشان میدهد:
Prometheus متریکها را، چه بهصورت مستقیم و چه به واسطه push gateway، جمعآوری میکند. پس از آن تمام نمونههای جمعآوری شده را به صورت لوکال ذخیره کرده و رولهایی(rule) را روی این دادهها اجرا میکند تا سریهای زمانی جدید را از دادههای موجود جمعآوری و ثبت کند و یا هشدارهایی را ایجاد کند. همچنین در این سرویس، برای بصریسازی دادههای جمعآوریشده از ابزارهایی مانند گرافانا استفاده میشود.
پرومتئوس چطور کار میکند؟
Prometheus از یک مدل (pull-based) برای جمعآوری متریکها از منابع مختلف مانند سیستمها، اپلیکیشنها و سرویسها استفاده میکند. این بدان معناست که Prometheus برای دریافت دادههای متریکها کوئریهایی بهصورت دورهای به این اهداف میزند. سپس آنها را در پایگاه داده سری زمانی خود ذخیره میکند.
Prometheus ادغامهای گستردهای را برای جمعآوری دادههای متریکها از منابع مختلف فراهم میکند. از جمله پشتیبانی از فرمتهای محبوب دادهها مانند JSON، YAML و پروتکل بافرها. پس از جمعآوری دادهها، آنها در پایگاه داده سری زمانی ذخیره میشوند که به کاربران این امکان را میدهد که به راحتی این دادهها را در طول زمان کوئری بزنند و بصریسازی کنند.
Prometheus همچنین از یک زبان کوئری قدرتمند به نام PromQL پشتیبانی میکند که به کاربران این امکان را میدهد کوئریهای پیچیده را بر روی دادههای متریکهای خود انجام دهند. PromQ از اپراتورها و توابع مختلفی برای فیلترکردن، تجمیع و دستکاری دادههای سری زمانی پشتیبانی میکند.
علاوه بر کوئری و بصریسازی دادههای متریک، Prometheus یک سیستم هشداردهی انعطافپذیر فراهم میکند. کاربران میتوانند قوانین هشدار را بر اساس متریکها و آستانههای خاص تعریف کنند. هنگامی که یک هشدار فعال میشود، Prometheus میتواند اعلانها را به انواع کانالها ارسال کند، از جمله ایمیل، Slack، PagerDuty و سایر روشها.
چه زمانی Prometheus برای سیستم شما مناسب است؟
Prometheus برای ثبت هر نوع سری زمانی عددی بهخوبی عمل میکند. این ابزار همچنین مناسب برای نظارت بر محیطهای متمرکز بر دستگاه (machine-centric) و همچنین نظارت بر معماریهای سرویسگرا بسیار پویا است. در جهانی از میکروسرویسها، قابلیت پشتیبانی از جمعآوری و کوئری دادههای چندبعدی، یک نقطه قوت ویژه است.
Prometheus برای اعتبار و اطمینان طراحی شده است تا در صورت بروز خطا، بتوان به آن رجوع کرد و بهسرعت مشکلات را تشخیص داد. هر سرور Prometheus بهصورت مستقل عمل میکند و به ذخیرهسازی شبکه یا سرویسهای ریموت دیگر وابسته نیست. در هنگامی که دیگر بخشهای زیرساختهای شما به مشکل خرده باشند، میتوانید به آن اعتماد کنید و نیازی به تنظیم زیرساخت وسیع برای استفاده از آن ندارید.
Prometheus چه زمانی مناسب نیست؟
برای Prometheus اعتبار و اتکاپذیری مهم است. شما همیشه حتی در شرایط خرابی، میتوانید به آمارهای موجود درباره سیستم خود دسترسی داشته باشید. اما اگر نیاز به دقت 100٪ دارید، مانند صورتحساب براساس هر درخواست، Prometheus گزینهای مناسب نیست. زیرا دادههای جمعآوری شده احتمالاً جزئیات کافی و کامل را ندارند. در چنین مواردی، بهترین راهحل استفاده از یک سیستم دیگر برای جمعآوری و تحلیل دادهها برای صورتحسابهاست و از Prometheus برای بقیه بخشهای مانیتورینگهای خود استفاده کنید.
ویژگیهای Prometheus
Prometheus ویژگیهای بسیاری را در اختیار کاربران قرار میدهد. این ویژگیها سرویس Prometheus را به یک ابزار نظارتی قدرتمند و انعطافپذیر برای زیرساختهای مدرن تبدیل کرده است. در ادامه ویژگیهای کلیدی Prometheus برشمرده شده است:
مبتنی بر مدل pull-based
پرومتئوس Prometheus از مدل pull-based برای جمعآوری دادههای متریک از منابع مختلف استفاده میکند. به این معنا که بهصورت دورهای از سیستمها و سرویسهای هدف برای دریافت دادههای متریک، کوئری میزند و سپس آن دادهها در پایگاه داده سری زمانی خود ذخیره میکند.
دیتابیس سری زمانی
Prometheus از یک دیتابیس سری زمانی ویژه برای ذخیره و تجزیه و تحلیل دادههای متریک استفاده میکند. این دیتابیس به کاربران این اختیار را میدهد که بهسادگی در طول زمان برای دریافت دادههای متریکها کوئری بزنیم و بصریسازی کنیم. این اتفاق باعث میشود تا درکی عمیقتر از عملکرد و سلامتی سیستمهای خود پیدا کنیم. با استفاده از این پایگاه داده، کاربران قادرند بهراحتی به سوالات خود در مورد دادههای متریکها پاسخ دهند و تحلیلهایی دقیق و جامع انجام دهند.
سیستم کوئری قدرتمند
Prometheus زبان کوئری قدرتمندی به نام PromQL ارائه میدهد که به کاربران این امکان را میدهد تا کوئریهای پیچیده را بر روی دادههای متریک خود انجام دهند. PromQL از انواع عملگرها و توابع برای فیلتر کردن، جمع آوری و دستکاری دادههای سری زمانی پشتیبانی میکند. با استفاده از PromQL، کاربران میتوانند بهسادگی دادههای متریکها را استخراج کنند، آنها را جمعآوری کنند و تحلیل کنند تا اطلاعات ارزشمندی درباره عملکرد و سلامتی سیستمهای خود بهدست آورند.
هشداردهی انعطافپذیری
Prometheus سیستم هشداردهی انعطافپذیری فراهم میکند که به کاربران امکان میدهد قوانین هشدار را بر اساس متریکها و آستانههای خاص تعریف کنند.
یکپارچگی
Prometheus ارتباطات متنوعی را برای جمعآوری دادههای متریک ها از منابع گوناگون فراهم میکند. این ابزار قالبهای محبوبی مانند JSON، YAML و پروتکلهای بوفر را پشتیبانی میکند و ارتباطاتی را برای فناوریهای محبوب مانند Kubernetes، Docker و AWS فراهم میکند. با این امکانات، Prometheus قادر است به طور موثر از منابع گوناگون دادههای متریک ها را جمعآوری کرده و در دسترس کاربران قرار دهد.
بصریسازی دادهها
Prometheus به کاربران یک رابط کاربری وب داخلی فراهم می کند که بهراحتی دادههای متریک را جستوجو و بصریسازی کنند. این رابط کاربری وب بسیار گسترده است و گزینههای متنوعی برای نمایش دادههای متریکها از جمله نمودارها، جداول و نقشه های حرارتی ارائه میدهد.
دسترسی پایدار
Prometheus حالت دسترسی پایدار را فراهم میکند که به کاربران این اجازه را میدهد که سیستم نظارتی توزیعشده با چند سرور Prometheus را راهاندازی کنند. این امر باعث میشود دادههای نظارتی همواره و حتی در صورت خطا در سرورها هم در دسترس باشند.
مزایای Prometheus
Prometheus به تیمهای DevOps و سازمانهایی که نیاز به مانیتورینگ و نگهداری زیرساختهای مدرن دارند، انواع مزایا را فراهم میکند. در زیر برخی از مزایای کلیدی آن آورده شده است:
انعطافپذیری
Prometheus ابزاری بسیار انعطافپذیر است و بهراحتی قابل سفارشیسازی است تا به نیازهای منحصربهفرد هر سازمان در زمینه مانیتورینگ پاسخ دهد. پشتیبانی از انواع ادغامها و قابلیتهای انعطافپذیر در کوئری و هشداردهی، این ابزار را برای تنظیم نیازهای خاص مانیتورینگ، آسان میکند.
مانیتورینگ بلادرنگ
Prometheus ، امکانات لحظهای و بلادرنگ را برای نظارت و هشداردهی فراهم میکند. این نکته به تیمهای DevOps این امکان را میدهد بهسرعت مشکلات را تشخیص دهند و به آنها پاسخ دهند. این مساله کمک میکند تا سیستمها داونتایم کمتری داشته باشند و بهخوبی کار کنند.
دسترسی بالا
Prometheus با فراهم کردن قابلیت دسترسی بالا این امکان را به سازمانها میدهد که یک سیستم مانیتورینگ توزیعشده با چند سرور Prometheus راهاندازی کنند. این امکان باعث میشود که دادههای مانیتورینگ همواره و حتی در صورت بروز خطا در سرورها همواره در دسترس باشند.
مصرف کم منابع
پرومتئوس بهطوری طراحی شده است تا بهرهوری منابع بسیار بالا داشته باشد و بهطور کلی به منابع کمتری، از نظر حافظه و پردازش، داشته باشد. این به این معناست که میتوان آن را بر روی گسترهای از سختافزار و زیرساختها اجرا کرد بدون اینکه منابع بیش از حد مورد نیاز مصرف شود.
سهولت استفاده
Prometheus یک رابط کاربری ساده و سرراست ارائه میدهد که کاربران را قادر میسازد بهراحتی برای دریافت دادههای متریک کوئری بزنند و آنها را بصریسازی کنند. زبان کوئری قدرتمند Prometheus – PromQL،- نیز بهراحتی قابل یادگیری و و استفاده است. همین نکته باعث میشود که کاربران با هر سطح مهارتی بتوانند از آن استفاده کنند.
قابلیت مقیاسپذیری
Prometheus مقیاسپذیری بالایی دارد و قادر است حجم بزرگی از دادههای متریکها را مدیریت کند. برای پاسخ دادن به نیازهای متغییر مانیتورینگ تعداد نمونههای این ابزار را بهراحتی میتوان کم و زیاد کرد.
متنباز
Prometheus یک ابزار متنباز است که میتوان از آن بهصورت رایگان استفاده کرد و حتی تغییراتی در آن اعمال کرد. این مسئله باعث میشود که سازمانها بهراحتی و بدون هزینههای قابل توجه شروع به کار با مانیتورینگ کنند.
به طور کلی، Prometheus مجموعهای از مزایا را فراهم میکند که آن را به یک انتخاب محبوب برای تیمهای DevOps و سازمانهایی که نیاز به مانیتورینگ و کنترل زیرساختهای مدرن دارند، تبدیل کرده است. انعطافپذیری، قابلیت مانیتورینگ بلادرنگ، قابلیت بالا برای در دسترس بودن، مصرف منابع پایین، سهولت استفاده، قابلیت مقیاسپذیری و متنباز بودن آن، آن را به یک راهکار قدرتمند تبدیل میکند.