Promql anomaly detection

Promql anomaly detection

erfanara

یک مدتی بود که دنبال یک روش برای تشخیص anomaly توی متریک‌های grafana میگشتم، اما خیلی چیز درست درمونی پیدا نمیکردم، خود grafana cloud به نظر یک فیچر داره برای اینکار ولی توی ورژن اوپن‌سورسش چیزی برای اینکار نداشت.

 به صورت کلی برای anomaly detection هم روش‌های زیادی هست که توی data mining بهش میپردازن، که اگه بخواین خیلی سنگین حرکت بزنین مثلا ماشین لرنینگ داشته باشین کار خیلی سخت میشه، ولی یک سری روش خیلی ساده آماری هست که با میانگین و انحراف معیار کار میکنن که خیلی وقتا هم کارو راه میندازن (مثل روش‌های zscore و IQR) اگه خواستید بیشتر راجبشون بدونین اینجا رو ببینید:

https://www.geeksforgeeks.org/blogs/anomaly-detection-techniques/

داشتم به این فکر میوفتادم که خودم بیام توی prometheus یک سری rule آماده کنم که اینکارو برام بکنه ولی یکم که گشتم با این ابرشاهکار روبه‌رو شدم:

https://github.com/grafana/promql-anomaly-detection

که به نظر توسط خود grafana هم داره توسعه داده میشه

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


به چه درد میخوره؟ 

خیلی سناریو‌ها و مثال‌های مختلفی میشه زد، اما اکثرا بحث سر یک متریک از نوع guage از نوع time-series هست (یعنی متریک‌هایی که یک عددن و ممکنه در طی زمان بالا یا پایین بره مقدارشون مثل مقدار مصرف رم یا cpu در هر زمان و یا مثلا تعداد ریکوئست‌ها در ثانیه در طی زمان)

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


روش استفاده

طریقه استفاده‌اش به این شکله که فقط باید rule‌هایی که نوشتن رو توی prometheus ایمپورت کنین:

rule_files:
- /etc/prometheus/rules/*.yml

این ruleها صرفا شامل یک سری recording rule و alerting rule هستن که با لیبل شروع به کار میکنن و نقش تمپلیت دارن ی جورایی،

(اگه راجب فرق و کاربرد record و alert توی prometheus نمیدونین اینجا رو بخونید)

و اگه شما بخواین ازشون استفاده کنین صرفا باید یک recording rule دلخواه توی prometheus بسازین و بهش لیبل‌هایی که این داداشمون تعریف کرده رو بزنین تا شروع به کار کنه


مثلا توی کاربردی که خودم ازش استفاده کردم راجب blackbox exporter بود که یک متریکی داره به نام probe_http_duration_seconds که بهمون میگه سایتمون چند ثانیه طول میکشه تا لود بشه. برای اینکه بشه anomaly detection رو براش فعال کنیم باید یک دونه recording rule جدید درست میکنیم به این شکل مثلا:

groups:  
  - name: BlackBoxExporterAnomaly  
    rules:  
      - record: anomaly:probe_http_duration_seconds  
        expr: sum by(instance, target, container, endpoint, job, namespace, pod, service) (probe_http_duration_seconds)  
        labels: 
          anomaly_name: "anomaly:probe_http_duration_seconds" 
          anomaly_type: "latency"
          anomaly_strategy: "adaptive"

و لیبل‌هایی که لازم داره مثل anomaly_name و anomaly_type رو بهش میدیم مثل مثال بالا

حالا اینکه هر کدوم از این لیبلا چی باید باشن readme خودش بیشتر توضیح داده


و خلاصه شروع میکنه به کار کردن و آلرت دادن و تهش هم یک دشبورد خوشگل هم داره که باهاش میتونین ببینین چطوری داره کار میکنه :)


Report Page