مقدمه
همانطور که میدانید، بهترین ابزارهای نظارت بر سرور دارای تعداد زیادی ادغام و پلاگین با کیفیت بالا، نمودارهای بسیار منعطف هستند و عملکرد هشدار پیشرفته ای را ارائه می دهند تا در صورت بروز مشکل به شما اطلاع داده شود.
بهترین ابزارهای نظارت بر سرور برای توسعه دهندگان و مهندسان توسعه دهنده در سال 2021 :
پرومتئوس چیست؟
ابزار Prometheus یکی از محبوب ترین و بهترین ابزارهای نظارتی است که همراه با کوبرنیتزها استفاده می شود. ابتدا این ابزار توسط SoundCloud ایجاد و پس از مدتی به CNCF اهدا شد. در حال حاضر Google Borg Monitor از آن الهام می گیرد. Prometheu یک راه حل نظارتی برای ضبط و پردازش هر سری زمانی صرفا عددی است. این معیارها را به همراه شناسه ها و مهرهای زمانی منحصر به فرد جمع آوری، سازماندهی و ذخیره می کند.
ابزارPrometheus یک سیستم قدرتمند مانیتورینگ و هشدار دهنده اپن سورس است. Prometheus، مقادیر و داده ها را به وسیلهMetric های گوناگون در یک time sequence یا دنباله زمانی مشخص، جمع آوری و ذخیره می کند.
به صورت کلی مواردی مثل مکانیسم های هشدار داخلی (built-in alerting mechanisms)، مدل داده های چند بعدی (multidimensional) ، مدل pull vs. push، زبان پرسشگر Prometheus یا PromQL و جامعه در حال رشد باعث برجسته شدن Prometheus در بین دیتابیس های time-series میشود.
بهترین راه برای یادگیری Prometheus، نصب آن بر روی سرور dev و کار کردن با آن است. میتوانید برای نظارت end-to-end cluster از ابزار Kube Prometheus، برای نمایش وضعیت اشیا ازKube State Metri و برای تجسم داده ها، از Grafana استفاده کنید.
با استفاده از ابزار Grafana میتوانmetric های موجود در پلتفرم Prometheus را جستجو و مشاهده کرد، یک داشبورد ایجاد و با توجه به نیاز ها یک alert تنظیم کرد. Grafana می تواند در کانال های ارتباطی مثل slack، webhook یا mail، ایشو اضافه و به طور همزمان در چندین موجودیت جستجو کند.
با ترکیب ابزارهایPrometheus وGrafana، می توانید سطح نظارت Kubernetes را در سیستم تولید خود به بالاترین حد برسانید.
نحوه کار سرویس مانیتورینگ و معماری Prometheus
ابزار Prometheus معیارها را از برنامههای ابزاردار، مستقیماً یا از طریق یک دروازه فشار میانی، خراش میدهد. به این به عنوان نوعی بافر فکر کنید. سنجههای تحت فشار را میپذیرد و ذخیره میکند، و یکAPI قابل خراش برای پرومتئوس را در معرض نمایش میگذارد.
بخش عمده ای از پایگاه کد و تلاش نویسندگان صرف نحوه ذخیره داده های سری زمانی می شود. این به طور پیشفرض شامل یک ذخیرهسازی داده مبتنی بر فایل است که به خوبی مقیاسپذیر و کارآمد است.
ابزار Prometheus حاوی یک زبان پرس و جو ساده است که به شما امکان می دهد داده های سری زمانی را ارزیابی و جمع آوری کنید. یک پرس و جو اساس تمام وظایف نظارتی را تشکیل می دهد که شامل تجسم آمار فعلی و هشدار می باشد. در نهایت، Prometheus یک REST API را برای مصرف کنندگان خارجی، مانند داشبورد، در معرض دید قرار می دهد.
در تصویر بالا مشخص است که قسمت اصلی و مرکزی Prometheus server میباشد که تمام متریکها از طریق Exporterها آماده میشود و خود Prometheus server آنها را Pull میکند. اگر جایی محدودیتی وجود داشته باشد و نیاز باشد که حتما متریکها توسط exporterها push شود از ابزاری به نامpushgateway استفاده میشود که exporterها به آن سرویس push میکنند و بعد خود سرور prometheus مجدد از سرورpushgateway آنها را pull میکند.
سرویس prometheus انواع روشهای کانفیگ را دارد که بنا به استفادهی شما، میتوان یکی از آن روشها را انتخاب و از آن استفاده کرد. میتوان تمام موارد را در کانفیگ فایلها نوشت یا از قابلیت service discovery آن استفاده کرد و هر زمان که نود با مشخصات مورد نظر وارد شد به صورت خودکار وارد فرآیند مانیتورینگ شود و متریکهای آن ارسال، ذخیره و نمایش داده شود.
یکی از موارد دیگه که در prometheus کانفیگ میشود ruleهای مربوط بهalerting میباشد که با استفاده از آنها مشخص میکند که اگر چه شرایطی پیش آمد یکalert ایجاد شود. مثلا اگر رم سرور بیشتر از ۸۰ درصد پر شد به من خبر بدهد یا اینکه اگر لود سرور بیشتر از ۷۰ درصد شد به من خبربدهد. این موارد تماما در فایلهایی به صورت rule آماده میشود و در کانفیگ مربوط به prometheus میباشد.
این موارد به سمت alertmanager ارسال میشود. این ابزار با استفاده از قابلیتی که دارد میتواند به ابزارهای مختلف متصل شود و از طریق آنها به ما خبر دهد وAlert را ارسال کند. از متداولترین ابزارهایی که برای اطلاعرسانی استفاده میشود میتوان به ایمیل، slack، rocketchat و sms اشاره کرد.
انواع متریک ها
پرومتئوس با داشتن چهار نوع معیار مختلف، انواع مختلفی از اندازه گیری ها را برآورده می کند.
اگر در حال توسعه خدمات مبتنی بر REST هستید، معمولاً می توانید بیشتر مواردی را که به آنها علاقه دارید با هیستوگرام اندازه گیری کنید. این به این دلیل است که شما نه تنها یک سری سطل، بلکه تعداد و مجموع کل داده ها را نیز دریافت می کنید. بنابراین می توانید از هیستوگرام برای محاسبه نرخ درخواست، نرخ خطا و مدت زمان تنها با یک متریک استفاده کنید.
مدل داده
تمام داده ها به صورت سری زمانی ذخیره می شوند. یعنی اندازه گیری با مهر زمانی اندازه گیری ها به عنوان متریک شناخته می شوند. هر سری زمانی منحصراً با یک نام متریک و مجموعهای از جفتهای کلید-مقدار، با نام مستعار برچسبها مشخص میشود
این بدان معناست که برچسب ها ابعاد چندگانه یک متریک را نشان می دهند. ترکیبی از یک نام متریک و یک برچسب یک متریک واحد را به دست می دهد. به عبارت دیگر، هر بار که یک جفت کلید-مقدار جدید بر روی یک متریک ایجاد می کنید، یک سری زمانی جدید در پایگاه داده دریافت خواهید کرد. بنابراین، بسیار مراقب باشید که جفتهای کلید-مقدار شما محدود باشند. مواردی مانند شناسه یا آدرس ایمیل را که نامحدود هستند ذخیره نکنید.
با توجه به نام متریک و برچسبهای مقدار کلید، قالب زیر برای نشان دادن معیارها استفاده میشود:
<metric name>{<label name>=<label value>, ...}
کجا خوب کار می کند؟
این ابزاربه دلیل سادگی ذاتی آن برای اجرای برنامه های کاربردی مبتنی بر ریزسرویس حیاتی مناسب است. هنگامی که همه برنامه های شما با شکست مواجه می شوند، Prometheus همچنان در حال اجرا خواهد بود
از طریق استفاده از برچسبهای ارزش کلیدی، دادههای چند بعدی را به خوبی مدیریت میکند. فیلتر کردن داده ها بر اساس برچسب آنها سریع و آسان است. به عنوان مثال، شما میتوانید از یک نام متریک برای همان نوع داده استفاده کنید و فقط زمینه (مانند کد وضعیت) را از طریق برچسبها متمایز کنید.
کجا خوب کار نمی کند ؟
به یاد داشته باشید که پرومتئوس داده ها را خراش می دهد. زمانی که پرومتئوس آن خراش را انجام می دهد تضمینی نیست. بنابراین، اگر یک مورد استفاده دارید که نیاز به خراش های دقیق ثانیه به ثانیه دارد، ممکن است انتخاب خوبی نباشد.
همچنین، Prometheus بدون قید و شرط بر HTTP متمرکز است. اگر در یک محیط یکپارچه مبتنی بر SOAP یا RPC که در آن از HTTP استفاده نمی شود کار می کنید، ممکن است مشکلات یکپارچه سازی داشته باشید.
چگونه لاگ های پرومتئوس را بررسی کنیم؟
پرومتئوس بیشتر نظارت بر جعبه سفید را انجام می دهد. برنامهها نقاط پایانی متریک را برای Prometheus پیادهسازی میکنند تا آن را خراش دهد یا با اجرای یک برنامه صادرکننده جداگانه. برای مشاهده گزارشها از برنامهها، از صادرکنندگان Prometheus مانند Prometheus grok_exporter برای تجزیه فایلهای گزارش و استخراج معیارها از دادههای گزارش بدون ساختار استفاده کنید. معیارهای استخراج شده در جعبه ابزار نظارت Prometheus قابل مشاهده خواهد بود.
انواع مانیتورینگ موجود در پرومتئوس چیست؟
انواع نظارت انجام شده توسط پرومتئوس ابزار دقیق و عامل/صادر کننده است. ابزار دقیق با درج کد سفارشی در کد منبع برنامه نظارت شده، معیارها را ضبط می کند. Agent ها در کنار برنامه ها در یک محیط مشترک اجرا می شوند تا به طور خودکار داده های برنامه یا لاگ ها را به معیارهای Prometheus ترجمه کنند.
چه چیزی را می توانید با پرومتئوس مانیتور کنید؟
ابزارPrometheus معیارهای برنامه مانند توان عملیاتی (TPS) و زمان پاسخ را نظارت می کند. همچنین میتوانید از صادرکننده Node برای نظارت بر سختافزار میزبان و معیارهای هسته استفاده کنید.
داده های Prometheus کجا ذخیره می شود؟
ابزارPrometheus یک پایگاه داده محلی بر روی دیسک سری زمانی دارد. همچنین با سیستم های ذخیره سازی از راه دور ادغام می شود. پایگاه داده محلی Prometheus اطلاعات را در قالبی سفارشی و بسیار کارآمد با زمان نگهداری پیش فرض 15 روز ذخیره می کند. فضای ذخیرهسازی محلی خوشهبندی یا تکراری نیست. اگر میخواهید ذخیرهسازی بادوام طولانیمدت داشته باشید، باید دادههای جمعآوریشده را با استفاده از یکی از ادغامهای ذخیرهسازی پشتیبانیشده به راهحلهای ذخیرهسازی راه دور منتقل کنید.
چگونه از Prometheus Metrics استفاده کنیم؟
معیارهای جمع آوری شده توسط Prometheus با برجسته کردن حوادث امنیتی، عملکرد ضعیف و سایر مسائل، بینشی در مورد عملکرد سیستم شما ارائه می دهد. می توانید از این بینش ها برای بهبود کارایی سازمان خود و موارد دیگر استفاده کنید.
در ایران نیز در زمینه نظارت و مانیتورینگ شرکت های بسیاری فعالیت دارند از جمله:
شرکت سدید آفرین، که اولین نمایندگی رسمی نرم افزار مانیتورینگ شبکه zabbix است.
ویا داناپرداز که نرم افزار اختصاصی خود را به نام بینا را ارائه می دهد.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
منابع
https://winder.ai/introduction-to-monitoring-microservices-with-prometheus/