در ادامهی پستهای قبلی تو این پست داریم میریم سمت کامپوننتهای استک پرومتئوس و یکم در مورد اینکه هر کدوم چی هستن و چه کمکی به ما میکنند میخواهیم صحبت کنیم.
خب یه مروری کنیم پستهای قبلی رو:
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.
کامپوننتهای استک Prometheus:
دیزاین پرومتئوس به صورت کامپوننتهایی هست که به هم متصل میشن و هرکدوم یه وظیفه مستقل رو انجام میدن. در ادامه تصویر دیزاین پرومتئوس رو میبینیم و سپس هر کدوم از آنها رو تشریح میکنیم.
این دیزاین به صورت ماژولار هست و میتونیم مستقل و کامل آن رو پیادهسازی کنیم. بریم ببینیم که هر کدوم چی کار میکنند و چطوری این پازل زیبا با مشارکت همه تکمیل میشه.
Prometheus Server:
قلب این استک سرویس Prometheus هست که چند تا کار مهم رو انجام میده. اول اینکه TSDB داخل خود داره و متریکهایی که pull میکنه رو داخل آن ذخیره میکنه. کار بعدی اینکه متریکها و دادهها رو scrap میکنه و داره آنها رو جمعآوری میکنه. کانفیگ رولها رو بهش میده و بر اساس آنها اکشنهای لازم رو میزنه. ما دو نوع رول داخل این استک داریم یکی recording و دیگری alert که بر اساس آن رولها یکسری کار برای ما انجام میده. یکی دیگر از مواردی که داریم اینه که یک اینترفیس وب در اختیار ما قرار میده که خیلی از موارد رو میتونیم باهاش بررسی کنیم و میتونیم داخل دیتابیس آن کوئری هم بزنیم. زبانی که میتونیم باهاش کوئریها رو بنویسیم promql است که میتونیم ببینیم چه متریکهایی دارد و در چه وضعیتی هستند. برخی از مواردی که تو این پنل خیلی کاربرد داره قسمت targets است که میتونیم وضعیت آنها رو بررسی کنیم و ببینیم آیا جاهایی که قراره ازشون دیتا بگیره داره درست کار میکنه یا نه و یکی دیگه هم قسمت آلرتها هست که نشون میده بر اساس رولهایی که زدیم آیا در حال حاضر آلرتی fire شده یا نه. کلا اینجا به صورت فقط خواندنی دستمون بازه که همه چیز رو ببینیم و بررسی کنیم. سرویس Prometheus دو نوع سرویس دیسکاوری به ما میده یکی از فایل و یکی هم http که بهمون کمک میکنه سرویسدیسکاوری داشته باشیم و اگر سرویسی بالا اومد به خوبی بتونیم آن رو بدون اینکه تغییری تو کانفیگ بدیم مانیتور کنیم.
Exporters:
کلا ساختار این استک به صورت pull base هست و خود Prometheus میره متریکها رو pull میکنه. ما کنار این استک کلی exporter داریم که به معنای واقعی دارن متریکها رو برای ما expose میکنند. اونها متریکها رو ایجاد و در دسترس قرار میدهند و خود prometheus میره و متریکها رو دریافت میکنه. اینجا ما انواع سرویس و سرور exporter رو داریم. از معروفترینهاش بخوام بگم میتونم به node-exporter که مخصوص پایش و ارزیابی خود سرور هست و cadvisor که کارش پایش docker و کانتینرهای آن هست اشاره کنم. حالا ما هر سرویسی که ایجاد و راهاندازی کرده باشیم براش exporter مخصوص آن رو هم دیپلوی میکنیم تا بتونیم به خوبی سرویس مانیتورینگ داشته باشیم. معمولا وقتی شما سرویسی توسعه میدید میتونید متریکهایی که دارید رو با توجه به استاندارد Prometheus منتشر کنید تا به خوبی بشه به سرویس مانیتوریگ رسید و انجامش داد.
Pushgateway:
چند بار تا حالا روی این موضوع تاکید داشتیم که Prometheus به صورت pull base هست. پس خودش میره بر میداره. حالا اگر exporter ما جایی باشه که بهش دسترسی نباشه و پشت فایروالی چیزی باشه که نشه رفت سمتش چی. بیخیالش که نمیشه شد. سرویس pushgateway کارش همینه. Prometheus حرفش رو عوض نمیکنه و کماکان فقط pull میکنه و ما میتونیم متریکهای خودمون رو تو pushgateway بریزیم و خود prometheus میره از روی اون بر میداره و میخونش. پس با استفاده از pushgateway این امکان فراهم میشه که ما متریکهامون رو داخل این استک push کنیم.
Alertmanager:
قسمت مهم آلرتنگ تو این استک با استفاده از این کامپوننت انجام میشه. Alertmanager کارش اینه که آلرتهایی که Prometheus ایجاد کرده یا اصطلاحا fire کرده رو notify کنه. یه جورایی Prometheus بهش میگه که فلان چیز خرابه یا دان شده و آلرت منیجر بر اساس کانفیگی که داره آن آلرتها رو برای مخاطب آنها ارسال میکنه. کلی امکان داره که بتونیم با آلرتها بازی کنیم و از ارسال آلرتهای اشتباه جلوگیری کنیم. مثلا میتونیم آنها رو باهم گروه کنیم یا بر اساس اولویتی که داره از مدیا مناسب آن استفاده کنیم. مثلا آلرتهای با اولیت بالا و ciritical رو تماس بگیره و آنهایی که اولیوت پایینی داره و صرفا یه سری وارنینگ هست رو ایمیل کنه. کلا دستمون بازه که بتونیم آلرتینگ خوبی ایجاد کنیم.
Grafana:
کنار این استک معمولا دوست زیبا و قدرتمندمون جناب grafana هم همواره دیپلوی و کانفیگ میشه که باهاش میتونیم به خوبی داشبوردهایی داشته باشیم که بتونیم مانیتورینگ رو کامل کنیم. گرافانا تو این استک نقش visualizer رو داره که انصافا تو این کار هم خیلی قدرتمند و توانا هست. کلی هم امکانات در اختیار ما قرار میده که میتونیم باهاش داشبوردهایی زیبا و کارآمد ایجاد و پیادهسازی کنیم. تو گرافانا Prometheus به صورت یه دیتاسورس اضافه میشه و ما با کوئریهایی که میزنیم داشبوردهایی که لازم داریم رو ایجاد میکنیم. لازمه بگم که این داشبورها اکثرا به صورت آماده وجود دارند و کار ما برای استفاده از آنها خیلی سخت نیست و به راحتی میتونیم ازشون استفاده کنیم.
Grafana Mimir:
از mimir میتونیم به عنوان remote write استفاده کنیم. چیزی که حلقهی گم شدهی استک Prometheus هست. Prometheus رو نمیشه کلاستر کرد و این نقص براش وجود داره. برای اینکه بتونیم آن رو پوشش بدیم از mimir میتونیم استفاده کنیم که هم میتونیم کلاسترش کنیم و هم میتونیم از آبجکت استوریج به عنوان بکندش استفاده کنیم. به این صورت ما میتونیم دیتای Prometheus رو جایی داشته باشیم که کلاسترش کنیم و اصطلاحا خود Prometheus رو به صورت stateless داشته باشیم. این طوری دستمون بازتره و استکی هم که داریم استفاده میکنیم کاملتر خواهد شد.
برخی از تجربیات خودم تو استفاده از این استک:
خیلی ساله که من از این استک استفاده میکنم و تقریبا هر جا یه سرویسی بالا داشته باشم کنارش حتما یه Prometheus هم برای مانیتورینگ دارم. خیلی کار باهاش پیچیده نیست و به نظرم تو زمانهایی که دارید شما از کانتینر و داکر استفاده میکنید یکی از بهترین گزینهها خواهد بود. در ادامه برخی از توصیههایی که به نظرم مهم هست رو بهش اشاره میکنم.
توی پستهای بعدی بیشتر ابزارهای مانیتورینگ و Observability رو بررسی میکنیم و کنار هم یاد میگیرم.
مراقب خودتون باشید. 🌹🐳🌹
خوبه که داکرمی رو تو جاهای مختلف فالو کنید. پذیرای نظرات شما هستیم.
🫀 Follow DockerMe 🫀
🔔 Follow YouTube 🔔
📣 Follow Instagram 📣
🖇 Follow LinkedIn DockerMe🖇
🔎 Follow Linkedin Ahmad Rafiee 🔎
🕊 Follow Twitter 🕊