Prometheus چیست؟ + بررسی معماری و کاربردهای آن
پرومتئوس چیست و کجا میتوان از آن استفاده کرد؟ یکی از ابزارهایی که برای مانیتورینگ سرور استفاده میشود، Prometheus است که طراحی اوپن سورس آن باعث شده تا از پشتیبانی توسعهدهندگان برخوردار شود و قابلیتهای متمایزی را ارائه دهد. جمعآوری دادهها در پرومتئوس بهصورت خط زمانی انجام میشود و ابزاری ایدهال برای بررسی و یافتن اختلالات زیرساختی است. در این مقاله از بلاگ ابر زس میبینیم که دلیل محبوبیت Prometheus چیست و چرا امروزه استفاده از آن گسترش پیدا کرده است.
پرومتئوس چیست؟
اگر بخواهیم خیلی ساده توضیح دهیم که پرومتئوس چیست و چه کاری انجام میدهد، میتوان گفت که یک ابزار مانیتورینگ و هشدار اوپن سورس است که میتواند هر چیزی مرتبط با سرور و برنامههای آن، شامل میزان مصرف رم، پردازنده، استوریج، پهنای باند شبکه و حتی تعداد درخواستهای HTTP یک اپلیکیشن و … را جمعآوری نماید. یکی از مهمترین دلایل محبوبیت پرومتئوس این است که میتوان دادههای آن را با ابزارهای دیگر ادغام کرد. بهعنوان مثال گرافانا (Grafana) که یک ابزار گرافیکی است، میتواند معیارهای جمعآوری شده توسط پرومتئوس را نمایش دهد و کار با پرومتئوس را سادهتر نماید.
همچنین باید اشاره کنیم که با اینکه در ایران معمولا به این نرمافزار «پرومِتِئوس» میگویند، اما تلفظ صحیح آن «پرومِتیوس» است. این نرمافزار ابتدا در سال ۲۰۱۲ و برای مانیتورینگ SoundCloud ساخته شده و از آن زمان تاکنون، توسط بسیاری شرکتها و سازمانها استفاده میشود. حالا پرومتئوس (که به طور درستتر باید به آن گفت پرومتیوس) بهعنوان یک پروژه مستقل بهصورت منبع باز به فعالیت خود ادامه میدهد و علاوهبر کاربران فعال، جامعهای از توسعه دهندگان از آن پشتیبانی میکنند. کد منبع این پروژه که در Go نوشته شده و تحت مجوز Apache 2 است، در گیتهاب قابل دسترسی است.
در سال ۲۰۱۶، بنیاد the Cloud Native Computing Foundation پرومتئوس را بهعنوان دومین پروژه میزبانی شده خود (بعد از کوبرنتیز)، پذیرفت. این مسئله، به روشن شدن ساختار مدیریتی این پروژه بسیار کمک کرد. نسخه Prometheus 1.0 در جولای سال ۲۰۱۶ و نسخه Prometheus 2.0 در نوامبر ۲۰۱۷ منتشر شد.
معیارها یا متریکها در پرومتئوس بهعنوان دادههای سری زمانی (time series) جمعآوری و ذخیره میشوند. بهعبارتدیگر، اطلاعات متریک (Metric) با مُهر زمانی ثبت شده آنها، در کنار جفتهای key-value (تحت عنوان لیبلها) ذخیره میشوند. اگر بخواهیم بررسی کنیم که ویژگیهای دیگر Prometheus چیست میتوان به ارائه یک مدل داده چند بعدی، سادگی اجرای عملکردها، جمعآوری مقیاسپذیر دادهها و زبان کوئری قدرتمند آن اشاره کرد.
متریک در پرومتئوس چیست؟
قبل از این، درباره نحوه ذخیره معیارها یا همان متریک بهصورت سریهای زمانی صحبت کردیم. اما متریک در پرومتئوس چیست و به چه مؤلفهای اشاره دارد؟
متریکها، اندازهگیریهای عددی هستند و اصطلاح سری زمانی یا time series، به معنای ثبت تغییرات در طول زمان است. این که دقیقاً چه معیارهایی برای اندازهگیری وجود دارد، به برنامه موردنظر کاربر بستگی دارد. برای مثال، این معیارها در وب سرور میتواند مدتزمان درخواست (request time) باشد و یا در یک دیتابیس، میتوان تعداد اتصالات فعال، کوئریهای فعال و… را اندازهگیری کرد.
یکی از دلایل اهمیت متریکها این است که در درک روش خاص عملکرد برنامه، نقش مهمی ایفا میکنند. برای مثال، تصور کنید که در حین اجرا و استفاده از یک وب اپلیکیشن، متوجه میشوید که سرعت آن کُند شده است. در چنین شرایطی، برای پیدا کردن دلیل این کاهش سرعت لازم است به برخی اطلاعات دسترسی پیدا کنید. یکی از دلایل کاهش سرعت عملکرد وب اپلیکیشن، میتواند افزایش ناگهانی تعداد درخواستها باشد. اگر متریک مربوط به شمارش درخواست را داشته باشید، میتوانید علت را پیدا کنید و برای مدیریت بار، تعداد سرورها را افزایش دهید.
قابلیتهای پرومتئوس
حالا که میدانیم پرومتئوس چیست و چه کاربردی دارد، بیایید ببینیم که از چه امکاناتی برخوردار است. مهمترین قابلیتهای Prometheus عبارتاند از:
- دارای مدل داده چندبعدی (multi-dimensional data model) با دادههای شناسایی شده به نام متریک و key-value
- دارای گرههای سرور تکی (single server nodes) مستقل و بدون نیاز به ذخیرهسازی توزیع شده
- استفاده از یک مدل pull برای جمعآوری دادههای سری زمان روی HTTP
- پشتیبانی pushing time series ازطریق گِیتوی پشتیبانی
- یافتن و دسترسی به اهداف ازطریق کشف سرویس یا پیکربندی استاتیک
- پشتیبانی از حالتهای مختلف نمودار (graphing) و داشبورد (dashboarding)
- ارائه شده با PromQL (زبان کوئری انعطافپذیر متناسب با ابعاد موردنظر در پرومتئوس)
اجزای Prometheus
برای آن که بدانیم این نرمافزار چه قابلیتهایی دارد، مهم است که بدانیم اجزای مختلف Prometheus چیست و این اجزا چه کارهایی انجام میدهند. اکوسیستم پرومتئوس تشکیل شده از اجزای متعددی است که البته اغلب آنها را میتوانید بهصورت اختیاری استفاده کنید. این اجزا عبارتاند از:
- Prometheus Server یا سرور اصلی پرومتئوس برای ذخیره دادههای time series
- Client libraries برای اضافه کردن معیارها با چند خط کد هنگامی که بر سورس کد کنترل دارید
- Push gateway برای پشتیبانی از جابهای کوتاهمدت که زمان آنها به قدری کوتاه است که به پرومتئوس اجازه جمعآوری دادهها را نمیدهد.
- Exporterهای ویژه برای سرویسهایی مانند HAProxy ،StatsD ،Graphite. این اکسپورترها زمانی کاربرد دارند که به سورس کد دسترسی ندارید و امکان کد زدن هم وجود ندارد. در این حالت که به سورس کد هسته لینوکس دسترسی نداریم و امکان استفاده از کتابخانه هم نیست اسکپورترها به کار میآیند.
- Alertmanager برای تعریف هشدارها بر اساس معیارهای جمعآوری شده و در نتیجه اعلام هرگونه مغایرت در این معیارها
بیشتر کامپوننتهای Prometheus با زبان برنامهنویسی Go نوشته شدهاند. همین موضوع باعث میشود ایجاد و دیپلوی آنها بهصورت باینریهای استاتیک، سادهتر باشد.
معماری پرومتئوس
معماری عملکرد کلی Prometheus، یکی دیگر از موارد مهمی است که در مقاله «پرومتئوس چیست» باید آن را بررسی کنیم. پرومتئوس، متریکها از جابهای ابزارسازی شده را، یا بهصورت مستقیم، یا ازطریق یک push gateway، برای جابهای کوتاه مدت مینویسد. سپس تمام نمونهها بهصورت محلی ذخیره شده و با اجرای قوانینی روی این دادهها، سریهای زمانی جدید از دادههای موجود جمعآوری و ضبط شده و هشدارهایی ایجاد میشود. برای نمایش دادههای جمعآوری شده، میتوان از Grafana یا سایر ابزارهای مبتنی بر API استفاده کرد.
کاربردهای پرومتئوس
حالا که میدانیم قابلیتهای پرومتئوس چیست و معماری عملکردی آن به چه صورتی طراحی شده است، میتوان کاربردهای آن را بررسی کرد. مهمترین کاربردهای Prometheus عبارت است از:
- میتوان از آن برای ضبط هر time series عددی استفاده کرد.
- هم برای فرایندهای نظارت ماشین محور و هم برای مانیتورینگ معماریهای سرویسمحورِ بسیار داینامیک و پویا، گزینه مناسبی است.
- پرومتئوس برای جمعآوری دادههای چندبعدی و کوئریها در دنیای مایکروسرویسها میتواند مفید باشد.
- پرومتئوس کاملاً قابلاطمینان است و میتوان بهعنوان یک سیستم تشخیص مشکلات و اختلال برای زمانی که حتی قطعی برق وجود داشته باشد، از آن استفاده کرد.
- مستقلبودن هر سرور پرومتئوس و وابسته نبودن آن به فضای ذخیرهسازی شبکه یا سایر سرویسهای مشابه، میتواند بسیار کمککننده باشد.
- زمانی که سایر بخشهای زیرساخت با مشکل مواجه شده، میتوان بدون نیاز به ایجاد زیرساختهای پیشرفته، از Prometheus استفاده کرد.
اگرچه در اغلب مواقع این نرمافزار انتخاب مناسبی است، اما قبل از استفاده از آن باید ببینیم که در چه شرایطی نمیتوان از پرومتئوس استفاده کرد. معمولاً اگر بهدقت بسیار بالا و محاسبات کمی پیچیدهتر برای پروژههای حجم بالا نیاز دارید، پرومتئوس انتخاب مناسبی نیست، زیرا دادههای جمعآوری شده بهوسیله آن از دقت کافی برخوردار نیستند. در چنین مواقعی، بهتر است ابزارهای دیگری را برای جمعآوری و آنالیز دادههای خود استفاده کنید و اجازه دهید که Prometheus تنها وظایف مانیتورینگ را در بخشهای دیگر انجام دهد.
جمعبندی
در این مطلب به طور کامل دیدیم که پرومتئوس چیست و چه کاربردهایی دارد. نرمافزار Prometheus بهعنوان یک ابزار مانیتورینگ و جمعآوری دادهها توسط بسیاری از شرکتها و سازمانها استفاده میشود. مهمترین کاربرد این ابزار، مانیتورینگ و نظارت روی سرور است.
ابر زَس تحت «سرویس مدیریت شده» ابزار مانیتورینگ دلخواه شما از جمله ترکیب پرومتئوس و گرافانا را همراه با خرید سرور ابری، راهاندازی کرده و تحویلتان میدهد.