میخواهید بدانید Prometheus چیست و چطور به شما در درک بهتر عملکرد سیستمتان کمک میکند؟ Prometheus یا پرومتئوس یکی از غولهای قدرتمند در حوزه راهکارهای مانیتورینگ متنباز است. این پلتفرم در طول سالیان متمادی، مترادف با شیوههای نظارت کارآمد، مقیاسپذیر و انعطافپذیر شده است و بهعنوان راهحلی پیشرو برای سازمانهایی که به دنبال کسب بینش از سیستمهای خود هستند، مطرح شده است. اما Prometheus چطور کار میکند و چرا باید با آن آشنا شویم؟ در این مقاله، به زبانی ساده و مختصر، به بررسی این موضوع میپردازیم که Prometheus چیست، چه مزایایی دارد و در چه شرایطی باید از آن استفاده کرد.
Prometheus چیست؟
پرومیتئوس یک سیستم متنباز برای جمعآوری دادههای اندازهگیریشده (مِتریک) و هشداردهی بر اساس آنها است. این دادهها که به صورت سریهای زمانی (time series) ذخیره میشوند، تصویری از عملکرد سیستم در طول زمان را در اختیار ما قرار میدهند. پرومیتئوس با تکیه بر این دادهها، قادر است سلامت و عملکرد سیستمها را به صورت لحظهای پایش کند و در صورت بروز هرگونه مشکل، هشدارهای لازم را صادر نماید.
یکی از ویژگیهای کلیدی پرومیتئوس، مدل دادهی چندبعدی (highly dimensional) آن است. در این مدل، هر سری زمانی با یک نام و مجموعهای از برچسبهای کلید-مقدار (key-value pair) شناسایی میشود. این برچسبها به شما این امکان را میدهند که دادههای اندازهگیریشده را به صورت دقیقتری سازماندهی کرده و تجزیه و تحلیل نمایید.
برای مثال، فرض کنید شما در حال بررسی دمای سرورهای خود هستید. به کمک برچسبها، میتوانید دما را برای هر سرور به صورت جداگانه مانیتور کنید. همچنین، میتوانید برچسبهایی مانند نوع پردازنده (CPU) یا مدل سرور را نیز اضافه کنید تا تحلیل دقیقتری از دادهها داشته باشید. این ابزار از PromQL، یک زبان کوئری قدرتمند برای استعلام دادههای سری زمانی شما استفاده میکند.
نحوه کار Prometheus چیست؟
معماری پرومیتئوس از اجزای مختلفی تشکیل شده است که با یکدیگر همکاری میکنند تا فرآیند مانیتورینگ را به صورت موثر انجام دهند. در ادامه به بررسی جزئیات بیشتر هر یک از این اجزا میپردازیم:
1. سرور پرومیتئوس (Prometheus Server):
هستهی اصلی سیستم است که وظایف زیر را بر عهده دارد:
-
- جمعآوری دادههای اندازهگیریشده از گردآورندهها (Scrapers)
- ذخیرهسازی دادهها در یک پایگاه دادهی داخلی (به طور پیشفرض از نوع TSDB)
- تجزیه و تحلیل دادهها با استفاده از PromQL
- ارائه API برای دسترسی به دادهها و متریکها
- ایجاد هشدار بر اساس قوانین تعریفشده
2. گردآورنده (Scraper):
وظیفهی جمعآوری دادههای اندازهگیریشده از منابع مختلف را بر عهده دارد. گردآورندهها میتوانند به صورت دورهای از منابع مختلف مانند سرورها، پایگاههای داده، سرویسهای ابری و exporterها دادهها را جمعآوری کنند. گردآورندهها از پروتکلهای مختلفی مانند HTTP، HTTPS و gRPC برای جمعآوری دادهها پشتیبانی میکنند.
3. exporter:
نوعی برنامهی جانبی است که برای جمعآوری دادههای اندازهگیریشده از منابع خاص مانند پایگاههای داده، سیستم عاملها و برنامههای کاربردی طراحی شده است. exporterها به گردآورندهها اجازه میدهند تا به دادههایی که به طور مستقیم در دسترس نیستند، دسترسی پیدا کنند.
4. PromQL:
PromQL یک زبان کوئری قدرتمند است که به شما این امکان را میدهد تا دادههای اندازهگیریشده را به صورت دلخواه فیلتر، تجمیع و تحلیل کنید. با استفاده از PromQL میتوانید میانگین، مجموع، انحراف معیار و سایر توابع آماری را بر روی دادهها اعمال کنید. همچنین میتوانید از PromQL برای ایجاد داشبوردهای (dashboard) سفارشی با استفاده از ابزارهایی مانند Grafana استفاده کنید.
5. Alertmanager:
یک سرویس مجزا است که برای مدیریت و ارسال هشدارها استفاده میشود. Alertmanager به شما این امکان را میدهد تا قوانین ارسال هشدار را مدیریت کنید، از ارسال هشدارهای تکراری جلوگیری نمایید و کانالهای مختلفی را برای دریافت هشدارها مانند ایمیل، پیام کوتاه و سرویسهای چت سازمانی تعریف کنید.
6. رابط کاربری (UI):
پرومیتئوس به صورت مستقیم از رابط کاربری (UI) پشتیبانی نمیکند، اما با ابزارهای دیگری مانند Grafana به خوبی ادغام میشود. Grafana یک ابزار متنباز برای ایجاد داشبوردهای (dashboard) زیبا و تعاملی است که به شما این امکان را میدهد تا دادههای جمعآوریشده توسط پرومیتئوس را به صورت نمودار، جدول و سایر فرمتهای بصری نمایش دهید.
7. ذخیرهسازی داده:
پرومیتئوس به طور پیشفرض از یک پایگاه دادهی داخلی به نام TSDB (Time Series Database) برای ذخیرهسازی دادهها استفاده میکند TSDB یک پایگاه دادهی بهینهشده برای ذخیرهسازی و پرسوجوی دادههای سری زمانی (time series) است. شما همچنین میتوانید از پایگاههای دادهی خارجی مانند InfluxDB یا Prometheus Remote Write API برای ذخیرهسازی دادهها استفاده کنید.
8. ادغام با سایر ابزارها:
پرومیتئوس به خوبی با ابزارهای دیگری مانند Grafana، Alertmanager، Loki و Thanos ادغام میشود. این ابزارها به شما این امکان را میدهند تا قابلیتهای پایش خود را گسترش دهید و از دادههای جمعآوریشده توسط پرومیتئوس بینش و insightهای ارزشمندی به دست آورید.
زبان PromQL در Prometheus چیست؟
PromQL مخفف Prometheus Query Language و به معنی “زبان کوئری پرومتئوس” است. این ابزار، ویژگیهایی دارد که به شما اجازه میدهد بتوانید دادههای سری زمانی موردنظرتان را انتخاب و جمعآوری کنید. شما با استفاده از این زبان، میتوانید دادههایتان را هر طور که نیاز دارید بخش بندی کرده و آنها را سازماندهی کنید.
PromQL در کجا استفاده میشود؟
با استفاده از زبان PromQL میتوانید از instant vectorها برای جستجوی دادهها از نقطه زمانی مشخص به بعد، کمک بگیرید. برای جستجوی دادهها در یک بازهی زمانی نیز میتوانید از range vectorها استفاده کنید. همچنین، میتوانید یک معیار اساسی مثل http_requests_total را کوئری کرده و سپس، معیارهای موردنظرتان را با استفاده از جفت key-value فیلتر کنید.
PromQL به عنوان یک زبان قدرتمند برای کوئری دادههای سری زمانی، کاربردهای متنوعی دارد که در ادامه به برخی از آنها اشاره میکنیم:
1. نظارت بر عملکرد سیستم: PromQL به طور گسترده برای نظارت بر عملکرد سیستمها و برنامهها استفاده میشود. با استفاده از PromQL، میتوانید معیارهای مختلفی مانند استفاده از CPU، حافظه، I/O و زمان پاسخگویی را جمعآوری و تجزیه و تحلیل کنید تا مشکلات عملکردی را شناسایی کرده و را برطرف کنید.
2. عیبیابی: PromQL میتواند برای عیبیابی مشکلات سیستم و برنامهها نیز مفید باشد. با استفاده از PromQL، میتوانید الگوهای غیرمعمول در دادههای خود را شناسایی کنید که ممکن است نشاندهنده وجود مشکل باشد.
3. ظرفیتسازی: این زابزار برای تخمین و برنامهریزی ظرفیت منابع سیستم نیز مفید است. با تجزیه و تحلیل دادههای تاریخی، میتوانید الگوهای استفاده از منابع را شناسایی کرده و نیازهای آینده خود را پیشبینی کنید.
4. هشداردهی: PromQL را میتوان برای ایجاد هشدار در مورد رویدادهای خاص، مانند افزایش ناگهانی استفاده از CPU یا حافظه، استفاده کرد. این امر به شما امکان میدهد مشکلات را به محض وقوع شناسایی کرده و برطرف کنید.
5. داشبوردینگ: PromQL برای ایجاد داشبوردهای بصری برای تجسم دادههای سری زمانی نیز استفاده میشود. این داشبوردها میتوانند به شما کمک کنند تا به سرعت وضعیت سیستمهای خود را درک کرده و مشکلات را شناسایی کنید.
6. ادغام با سایر ابزارها: PromQL به طور گسترده با سایر ابزارهای نظارت و تجزیه و تحلیل و همچنین ابزارهای DevOps، مانند Grafana و Alertmanager، ادغام میشود. این امر به شما امکان میدهد دادههای خود را از منابع مختلف جمعآوری کرده و آنها را در یک مکان واحد تجزیه و تحلیل کنید.
ویژگیهای کلیدی Prometheus چیست؟
ابزار Prometheus طیف وسیعی از ویژگیها را ارائه میدهد تا تیمهای کوچک تا بزرگ DevOps بتوانند فرایندهای نظارتی خود را با سهولت بیشتری انجام دهند. شما با استفاده از این ویژگیها، میتوانید عملکرد و سلامت سیستمتان را نظارت کنید.
در این قسمت، برخی از مهمترین ویژگیهای این ابزار را معرفی میکنیم:
- دادههای چند بعدی: پرومتئوس برای نمایش دادههای سریزمانی، از یک مدل دادهی چندبعدی استفاده میکند. با استفاده از این مدل، انعطافپذیری در سازماندهی و کوئری معیارها بر اساس ابعاد مختلف مانند شغل، نمونه و برچسبها فراهم شده و میتوانید تجزیه و تحلیل دقیقی از جریان دادهها داشته باشید.
- PromQL: همانطور که گفته شد، پرومتیوس از یک زبان پرس و جوی قدرتمند برای تجزیه و تحلیل دادههای سری زمانی جمعآوریشده استفاده میکند که انعطافپذیری در نظارت بر سیستمها و سرویسهای متنوع را امکانپذیر میسازد.
- قوانین هشدار: پرومتیوس به شما این امکان را میدهد تا قوانین هشدار را بر اساس شرایط مشخص تعریف کنید. اگر سیستم تشخیص دهد که یک شرط از پیش تعریف شده رعایت شده است، هشداری را ایجاد میکند و به تیمها در مورد مسائل بالقوه قبل از اینکه بر کاربران تأثیر بگذارد، اطلاع میدهد.
- بصریسازی داده از طریق یکپارچهسازی: پرومتیوس اغلب با سایر ابزارها مانند Grafana (یک پلتفرم تجزیه و تحلیل و مانیتورینگ متنباز) استفاده میشود. Grafana به کاربران امکان میدهد تا داشبوردها و گزارشهای بصری جذابی را بر اساس دادههای جمعآوریشده توسط Prometheus ایجاد کنند. علاوه بر این، Prometheus به طور یکپارچه با Kubernetes ادغام میشود و آن را به انتخابی ایدهآل برای نظارت بر محیطهای کانتینریزه تبدیل میکند.
- مقیاسپذیری و تجمیع: شما میتوانید Prometheus را در یک تنظیمات federated مستقر کرده و همزمان چندین نمونه Prometheus را با یکدیگر مدیریت کنید. با این ویژگی، مقیاسپذیری افزایش مییابد و کار با پلتفرم در معماریهای بزرگ و توزیعشده، راحتتر میشود.
ویژگیهایی که در بالا معرفی کردیم، بخش کوچکی از قابلیتهای پرومتئوس هستند. همهی این ویژگیها باعث شده که Prometheus برای نظارت بر معماریهای مدرن و بومی ابری، به گزینهای عالی تبدیل شود و کاربران با استفاده از آن بتوانند بینش عمیقی از رفتار و عملکرد سیستمشان داشته باشند.
چه زمانی باید از Prometheus استفاده کنیم؟
پرومتیوس یک ابزار متنباز بسیار قابل اعتماد است که میتواند برای نظارت بر هر بخش از برنامه شما، از جمله میکروسرویسها، استفاده شود. از آنجایی که این ابزار مستقل از فروشنده است و دارای جامعهای غنی از توسعهدهندگان و مشارکتکنندگان متنباز است، میتوانید از آن برای نظارت بر تقریباً کل برنامه خود، از جمله فرانتاند و بکاند، سرورها (مانند سرور مجازی) و سختافزار و حتی زیرساختی مانند سرویس مش استفاده کنید.
از طرف دیگر، بسیاری از ابزارهای منبعباز مانند Istio و CoreDNS دارای endpointهای پرومتئوس هستند. اگر میخواهید سرویسهایی که از HTTP endpoint استفاده نمیکنند را نظارت کنید، میتوانید از exporterها استفاده کنید.
پرومتیوس بهعنوان یک ابزار متنباز، مزایای عمده دیگری نیز دارد، این ابزار رایگان است، کد آن در گیتهاب در دسترس است و جعبه ابزار (toolkit) آن به راحتی قابل تنظیم است.
ویژگی AlertManager در این ابزار، هشدارها را قبل از ارسال دستهای از هشدارها به صورت یک اعلان، گروهبندی و حذف میکند. بدین ترتیب، شاهد هشدارهای مداوم و خسته کننده نخواهید بود.
همچنین، از آنجایی که سرورهای پرومتئوس مستقل هستند و حتی زمانی که بخشی از سیستم شما خراب باشد، به کار خود ادامه میدهد، بسیار قابل اعتماد و امن است. اگر به ابزار مانیتورینگ نیاز دارید که در زمان قطع برق یا خطای سیستمی همچنان به کار خود ادامه دهد، Prometheus مناسب شماست.
چه زمانی نباید از پرومتئوس استفاده کنیم؟
شاید این سوال برایتان پیش آمده باشد که آیا شرایطی وجود دارد که نباید از این ابزار استفاده کنیم؟
مهندسان باتجربه میدانند که استفاده از ابزارهای خوب برای پیشبرد اهداف، مورد نیاز است، اما همواره کافی نیست. پرومتئوس ابزار خوبی است؛ اما قرار نیست از آن به عنوان یک پلتفرم همهکاره برای تمام نیازهای نظارتیتان استفاده کنید و تمام نیازهایتان هم رفع شود!
در این قسمت، چند نمونه را عنوان میکنیم که بهتر است به جای این ابزار، از ابزارهای دیگری استفاده کنید. توجه داشته باشید که حتی زمانی که یک ابزار دیگر برای یک مورد استفاده مناسبتر است، همچنان میتوانید پرومتیوس را در کنار آن استفاده کنید، زیرا اغلب ابزار مناسبی برای نظارت بر یک سرویس است.
-
دخیرهسازی اطلاعات برای بلندمدت
پرومتئوس برای ذخیرهسازی طولانی مدت اطلاعات طراحی نشده است. اگر قصد ذخیرهسازی بلندمدت اطلاعات را دارید، میتوانید از یک پلتفرم مانیتورینگ یا منبع ذخیرهسازی دیگری برای این کار استفاده کنید.
-
نیاز به دقت 100%
پرومتیوس قابلیت اطمینان را بر دقت اولویت میدهد. طبق قضیه CAP، شما فقط میتوانید دو مورد از سه مورد را در یک سیستم توزیعشده داشته باشید:
- سازگاری (دقت)؛
- دسترسپذیری (قابلیت اطمینان)؛
- پارتیشنبندی (جاگذاری دادههای جمعآوریشده در سرورهای جداگانه).
از آنجایی پارتیشنبندی جزو جداییناپذیر سیستمهای توزیعشده است، انتخاب شما بین قابلیت اطمینان و دقت است. انتخاب بین این دو گزینه هم کار سختی نیست: اگر برای سیستمهایی نظیر سیستم صورت حساب به دقت 100% نیاز دارید، باید از ابزار دیگری به غیر از پرومتئوس استفاده کنید.
-
راه اندازی خودکار برای محیط
معمولا، پلتفرمهای نظارتی میتوانند سرویسها را به صورت خودکار شناسایی کرده و آنها را ابزارسازی کنند. در نتیجه، شما در عرض چند دقیقه امکان نظارت و مشاهده را خواهید داشت. در Prometheus، شما باید سرویسهای مختلفی را پیکربندی کنید که این کار شامل پیکربندی برای HTTP endpointهای خاص و راهاندازی exporterها برای سرویسهایی است که از HTTP endpointها استفاده نمیکنند. در سیستمهای توزیعشدهی بزرگ، این کار زمان زیادی میگیرد و به همین دلیل، نصب پرومتئوس و استفاده از آن گزینهی مناسبی نیست.
در چنین مواقعی، توصیه میشود که از ابزارهای نظارتی دیگری که فضای ذخیرهسازی طولانی مدت ارائه میدهند و به شما کمک میکنند تا محیط خود را به طور مکرر تنظیم کنید، استفاده کنید.
چه چیزهایی را میتوان با استفاده از promethus مانیتور کرد؟
فرانت-اند (بخش کاربری)
پرومتیوس به شما امکان مانیتورینگ معیارهای کاربردی همچون توان عملیاتی (TPS) و زمان پاسخدهی را میدهد. هم چنین، ابزاری تحت عنوان «جعبه سیاه پرومتیوس» (Prometheus blackbox exporter) قابلیت انجام بررسیهای زمان کارایی و مانیتورینگ وضعیت وبسایت را فراهم میآورد.
بک-اند (بخش سرور)
با استفاده از پرومتیوس میتوانید به مانیتورینگ پایگاههای داده، APIها و وضعیت درخواستهای HTTP در نقاط انتهایی خود بپردازید. به عنوان مثال، این ابزار امکان ردیابی معیارهای API REST نظیر تأخیر درخواست، رویدادهای لاگ و نرخ خطا در هر API را برای شما فراهم میکند. همچنین امکان مانیتورینگ برنامههای کاربردی JVM از طریق «صادرکننده JMX» (JMX Exporter) نیز با پرومتیوس وجود دارد.
سرورها
همان طور که پیشتر نیز اشاره کردیم «جعبه سیاه پرومتیوس» ابزاری برای ردیابی شاخصهای کلیدی عملکرد سرور (KPI) مانند میانگین زمان پاسخدهی است. علاوه بر این، امکان مانیتورینگ سرور و سیستمعامل آن به منظور درک میزان استفاده از CPU سرور یا میزان استفاده از هارد دیسک آن نیز وجود دارد. شایان ذکر است که ابزار «آپاچی پرومتیوس» (Apache Prometheus exporter) نیز به منظور مانیتورینگ وبسرور آپاچی قابل استفاده است.
سختافزار
Prometheus Node Exporter ابزاری برای مانیتورینگ معیارهای سختافزار و هسته (kernel) در لینوکس و سایر سیستمهای مبتنی بر یونیکس است. برخی از معیارهای سخت افزاری قابل ردیابی با این ابزار عبارتند از استفاده از CPU، استفاده از دیسک، پهنای باند شبکه و حافظه.
زیرساخت
پرومتیوس قادر به مانیتورینگ زیرساخت و برنامههای کاربردی شما در سطوح مختلف، از جمله میزبانها، خود برنامه و هر گونه کانتینر است. به عنوان مثال، میتوانید با استفاده از «صادرکننده MySQL پرومتیوس» (Prometheus MySQL exporter) عملکرد MySQL را مانیتور کرده و با هر گونه مشکلی را در پایگاه داده شناسایی کنید.
مثال دیگر، قابلیت ردیابی توان عملیاتی و زمان پاسخدهی Kafka load generator، سرویسگیرنده کلاینت کاساندرا (Cassandra client) و Kafka consumer است.
سخن پایانی
در این مقاله، به طور مفصل به این مسئله پرداختیم که Prometheus چیست و چه ویژگیها و کاربردهایی دارد. با شناخت این ابزار و استفادهی مناسب از آن، میتوانید مانیتورینگ و نظارت بر موارد مختلفی نظیر سخت افزار، فرانتاند، بکاند، زیرساختها، سرورها و غیره را به راحتی و به صورت خودکار انجام دهید.