مریم ملکی
مریم ملکی
خواندن ۸ دقیقه·۳ سال پیش

ابزار نظارت بر سرور(Prometheus)

مقدمه

همانطور که می­دانید، بهترین ابزارهای نظارت بر سرور دارای تعداد زیادی ادغام و پلاگین با کیفیت بالا، نمودارهای بسیار منعطف هستند و عملکرد هشدار پیشرفته ای را ارائه می دهند تا در صورت بروز مشکل به شما اطلاع داده شود.

بهترین ابزارهای نظارت بر سرور برای توسعه دهندگان و مهندسان توسعه دهنده در سال 2021 :

  • · Grafana + Prometheus
  • · New Relic
  • · InfluxDB + Telegraf
  • · Datadog

پرومتئوس چیست؟

ابزار 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 :

  • دارای قدرت خاص در دنیای MicroService ها جهت جمع آوری داده ها و پرس و جو های چند بعدی با استفاده از زبان PromQL.
  • قابلیت تنظیم Alert برای نظارت و کنترل سرویس ها.
  • قابلیت افزودن خودکار داده ها به نرم افزار از طریق Service Discovery یا Static Configuration.
  • قابل دسترس از طریق هر نوع سیستمی.
  • دارای سرور مستقل.
  • عدم وابستگی به ذخیره سازی تحت شبکه یا خدمات از راه دور.
  • دارای چندین فرم از نمودار و داشبورد پشتیبانی.

نظارت با Prometheus

بهترین راه برای یادگیری 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
معماری Prometheus

در تصویر بالا مشخص است که قسمت اصلی و مرکزی 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 اشاره کرد.

انواع متریک ها

پرومتئوس با داشتن چهار نوع معیار مختلف، انواع مختلفی از اندازه گیری ها را برآورده می کند.

  • شمارنده(Counter): یک متریک تجمعی که فقط افزایش می یابد. (به عنوان مثال درخواست های ارائه شده، وظایف تکمیل شده، خطاهای رخ داده)
  • گیج(Gauge): معیاری که می تواند خودسرانه بالا یا پایین برود. (به عنوان مثال دما، استفاده از حافظه)
  • هیستوگرام(Histogram): اندازه گیری Binned یک متغیر پیوسته. (به عنوان مثال تأخیر، مدت زمان درخواست، سن)
  • ارزیابی(Summary): مشابه هیستوگرام، با این تفاوت که سطل ها بلافاصله به یک جمع (مثلاً صدک 99%) تبدیل می شوند.


اگر در حال توسعه خدمات مبتنی بر 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/

https://sensu.io/blog/introduction-to-prometheus-monitoring

https://sematext.com/guides/kubernetes-monitoring/

prometheuskubernetes
شاید از این پست‌ها خوشتان بیاید