پیکربندی مانیتورینگ با استفاده از اندپوینتهای پرومتئوس
سیستم مانیتورینگ برای سرویس CDN و DNS بهصورت یک endpoint قابل scrape به فرمت prometheus exporter ارائه میشود. به همین دلیل برای استفاده از مانیتورینگ سرویس CDN و DNS باید یک scraper مثل prometheus و یا vmagent سرویس victoria metrics که قابلیت scrap کردن endpointهای پرومتئوس را دارد تنظیم شود.
برای بالا آوردن یک اینستنس (Instance) پرومتئوس میتوان از فایل docker-compose زیر استفاده کرد:
برای دریافت متریکهای CDN و DNS باید endpoint زیر به targetهای پرومتئوس اضافه شود. لازم به ذکر است که این endpoint توسط basic authentication محافظت میشود و برای دریافت credential به تیم پشتیبانی ستون مراجعه کنید.
بهعنوان مثال برای اینستنس پرومتئوسی که بالاتر ذکر شد، قرار دادن محتوای زیر در فایل prometheus.yml برای دریافت کردن متریک های CDN و DNS کافیست:
به ازای پارامترهای مختلف سیستم CDN و DNS مسیرهای متفاوتی برای گروههای مختلف متریکها در نظر گرفته شدهاست و هر مسیر باید به صورت جداگانه scrape شود. در این بخش metricهای موجود در هر مسیر میپردازیم.
۱. مسیر /cdn/request
- متریک cdn_request_count
یک counter است که مقدار آن تعداد درخواست هایی است که سیستم cdn دریافت کرده است.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
مقدار ریسپانس کد دریافت شده در کلاینت | response_code |
وضعیت cache که میتواند یکی از HIT، MISS، BYPASS و … باشد | cache_status |
مقدار هش شده نام سرور cdn | identity |
۱- مقدار response_code میتواند "-" باشد و این مقدار به این معنی است که برای جواب دادن این ریکوئست نیازی به ارسال درخواست به آپستریم نبوده است. (مانند جوابهای firewall و یا auto tls redirect)
۲- مقدار cache_status میتواند "-" باشد و این مقدار به این معنی است که برای جواب دادن این ریکوئست نیازی به استفاده از cache نبوده. (مانند جواب های firewall و یا auto tls redirect)
۳- در prometheus یک counter میتواند ریست شود و به همین دلیل نیاز است تا این لیبل نیز در متریکها حضور داشته باشد تا توابعی مانند rate و irate به درستی کار کنند.
مثال:
برای حساب کردن تعداد درخواستهای 2xx که دامنه cdn.test.ir جواب داده است در یک دقیقه گذشته بر اساس نوع کش میتوان از query زیر استفاده کرد:
- متریک cdn_request_country_count
یک counter است که مقدار آن تعداد درخواست های دریافت شده توسط سیستم cdn بر اساس موقعیت جغرافیایی است.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
مشخصات کشور مبدا ریکوئست | country |
مقدار هش شده نام سرور cdn | identity |
مثال:
برای به دست آوردن پراکندگی جغرافیایی درخواستهای دامنه cdn.test.ir در ۱ روز گذشته میتوان از query زیر استفاده کرد:
۲. مسیر /cdn/response
- متریک cdn_response_time
یک histogram است که نشان دهنده باکتهای مختلف زمانی پاسخها است.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
مقدار ریسپانس کد دریافت شده در کلاینت | response_code |
وضعیت cache که میتواند یکی از HIT، MISS، BYPASS و … باشد | cache_status |
مقدار هش شده نام سرور cdn | identity |
مقدار سطح بالا برای باکت زمانی | le |
۱- این متریک متشکل از سه متریک cdn_response_time_bucket , cdn_response_time_sum و cdn_response_time_count میباشد.
مثال:
برای محاسبه زمان بازه ۹۹ درصد زمان پاسخ دهی درخواست ها در یک دقیقه اخیر میتوان از query زیر استفاده کرد:
۳. مسیر /cdn/bytes
- متریک cdn_bytes_sent_size
یک counter که مقدار آن حجم پاسخ های فرستاده شده از سیستم cdn به client است.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
مقدار ریسپانس کد دریافت شده در کلاینت | response_code |
وضعیت cache که میتواند یکی از HIT، MISS، BYPASS و … باشد | cache_status |
مقدار هش شده نام سرور cdn | identity |
مثال:
برای محاسبه حجم ترافیک دریافتی clientها در ۱ ساعت گذشته بر اساس وضعیت cache میتوان از کوئری زیر استفاده کرد:
برای محاسبه حجم ترافیک دریافتی client ها در صورت پاسخ 2xx میتوان از query زیر استفاده کرد:
۴. مسیر /firewall
- متریک cdn_firewall_matched
یک counter که مقدار آن تعداد درخواست هایی است که توسط فایروال پردازش شده اند.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
نام قانون فایروال فعال شده برای درخواست ها | rule_name |
مقدار هش شده نام سرور cdn | identity |
مثال:
برای محاسبه تعداد درخواست های پردازش شده توسط یک قانون فایروال در ۵ دقیقه اخیر میتوان از کوئری زیر استفاده کرد:
۵. مسیر /cdn/upstream
- متریک upstream_requests_total
یک counter که مقدار آن تعداد درخواست health check ای است که برای upstream فرستاده شده است.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
نام upstream در کانفیگ cdn | upstream |
وضعیت پاسخ دریافتی از upstream | response1 |
مقدار هش شده نام سرور لبه | identity |
۱- این لیبل میتواند 1, 2 و یا 3 باشد. 1 به معنی سالم بودن حداقل یکی از IPهای آپاستریم است. 2 به معنی آماده نبودن سیستم health check است و 3 به معنی در دسترس نبودن تمام آیپی های ست شده در آپستریم میباشد.
مثال:
برای محاسبه تعداد درخواست های health check که نتیجه آن 1 شده است از کوئری زیر میتوان استفاده کرد:
- متریک upstream_requests_total
یک معیار (gauge که مقدار آن نتیجه درخواستهای health check است.
توضیح label | مقدار label ها |
---|---|
مقدار host ریکوئست ها ورودی | hostname |
نام upstream در کانفیگ cdn | upstream |
نام سرور لبه | edge |
۱- این مقدار می تواند 1,2 و یا 3 باشد که معنای آنها بالاتر گفته شده است.
مثال:
برای بدست آوردن وضعیت فعلی آپاستریمها در edge_server های مختلف میتوان از query زیر استفاده کرد:
همچنین میتوان آلرت زیر را برای مواقعی که یک آپاستریم از دسترس خارج میشود تنظیم کرد:
۶. مسیر /dns
- متریک hermes_requests_seconds
یک histogram است که نشاندهنده باکتهای مختلف زمانی پاسخهای DNS است.
توضیح label | مقدار label ها |
---|---|
نام دامنه | origin |
نوع درخواست dns | request_type |
کد پاسخ درخواست | response_code |
مقدار هش شده نام سرور cdn | identity |
مقدار سطح بالا برای باکت زمانی | le |
۱- این متریک شامل سه متریک hermes_requests_seconds_bucket, hermes_requests_seconds_sum و hermes_requests_seconds_count میباشد.
به صورت کلی یک کانفیگ prometheus که تمام مسیرهای گفته شده را scrap کند به صورت زیر میباشد: