Prometheus چیست؟
اخیرا Prometheus به استانداردی برای نظارت یا مانیتورینگ برنامه ها در فضای فناوری تبدیل شده است. اما Prometheus دقیقا چیست؟
در طول این مقاله، برای پاسخ به این سوال، موضوعات مختلفی را بررسی خواهیم کرد، از جایی که همه چیز شروع شد، معماری آن و نحوه دقیق انجام فرایند مانیتورینگ آن. همچنین به ابزارهای مختلف که می توانند در کنار Prometheus استفاده شوند و اینکه چرا Prometheus ابزاری عالی برای نظارت بر این پلتفرم ها و برنامه ها است، خواهیم پرداخت.
با خرید سرور مجازی لینوکس پارسدِو به راحتی میتوانید Prometheus را بر روی آن نصب و پیکربندی کنید.
Prometheus چیست؟
Prometheus یک برنامه نرم افزاری رایگان است که برای نظارت بر رویداد و هشدار استفاده می شود. این معیارهای آنی را در یک پایگاه داده از نوع سری زمانی ثبت میکند که به این منظور از مدل pull در HTTP، و queryهای انعطاف پذیر و هشدار های آنی بهره می گیرد. این پروژه در Go و تحت مجوز Apache 2 نوشته شده است، و با کد منبع در GitHub موجود است. همچنین این پروژه ماحصل کارCloud Native Computing Foundation به همراه Kubernetes و Envoy است.
برای شروع به سراغ پرومتئوس خام می رویم که مطابق شکل زیر است و با نام Prometheus Expression Browser شناخته می شود:
البته Prometheus به طور معمول در کنار Grafana استفاده می شود. Grafana یک ابزار تجسم داده ها است و در اینجا داده های گرافانا همان معیارهای Prometheus هستند و به این صورت می تواند نظارت در پرومتئوس را بسیار آسان تر کند. بنابراین به طور معمول وقتی که مردم در مورد نظارت پرومتئوس خود صحبت می کنند، به خصوص وقتی صحبت از محیط تجسمی می شود، چیزی شبیه به عکس زیر مد نظر است:
Prometheus در سال 2012 در SoundCloud به عنوان یک پروژه متن باز به کار گرفته شد، درست پس از آنکه متوجه شدند که معیارها و ابزارهای نظارتی Graphite و StatsD که در آن زمان از آنها استفاده می کردند برای نیازهای نظارتی آنها کافی نبود. آنها با الهام از ابزار نظارتی Borgmon (که در آن زمان در گوگل استفاده میشد)، نیازهای خاصی را شناسایی کردند که برای اهداف نظارتی خود بسیار مهم بود.
به عنوان مثال، آنها به مواردی مانند: یک مدل داده چند بعدی، سادگی عملیاتی، مجموعه داده های مقیاس پذیر و یک زبان query قدرتمند نیاز داشتند. آنها Prometheus را ساختند تا همه این ویژگی ها را در یک ابزار واحد در بر بگیرد.
ابزار به دست آمده آنقدر موفق شد که در سال 2016 به عنوان دومین پروژه، پس از Kubernetes، در بنیاد محاسبات CloudNative پذیرفته شد.
معماری پرومتئوس
یک پلتفرم نظارت معمولی با Prometheus شامل ابزارهای زیر است:
- صادرکنندگان متعددی که معمولاً روی میزبان نظارت شده اجرا میشوند تا معیارهای محلی را صادر کنند.
- پرومتئوس برای متمرکز کردن و ذخیره معیارها (metrics)
- Alertmanager برای فعال کردن هشدارهای بر پایه metricها
- Grafana برای راه اندازی داشبوردها
- PromQL زبان Query است که برای ایجاد داشبورد و هشدار استفاده می شود.
فرمت ذخیره داده
دادههای Prometheus به شکل metric ذخیره میشوند به طوری که هر متریک اسمی برای خودش دارد که به منظور ارجاع و پرس و جو از آن استفاده میشود. هر متریک را می توان با تعداد دلخواهی از زوجهای key=value مشخص کرد که به آنها برچسب یا Label نیز می گویند. برچسبها میتوانند شامل اطلاعات مربوط به منبع داده (که دادهها از کدام سرور میآیند) و سایر اطلاعات تفکیک خاص برنامه مانند کد وضعیت HTTP(برای metricهای مربوط به پاسخهای HTTP) متدهای Query (Get vs POST)، endpoint و غیره باشد.
توانایی تعیین فهرست دلخواه از برچسب ها و query های آنی بر اساس آنها، دلیلی است که مدل داده پرومتئوس را چند بعدی می نامند.
Prometheus داده ها را به صورت محلی روی دیسک ذخیره می کند، که به ذخیره سازی سریع داده ها و جستجوی سریع کمک می کند. همچنین امکان ذخیره metricها در ذخیره سازی از راه دور وجود دارد.
جمع آوری داده ها
پرومتئوس داده ها را در قالب سری های زمانی (Time Series) جمع آوری می کند. سریهای زمانی از طریق یک pull model ساخته میشوند:
سرور Prometheus فهرستی از منابع داده (گاهی اوقات exporters نامیده میشود) را در یک فرکانس خاص جستجو میکند. هر یک از منابع داده با مقادیر فعلی metricهای آن منبع داده در endpoint همخوانی دارد. سرور Prometheus سپس داده ها را در منابع داده جمع می کند. سرور پرومتئوس تعدادی مکانیزم برای کشف خودکار منابعی دارد که باید از آنها به عنوان منابع داده استفاده کند.
هشدارها و مانیتورینگ
پیکربندی برای هشدارها را می توان در Prometheus مشخص کرد به طوری که شرایطی را مشخص کند که باید برای مدت زمان خاصی باقی بماند تا یک هشدار فعال شود. هنگامی که هشداری فعال شود، به سرویس Alertmanager ارسال می شود. Alertmanager می تواند برنامه ای برای خاموش کردن هشدارها و همچنین ارسال آنها به ایمیل،Slack یا سرویس های اطلاع رسانی مانند PagerDuty داشته باشد.
برخی دیگر از سیستمهای پیامرسان مانند Microsoft Teams را میتوان با استفاده از گیرنده Webhook Alertmanager به عنوان مکانیزمی برای ادغام خارجی تنظیم کرد. همچنین میتوان از Prometheus Alerts برای دریافت مستقیم هشدارها در دستگاههای اندرویدی حتی بدون نیاز به پیکربندی هدف در Alert Manager استفاده کرد.
داشبوردها
Prometheus به عنوان یک راهکار ارائه داشبورد در نظر گرفته نشده است. اگرچه می توان از آن برای ترسیم queryهای خاص استفاده کرد، اما یک راهکار داشبورد کامل نیست و برای تولید داشبورد باید به ابزاری مانند Grafana متصل شود. این موردی است که به دلیل پیچیدگی در راه اندازی به عنوان یک نقطه ضعف ذکر شده است.
Visualization
metricهای جمع آوری شده توسط Prometheus به صورت محلی در یک پایگاه داده سری زمانی ذخیره می شوند.
با کمک Prometheus Query Language (PromQL)، کاربر می تواند داده های سری زمانی موجود را در آن واحد انتخاب و جمع آوری کند. نتیجه این می تواند به صورت نمودار یا داده های جدولی در Prometheus Expression Browser نشان داده شود یا برای تغذیه یک ابزار تجسم خارجی با استفاده از یک API HTTP به کار گرفته شود. ابزار خارجی انتخابی برای نمایش و Visualization پرومتئوس، Grafana نام دارد.
در آینده بسیار بیشتر از پرومتئوس و ابزارهای مرتبط با آن خواهیم شنید.