یکی از جذاب ترین سرویس هایی که میشود در جهت تکمیل ابزار های مانیتورینگ استفاده کرد، قطعا سرویس Prometheus Anomaly Detector است .

ماهیت این سرویس تشخیص موارد ناهنجاری ( Anomaly ) بر اساس دیتا Prometheus است .

شاید به این موضوع فکر کنین که استفاده از این سرویس چه مزیت خواهد داشت، در جواب این موضوع می توان گفت این سرویس به تیم NOC – DevOps کمک میکند که به صورت هوشمند ناهنجاری های در سیستم مانیتورینگ تشخیص داده شود و بر اساس این دیتا میشود هشدار هوشمندی دریافت کرد ( Smart Alerting )

قطعا بررسی کردن تمامی گراف ها و دیتا سیستم مانیتورینگ امری دشوار است و این موضوع به صورت مداوم در تمام لحظات نخواهد بود . در حالی که این سرویس در تمامی مواقع رفتار سیستم مانیتورینگ را بررسی و پایش میکند . همچنین ست کردن آلارم های با Threshold فیکس برای خیلی از سرویس های ممکن نیست و نیازمند این است که رفتار های سرویس ها تشخیص داده شود و بر اساس اون به صورت منعطف بازه تشخیص ناهنجاری تنظیم گردد.

این ناهنجاری های می تواند شامل افزایش غیر معمول درخواست به سرویس ها، مصرف غیر عادی منابع و افزایش یا کاهش شدید ترافیک در شبکه و … باشد .

معمولا تشخیص و اطلاع به موقع از حوادث یا ناهنجاری ها در سیستم مانیتورینگ میتواند مدت زمان حل مشکل را تا حد زیادی کاهش دهد و باعث بهبود عملکرد تیم فنی در مواقع حوادث باشد .

سورس پروژه رو میتونین از ادرس https://github.com/AICoE/prometheus-anomaly-detector دریافت کنید.

ما برای اجرای اون 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 بسیار گسترده است و خیلی ویژگی دیگر دارد که این سرویس همگی آنها را پوشش نمی دهد .

 

لینک های تکمیلی :‌

https://prometheus.io/blog/2015/06/18/practical-anomaly-detection

https://events19.linuxfoundation.org/wp-content/uploads/2017/12/AIOps-Anomaly-Detection-with-Prometheus-Marcel-Hild-Red-Hat.pdf