حذف متریک های سنگین در Prometheus
در این مقاله می خواهیم نحوه حذف متریک های سنگین در Prometheus را بررسی کنیم. استفاده از لیبل ها و متریک ها باعث بهبود مانیتورینگ و افزایش سرعت در جستجوی متریک ها می شود. اما در برخی موارد ممکن است متریک هایی وجود داشته باشد که نیازی به آنها نداریم و ممکن است باعث بار سنگینی بر روی Prometheus شوند.
خوشبختانه راه حل ساده ای در این موارد وجود داره که نیاز به خاموش کردن سیستم مانیتورینگ یا انتشار نسخه جدید برنامه نیست.
یافتن مشکل
در اولین مرحله باید متریک های مشکل دار رو پیدا کنیم. این مورد خیلی ساده است، متریک سنگین یعنی چی؟ یعنی متریکی که تعداد بالایی ازش داخل سیستم مانیتورینگ ذخیره شده. جهت پیدا کردن این متریک ها از کوئری زیر استفاده کنید:
topk(20, count by (__name__, job)({__name__=~".+"}))
این کوئری ۲۰ متریکی که بیشتر از همه ثبت شده اند را نشان خواهد داد.
حذف متریک
حالا که متریک های مشکل دار رو پیدا کردیم به راحتی میتونیم از دستشون خلاص بشیم. برای این کار باید از قابلیت Relabeling در Prometheus استفاده کنیم. برای مثال در تصویر بالا، متریک container_network_advance_tcp_stats_total
بیشترین تعداد رو داشته و به فرض نیازی هم بهش نداریم. توجه کنید که در اینجا از کل متریک های cAdvisor استفاده میکنیم و نمیخوایم کل داده ها حذف بشه بلکه فقط همین یه متریک سنگین رو نیاز داریم از سیستم حذف کنیم.
برای این کار در Job مربوطه به قسمت metric_relabel_configs
یک کانفیگ اضافه میکنیم. این کانفیگ باید به این صورت باشه:
scrape_configs:
- job_name: 'my_job'
static_configs:
- targets:
- my_target:1234
metric_relabel_configs:
- source_labels: [ __name__ ]
regex: 'container_network_advance_tcp_stats_total'
action: drop
پس از اعمال این تنظیمات، تمام متریک ها به صورت قبل از Job مربوطه Pull خواهند شد و فقط از ذخیره شدن همین یک متریک صرف نظر میشه.
توجه
این مورد رو مد نظر قرار بدید که شما دو مدل متریک دارید:
-
متریک هایی که توسط خودتون نوشته/تولید شده. در اینصورت دیگه نیازی به این کارها نیست. اگر حس میکنید این متریک استفاده چندانی برای شما نداره و بار اضافی به حساب میاد، خیلی راحت از برنامه تون حذفش کنید.
-
متریک هایی که از Exporter های افراد/شرکت های دیگه تولید میشه. خب مسلما فرد یا شرکتی که این متریک ها رو در نظر گرفته، هدفش کامل بودن داده های خروجی جهت ارائه به سیستم مانیتورینگ هست. خیلی وقت ها منطقی نیست برای نرم افزار های گوناگون خودتون دست به کار بشید و Exporter بنویسید. در نتیجه میشه با روشی که توضیح دادم هر چیزی که بهش نیاز ندارید و بار اضافی تولید میکنه حذف کنید.