پرش به محتویات

شب ۲۶: لاگ، متریک، ردیابی و SLO

بخش ۲۶ از مجموعهٔ آموزش Traefik در ۳۰ شب؛ هر جلسه برای ۶۰ تا ۹۰ دقیقه مطالعه، تمرین عملی، بررسی نتیجه و تمرین رفع خرابی طراحی شده است. مثال‌ها مطابق منبع با Traefik Proxy v3.7 نوشته شده‌اند؛ برای محیط عملیاتی نسخهٔ اصلاحی آزموده‌شده یا digest مشخصی را ثابت کنید. تمرین‌ها را روی میزبان یا کلاستر آزمایشگاهی اجرا کنید.

فهرست کامل دورهٔ ترافیک در ۳۰ شب

هدف‌های یادگیری

  • تولید لاگ ساخت‌یافته، متریک Prometheus و traceهای OpenTelemetry.
  • مرتبط‌کردن نشانه‌های یک درخواست بدون افشای اطلاعات محرمانه.
  • تعریف شاخص سطح خدمت و هشدار قابل‌اقدام.

تمرین عملی: تنظیمات راه‌اندازی و ارتباط نشانه‌ها

log:
  level: INFO
  format: json
accessLog:
  format: json
  filters:
    statusCodes: ["400-599"]
    retryAttempts: true
  fields:
    defaultMode: keep
    headers:
      defaultMode: drop
      names:
        User-Agent: keep
metrics:
  prometheus:
    addEntryPointsLabels: true
    addRoutersLabels: true
    addServicesLabels: true
    entryPoint: metrics
tracing:
  serviceName: traefik
  sampleRate: 0.1
  otlp:
    http:
      endpoint: http://otel-collector:4318/v1/traces
entryPoints:
  metrics: {address: ":9100"}

entrypoint متریک را در شبکهٔ مدیریت و پشت فایروال نگه دارید؛ آن را از روی عادت منتشر نکنید. هنگام ارتقا کلید دقیق گزینه‌های OTLP را با نسخهٔ فرعی ثابت‌شدهٔ Traefik تطبیق دهید.

نمونهٔ جمع‌آوری متریک در Prometheus:

scrape_configs:
  - job_name: traefik
    static_configs:
      - targets: [traefik:9100]
curl -fsS http://traefik:9100/metrics | head
curl -H 'X-Request-ID: night-26-001' \
  --resolve whoami.example.test:80:127.0.0.1 http://whoami.example.test/
docker compose logs --since=2m traefik | jq -c 'select(.RequestHost? == "whoami.example.test")'

چند نقطهٔ شروع مفید برای PromQL؛ نام و برچسب متریک را در سری‌های خروجی خود بررسی کنید:

sum(rate(traefik_service_requests_total{code=~"5.."}[5m]))
/
sum(rate(traefik_service_requests_total[5m]))

histogram_quantile(0.95,
  sum by (le) (rate(traefik_service_request_duration_seconds_bucket[5m])))

SLI دسترس‌پذیری را از درخواست‌های موفق مشاهده‌شده از بیرون و SLI تأخیر را برای درخواست‌های زیر آستانهٔ مهم برای کاربر تعریف کنید. برای مصرف مداوم بودجهٔ خطا، نبود نمونهٔ آماده، انقضای گواهی، شکست بازخوانی ارائه‌دهنده و خرابی صفحهٔ کنترل یا API هشدار بسازید؛ هر خطای منفرد 5xx نباید هشدار ایجاد کند.

فهرست بهره‌برداری

  • Authorization، Cookie، Set-Cookie و دادهٔ حساس query یا هدر را حذف یا پنهان کنید.
  • فقط وقتی تعداد مقادیر متمایز محدود است، برچسب مسیریاب یا سرویس اضافه کنید.
  • لاگ‌ها را بچرخانید و ارسال کنید و دورهٔ نگه‌داری تعیین کنید.
  • بر اساس حجم و ریسک از traceها نمونه‌برداری کنید؛ اگر ابزار اجازه می‌دهد خطاها را با نرخ بیشتری نگه دارید.
  • داشبورد مسیر را به سرویس و سپس نمونه پیوند می‌دهد و یادداشت انتشار دارد.
  • کاوش آزمایشی، DNS عمومی، متعادل‌کنندهٔ بار و TLS را پوشش می‌دهد، نه فقط /ping را.

نکته‌های عیب‌یابی

  • متریک وجود ندارد: آدرس یا پورت مدیریت، فایروال، مسیر scrape یا هدف Prometheus نادرست است.
  • تعداد سری‌ها شدیداً رشد می‌کند: مقادیر برچسب مسیر، سرویس یا نام میزبان نامحدودند.
  • trace ناقص است: نمونه‌برداری، انتشار context، endpoint یا پروتکل collector یا ابزارگذاری پشت‌صحنه متفاوت است.
  • لاگ دسترسی موفقیت‌ها را ندارد: مثال عمداً فقط خطاها را نگه می‌دارد؛ برای بررسی کامل آزمایشگاه فیلترها را حذف کنید.

خودآزمایی

  1. چرا /ping برای SLI کافی نیست؟ DNS عمومی، متعادل‌کنندهٔ بار، TLS، مسیرها و پشت‌صحنه‌ها را دور می‌زند.
  2. کدام هدرها باید پیش‌فرض حذف شوند؟ هدرهای اعتبارنامه، نشست و اطلاعات خصوصی.
  3. چه چیزی هشدار را قابل‌اقدام می‌کند؟ ارتباط با اثر روی کاربر و دستورالعمل عملیات و پرهیز از نویز گذرا.
  4. اثبات کنید: یک 404 و یک خطای پشت‌صحنه بسازید، هر دو را در لاگ و متریک بیابید و یک trace نمونه‌برداری‌شده پیدا کنید.