پشته قابل مشاهده
1) چرا شما نیاز به یک پشته مشاهده پذیری دارید
RCA سریع و کاهش MTTR: از علامت تا علت در عرض چند دقیقه.
مدیریت SLO: اندازه گیری خطاها/تاخیر، هشدار توسط بودجه نادرست.
کنترل انتشار: محاسبات قناری، بازگشت خودکار توسط معیارها.
امنیت و حسابرسی: مسیرهای دسترسی، ناهنجاری ها، نگهداری قانونی.
شفافیت FinOps: هزینه ذخیره سازی/درخواست ها، هزینه هر SLO.
روش شناسی: سیگنال های طلایی (تاخیر/ترافیک/خطاها/اشباع)، RED، استفاده.
2) معماری پایه پشته
قطعات توسط لایه
مجموعه/عوامل: صادر کنندگان، Promtail/Fluent Bit، OTel SDK/Auto-Instr، Blackbox-probes.
Шина/ingest: Prometheus remote_write → Mimir/Thanos، توزیع کنندگان/مصرف کنندگان Loki، مصرف کنندگان Tempo/Jaeger.
ذخیره سازی: S3/GCS/MinIO شی (طولانی سرد)، SSD (ردیف گرم).
پرس و جو/تجسم: Grafana (پانل ها، ویدجت های SLO)، Kibana (اگر ELK).
مدیریت: Alertmanager/Graphana هشدار، کاتالوگ خدمات، RBAC، مدیر مخفی.
الگوهای استقرار
مدیریت شده (خدمات ابر/ابر Grafana) - سریع و گران تر در حجم.
خود میزبانی در K8s - کنترل کامل، نیاز به عملیات و FinOps دارد.
3) استانداردهای داده: یکپارچه «طرح مشاهده»
3. 1 معیارها (پرومتئوس/OpenMetrics)
برچسب های مورد نیاز: 'env'، 'منطقه'، 'خوشه'، 'فضای نام'، 'سرویس'، 'نسخه'، 'مستاجر' (اگر چند مستاجر)، 'نقطه پایانی'.
نامگذاری: 'snake _ case'، پسوندهای '_ total'، '_ seconds'، '_ bytes'.
نمودار نوار: سطل ثابت (SLO گرا).
Cardinality: شامل 'user _ id'، 'request _ id' در برچسب ها نیست.
3. 2 سیاهههای مربوط
فرمت: JSON ؛ فیلدهای مورد نیاز «ts»، «level»، «service»، «env»، «trace _ id»، «span _ id»، «msg».
PII: پوشش بر روی عامل (PAN، نشانه ها، ایمیل، و غیره).
برچسب های Loki: فقط کاردینالیتی کم («برنامه»، «فضای نام»، «سطح»، «مستاجر»).
3. 3 آهنگ ها
معناشناسی OTel: "خدمات. نام، استقرار. محیط زیست، DB. سیستم '،' http. '.
نمونه برداری: مسیرهای هدف p99 «always _ on »/tail-sampling هستند، بقیه« parent/ratio »هستند.
جاسازی شناسه: تلنگر 'trace _ id/span _ id' را به سیاهههای مربوط و معیارهای (برچسب/زمینه).
4) همبستگی M-L-T (معیارها/سیاههها/ردیابی)
از گراف هشدار (متریک) → سیاهههای فیلتر شده توسط 'trace _ id' → یک ردیابی خاص.
از ردیابی (دامنه آهسته)، یک درخواست برای معیارهای یک backend خاص در فاصله فاصله است →
دکمههای Drilldown در پانلها: «to logs» و «to traces» با جایگزینی متغیر («$ env»، «$ service»، «$ trace _ id»).
5) OpenTelemetry Collector: خط لوله مرجع
yaml receivers:
otlp:
protocols: { http: {}, grpc: {} }
prometheus:
config:
scrape_configs:
- job_name: kube-nodes static_configs: [{ targets: ['kubelet:9100'] }]
processors:
batch: {}
memory_limiter: { check_interval: 1s, limit_mib: 512 }
attributes:
actions:
- key: deployment. environment value: ${ENV}
action: insert tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: important-routes type: string_attribute string_attribute: { key: http. target, values: ["/payments","/login"] }
- name: probabilistic type: probabilistic probabilistic: { sampling_percentage: 10 }
exporters:
otlphttp/mimir: { endpoint: "https://mimir/api/v1/push" }
otlphttp/tempo: { endpoint: "https://tempo/api/traces" }
loki:
endpoint: https://loki/loki/api/v1/push labels:
attributes:
env: "deployment. environment"
service: "service. name"
service:
pipelines:
metrics: { receivers: [prometheus, otlp], processors: [memory_limiter, batch], exporters: [otlphttp/mimir] }
logs: { receivers: [otlp], processors: [batch], exporters: [loki] }
traces: { receivers: [otlp], processors: [memory_limiter, attributes, tail_sampling, batch], exporters: [otlphttp/tempo] }
6) هشدار: SLO و چند سوختگی
ایده: alertim در سطح «CPU> 80٪» نیست، بلکه در مصرف بودجه خطا است.
قالب های PromQL:promql
5-minute error rate err_ratio_5m =
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))
Quick burn (1m window)
(err_ratio_1m / (1 - SLO)) > 14. 4
Slow burn (30m)
(err_ratio_30m / (1 - SLO)) > 2
تاخیر (هیستوگرام):
promql latency_p95 =
histogram_quantile(0. 95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
7) داشبورد: ساختار پوشه
00_Overview - پلت فرم: SLO، p95، 5xx٪، ظرفیت، حوادث فعال.
10_Services - توسط خدمات: RPS، P95/P99، خطاها، انتشار (حاشیه نویسی).
20_Infra - K8s/nodes/story/network، etcd، کنترل کننده ها.
30_DB/Queues - PostgreSQL/Redis/Kafka/RabbitMQ.
40_Edge/DNS/CDN/WAF - ورود، LB، قوانین WAF.
50_Synthetic - اسکریپت های آپ تایم و بدون سر.
60_Cost/FinOps - ذخیره سازی، پرس و جو، داغ/سرد، پیش بینی.
هر پانل: شرح، واحد، مالک، لینک runbook، drilldown.
8) سیاهههای مربوط: کارگاه LogQL
logql
API errors
{app="api", level="error"} = "Exception"
Nginx 5xx in 5 minutes
{app="nginx"} json status=~"5.." count_over_time([5m])
Extract Fields
{app="payments"} json code!="" unwrap duration avg()
9) آهنگ: TraceQL و کلاهبرداری
کمترین سرعت را پیدا کنید:
{ service. name = "api" } duration > 500ms
ساندویچ SQL آهسته در پرس و جو آهسته:
{ name = "HTTP GET /order" } child. span. name = "SELECT" & child. duration > 50ms
10) مصنوعی و آپ تایم
Blackbox-exporter: نمونه های HTTP/TCP/TLS/DNS از مناطق ≥3/ASN.
بی سر: ورود/سپرده اسکریپت برنامه ریزی شده.
هشدار حد نصاب: باعث اگر ≥2 منطقه ای یک شکست را ببینید.
صفحه وضعیت: به روز رسانی خودکار + نظرات دستی.
11) ذخیره و نگهداری
معیارها: 7-30 روز گرم (ردیف های سریع)، قوانین downsampling/ضبط، ذخیره سازی شیء سرد (ماه ها).
سیاهههای مربوط: گرم برای 3-7 روز، سپس با یک شاخص (فروشگاه Loki chunk/ELK ILM) S3/GCS می شود.
آثار: 3-7 روز «همیشه _ روشن» + ذخیره سازی طولانی مدت برای نمونه (دم نمونه برداری/رد).
- چرخش در اندازه و زمان ؛ بودجه برای درخواست (سهمیه/محدودیت).
- سیاست های جداگانه برای تولید/مرحله و داده های امنیتی.
12) چند اجاره و دسترسی
جدا از «مستاجر »/« فضای نام »/فضاها، الگوهای شاخص و قطعنامه ها.
برچسب منابع برای صدور صورت حساب: «مستاجر»، «خدمات»، «تیم».
داشبورد واردات/هشدار - در فضاهای تیم های خاص.
13) ایمنی و انطباق
TLS/mTLS از عوامل به backends، HMAC برای سلامت خصوصی.
RBAC برای خواندن/نوشتن، ممیزی تمام درخواست ها و هشدارها.
نسخه PII در لبه ؛ ممنوعیت اسرار در سیاهههای مربوط ؛ DSAR/حقوقی نگه دارید.
جداسازی: خوشه های جداگانه/nymspaces برای دامنه های حساس.
14) FinOps: هزینه مشاهده پذیری
ما کاردینالیتی برچسب ها و منطق را در مصرف (و نه در درخواست ها) کاهش می دهیم.
نمونه برداری آهنگ + هدف همیشه در برای مسیرهای بحرانی.
قوانین Downsampling/ضبط برای تجمع سنگین.
بایگانی دسترسی نادر به شیء سرد.
Метрики: 'storage _ cost _ gb _ day', 'query _ cost _ hour', 'cost _ per _ rps', 'cost _ per _ 9'.
15) CI/CD و تست های قابل مشاهده
پیوند معیارها/سیاهههای مربوط در CI: ممنوعیت «انفجار» کاردینالیتی، تأیید هیستوگرام/واحد.
تست های قرارداد قابل مشاهده: معیارهای مورد نیاز/زمینه های ورود، 'trace _ id' در میان افزار.
Canary: حاشیه نویسی انتشار در نمودار، SLO-auto-rollback.
16) نمونه: نمایش داده شد سریع
نقاط پایانی با خطا:promql topk(10, sum by (route) (rate(http_requests_total{status=~"5.."}[5m])))
پردازنده:
promql sum by (namespace, pod) (rate(container_cpu_cfs_throttled_seconds_total[5m])) > 0
تاخیر کافکا:
promql max by (topic, group) (kafka_consumergroup_lag)
از سیاهههای مربوط به آهنگ (Loki → Tempo): عبور 'trace _ id' به عنوان یک لینک به Tempo UI/داشبورد.
17) کیفیت پشته: چک لیست
- توافق متریک/ورود به سیستم/ردیابی طرح ها و واحد.
- 'trace _ id' در سیاههها و معیارها، حفاری از پانل ها.
- هشدار SLO چند سوز بدون flapping (حد نصاب/چند پنجره).
- Downsampling، درخواست سهمیه، محدودیت گام/محدوده.
- کلاس های نگهداری و ذخیره سازی مستند و اعمال می شود.
- تجدید نظر RBAC/حسابرسی/PII گنجانده شده است.
- داشبورد: مالک، runbooks، ≤2 -3 صفحه نمایش، پاسخ سریع.
- FinOps-dashboard (حجم، هزینه، سخنرانان برتر).
18) برنامه پیاده سازی (3 تکرار)
1. MVP (2 هفته): پرومتئوس → میمیر، لوکی، تمپو ؛ جمع کننده OTel ؛ داشبورد اصلی و هشدارهای SLO ؛ نمونه های بلک باکس
2. مقیاس (3-4 هفته): نمونه برداری دم، downsampling، چند منطقه مصرف، RBAC/فضاهای، FinOps-داشبورد.
3. طرفدار (4 + هفته): بازگشت خودکار در SLO، synthetics بدون سر از مسیرهای کلیدی، Legal Hold، نمونه کارها و گزارش SLO.
19) ضد الگوهای
«گرافیک زیبا بدون SLO» - هیچ عمل → هیچ سود.
برچسب های کاردینالیتی بالا ('user _ id', 'request _ id') - انفجار حافظه و هزینه.
سیاهههای مربوط بدون JSON و بدون 'trace _ id' - هیچ همبستگی.
هشدار منابع به جای علائم - سر و صدا و فرسودگی در تماس.
عدم وجود سیاست های نگهداری - افزایش هزینه های کنترل نشده.
20) مینی سوالات متداول
چه چیزی را انتخاب کنید: Loki یا ELK ؟
ELK برای جستجوی پیچیده/چهره ؛ لوکی برای سناریوهای grep-like ارزانتر و سریعتر است. هیبرید اغلب استفاده می شود.
آیا همه نیاز به پیگیری دارند ؟
بله، حداقل در مسیرهای کلیدی (ورود، پرداخت، پرداخت) با نمونه برداری دم - این به طرز چشمگیری سرعت RCA را افزایش می دهد.
چگونه از صفر شروع کنیم ؟
OTEL Collector → Mimir/Loki/Tempo → SLO اساسی و نمونه های جعبه سیاه → سپس داشبورد و هشدار سوختگی.
مجموع
پشته مشاهده پذیری مجموعه ای از ابزارهای متفاوت نیست، بلکه یک سیستم سازگار است: استانداردهای داده های یکنواخت → همبستگی M-L-T → هشدار SLO و synthetics → ایمنی و FinOps. ضبط شماتیک، نظم و انضباط برچسب و حفظ، اتصال OTel، اضافه کردن drilldown و بازگشت خودکار - و شما قابلیت اطمینان قابل کنترل در هزینه قابل فهم است.