یکی از جذاب ترین سرویس هایی که میشود در جهت تکمیل ابزار های مانیتورینگ استفاده کرد، قطعا سرویس Prometheus Anomaly Detector است .
ماهیت این سرویس تشخیص موارد ناهنجاری ( Anomaly ) بر اساس دیتا Prometheus است .
شاید به این موضوع فکر کنین که استفاده از این سرویس چه مزیت خواهد داشت، در جواب این موضوع می توان گفت این سرویس به تیم NOC – DevOps کمک میکند که به صورت هوشمند ناهنجاری های در سیستم مانیتورینگ تشخیص داده شود و بر اساس این دیتا میشود هشدار هوشمندی دریافت کرد ( Smart Alerting )
قطعا بررسی کردن تمامی گراف ها و دیتا سیستم مانیتورینگ امری دشوار است و این موضوع به صورت مداوم در تمام لحظات نخواهد بود . در حالی که این سرویس در تمامی مواقع رفتار سیستم مانیتورینگ را بررسی و پایش میکند . همچنین ست کردن آلارم های با Threshold فیکس برای خیلی از سرویس های ممکن نیست و نیازمند این است که رفتار های سرویس ها تشخیص داده شود و بر اساس اون به صورت منعطف بازه تشخیص ناهنجاری تنظیم گردد.
این ناهنجاری های می تواند شامل افزایش غیر معمول درخواست به سرویس ها، مصرف غیر عادی منابع و افزایش یا کاهش شدید ترافیک در شبکه و … باشد .
معمولا تشخیص و اطلاع به موقع از حوادث یا ناهنجاری ها در سیستم مانیتورینگ میتواند مدت زمان حل مشکل را تا حد زیادی کاهش دهد و باعث بهبود عملکرد تیم فنی در مواقع حوادث باشد .
سورس پروژه رو میتونین از اینجا دریافت کنید.
ما برای اجرای اون Docker-Compose فایل تهیه کردیم که بشود راحت تر پروژه را اجرا و مدیریت کرد.
version: "3.1"
services:
pad:
image: quay.io/aicoe/prometheus-anomaly-detector:latest
ports:
- ۸۰۸۰:۸۰۸۰
environment:
FLT_PROM_URL: "http://prometheus"
FLT_RETRAINING_INTERVAL_MINUTES: 1
FLT_METRICS_LIST: 'example promql query'
APP_FILE: "app.py"
FLT_DATA_START_TIME: "3d"
FLT_ROLLING_TRAINING_WINDOW_SIZE: "15d"
تمامی Environment Variable ها در پروژه Github این سرویس توضیح داده شده است .
همچین در این پروژه Github توضیحات کامل از مدل پردازش دیتا ارائه داده شده .
چند نکته در رابطه با نصب و راه اندازی این سرویس :
- این سرویس برای اجرا و پردازش از CPU به شدت استفاده می کند و استفاده از منابع این نرم افزار اصلا بهینه نیست . با یک سری تغییرات روی کد توانستیم کمی بهتر کنیم این موضوع که هر موقع تکمیل شود قطعا روی سورس اصلی Commit خواهیم داشت .
- برای Train دیتا نیاز شما Query Promql به این سرویس بدهید . Query هایی که نسبتا سنگین هستن بهتر ابتدا با Recording Rule به یک time series جدید تبدیل بشن سپس در این سرویس از آنها استفاده کنین
groups:
- name: example
rules:
- record: job:http_inprogress_requests:sum
expr: sum by (job) (http_inprogress_requests)
- شما میتوانید بر اساس اینکه سیستم Anomaly تشخیص داده یا اینکه نسبت yhat_uper – yhat_lower به دیتای اصلی شما چند درصد رشد یا کاهش داشته آلارم ست کنید .
این آلارم های هوشمند شما رو از ناهنجاری های در حال وقوع مطلع میکنه .
- alert: transaction-anomaly
expr: avg(transactions:rate5m) / avg(transactions:rate5m_prophet{value_type="yhat"}) * 100 - 100 > 10 or transactions:rate5m_prophet{value_type="anomaly"} == 1
for: 10s
labels:
severity: page
annotations:
summary: " an anomaly detected on database transactions "
message: " transaction on the database is {{$value}}% upper than normal value "
- برای ساخت داشبورد بهتر است مجموع از دیتا اصلی خود و دیتا مربوط به سرویس Anomaly Detection نمایش داده شود به این دلیل که بتوان بررسی کرد که مقدار های Predict شده تا چه حد قابل اطمینان و درست هستن و رفتار فعلی سیستم تا چه در بازه نرمال پیش بینی شده قرار دارد .
قطعا همکاران گرامی و متخصصان حوزه AI میتونن این مبحث تکمیل کنند همونجور که بسیاری از سازمان ها دستاورد های خوبی در این زمینه داشتند و محصولات مشابه خوبی توسعه داده اند . مفهوم Anomaly Detection و استفاده از AI در ابزار های Devops مخصوصا Monitoring بسیار گسترده است و خیلی ویژگی دیگر دارد که این سرویس همگی آنها را پوشش نمی دهد .
لینک های تکمیلی :
مقاله Practical Anomaly Detection (وبسایت Prometheus)
فایل AIOps-Anomaly-Detection-with-Prometheus-Marcel-Hild-Red-Hat (PDF)