تازگیا تو شرکت لازم داشتیم سیستم مانیتورینگ بنویسیم. کار ما مرتبط به تراکنش های بانکی هستش، در کنار اینکه چقدر RAM، CPU و ... استفاده شده، باید یکم از اطلاعات بیزینسی مثلا چند تا تراکنش انجام شده، تا الان کدوم مراحل از روند انجام شده و ... رو نشون بدیم. وقتمون هم خیلی کم بود. به همین خاطر دنبال سریع ترین و کم خطاترین راه پیاده سازی (در عین حال راحتترین) بودیم که متوجه شدیم Prometheus چقدر خوبه!!!! برای UI سیستممون از Grafana استفاده کردیم که هیچ زحمتی برای UI نداشتیم! هر دو Prometheus و Grafana خیلی ساده هستن. Prometheus اطلاعات مورد نیاز برای نشون دادن رو ایجاد میکنه و Grafana اونها رو نمایش میده. برای همین اول Prometheus رو میگم که چی هست و چطور کار میکنه، سپس Grafana و در نهایت نصب و دمویی رو در غالب چند پست میگم. در این نوشته صرفا نحوه کار پرومتئوس بیان شده. در قسمت دوم اینکه چطوری پرومتئوس و گرافانا رو بالا بیاریم و یک سمپل کوچیک از نحوه ی دریافت اطلاعات رو میبینیم. در بخش سوم متریک های موجود و در قسمت آخر نحوه ی کار گرافانا رو با هم میبینیم.
پرومتئوس open source، free و toolkit مناسب مانیتورینگ است. بر روی لینوکس و ویندوز هر دو یکسان کار میکند و cross platform است. از روی نرم افزارها یا سیستم هایی که میخوایم اونها رو مانیتور کنیم یه سری اطلاعات به دست میاره که بهشون متریک میگه. به خود این نرم افزار ها که قصد به دست آوردن اطلاعات ازش رو داره هم تارگت میگه. این متریک ها شامل میزان CPU، memory، میزان استفاده از دیسک و ... یا متریک های custom که کاربر آن را تعریف میکنه، است. پرومتئوس متریک ها را به صورت polling در بازه های زمانی مشخص از آدرس تارگت هایی که بهش معرفی کردیم، میگیره و در دیتابیس time series خودش نگهداری میکنه. بنابراین میتوان با query زدن روی یک range زمانی، داده ها را به دست آورد که برای اینکار نیز یک API نوشته که به راحتی بشه با اون query زد. همینطور Prometheus یک وب اپ ساده هم برای کارهای administrator و query زدن دارد. یک سیستم alerting نیز دارد که میتوان با کمک آن، در صورت بروز مشکلاتی به کاربر با email یا message پیغام داد.
با پرومتئوس همزمان میتوان سیستم ها را جداگانه ولی بخشی از یک کل، مانیتور کرد. نحوه ی به دست آوردن متریک ها در تمامی سیستم ها فارغ از اینکه سرور، وب اپ و ... باشد، با یکدیگر یکسان است. متریک ها همونطور که گفتیم یا خودمون ایجاد کردیم یا از ابزارهای آماده ای که به اونها exporter گفته میشود برای ما به دست می آید. در تمامی تارگت ها، خود تارگت به روشی که در آینده میفهمیم، این متریک ها را در آدرسی قرار میده و پرومتئوس آنها را میخواند که به این روش scrape کردن میگویند. در هر دو روش، در یک آدرس مشخص این اطلاعات را قرار میگیرد و پرومتئوس با روش polling ودر فاصله زمانی مشخصی که میتوان schedule کرد، آنها را میخواند.
پرومتئوس متریک هاشو با فرمت خاصی نشان میده. این فرمت خیلی ساده است. به این صورت که اسم متریک و مقدارش هستش. در کنار این فرمت و مقدار، metadata هایی شامل description یا تایپ داده هم وجود داره که توسط خود پرومتئوس گذاشته میشه.به علاوه هر داده شامل یک سری label هم میتونه باشه که بعدا در مورد label توضیح میدم. در شکل زیر دو متریک به همراه metadata های اون اومده. متریک اول node_filefd_allocated هست و دومی node_disk_io_time_seconds_total که این متریک لیبل device هم داره. در شکل دو خط کامنت قبل از مقدار هر متریک اومده،خط ابتدایی description ای که تعریف متریک است و دیگری برای تایپ که در اینجا gauge است. متریک ها 4 دسته هستند: gauge، counter، histogram و summary که تعریف دقیقشون رو در قسمت های بعد میبینیم.