← شروع آموزش

WIUNIX ACADEMY

آموزش مانیتورینگ با Prometheus، Grafana و Docker Compose

صفحهٔ 3 از 6؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu 26.10بررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من11 مقدار قابل‌تغییر
08

قدم بعدی

تنظیم جمع‌آوری متریک را باز کنید

فایل بعدی را بسازید؛ نام سرویس‌ها در شبکهٔ Compose resolve می‌شود.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo nano '/srv/academy-monitor/config/prometheus.yml'
از کجا بدانم درست انجام شد؟

آمادهٔ ذخیرهٔ تنظیم بعدی است.

جمع‌آوری متریک بدون Docker API

پرومتئوس از خودش و فهرست تارگت‌های داخل یک پوشه متریک می‌گیرد. جایگزینی اتمیک فایل در پوشهٔ bindشده دیده می‌شود؛ bind کردن تک‌فایل می‌تواند بعد از جایگزینی به inode قبلی متصل بماند. برای یک نمونه از هر سرویس، DNS داخلی کافی است. Swarm یا چند replica به طراحی کشف و relabel جدا نیاز دارد. محدودیت نمونه و label از رشد ناخواسته می‌کاهد، اما جای بودجه‌بندی تعداد سری‌ها را نمی‌گیرد.

YAML · /srv/academy-monitor/config/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["prometheus:9090"]
  - job_name: compose-services
    sample_limit: 20000
    label_limit: 40
    label_value_length_limit: 256
    file_sd_configs:
      - files: ["/etc/prometheus/targets/*.json"]
        refresh_interval: 30s
09

قدم بعدی

تارگت file discovery را بسازید

فهرست تارگت هیچ رمز و توکنی ندارد. endpoint متریک در این سناریو basic auth جدا ندارد و در دسترس همسایه‌های قابل اعتماد شبکه و مدیر میزبان است. ورود گرافانا از داشبورد محافظت می‌کند، نه endpoint داخلی متریک. برای exporter بیرون از این شبکه، دسترسی، TLS، احراز هویت و محدودیت label را جداگانه طراحی کنید؛ localhost میزبان را داخل پرومتئوس قرار ندهید.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo tee '/srv/academy-monitor/config/targets/services.json' >/dev/null <<'JSON'
[{"targets":["grafana:3000"],"labels":{"service":"grafana","stack":"academy-monitor"}}]
JSON
از کجا بدانم درست انجام شد؟

JSON معتبر با یک تارگت گرافانا ساخته شد.

10

قدم بعدی

دیتاسورس پرومتئوس را از فایل بسازید

URL دیتاسورس از داخل کانتینر گرافانا resolve می‌شود و نباید آدرس تونل مرورگر باشد. UID ثابت، داشبورد را به همین منبع وصل می‌کند. تنظیم فایل در شروع سرویس اعمال می‌شود؛ تغییر موقت در UI جای اصلاح منبع را نمی‌گیرد. در این آزمایشگاه محدود، endpoint خصوصی پرومتئوس رمز جدا ندارد.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo tee '/srv/academy-monitor/config/datasources/prometheus.yaml' >/dev/null <<'YAML'
apiVersion: 1
datasources:
  - name: Academy Prometheus
    uid: academy-prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true
    editable: false
    jsonData:
      httpMethod: POST
      timeInterval: 15s
YAML
از کجا بدانم درست انجام شد؟

فایل دیتاسورس با UID ثابت و URL داخلی موجود است.

11

قدم بعدی

پوشهٔ داشبورد را معرفی کنید

داشبورد از فایل نگهداری می‌شود. ذخیره از UI غیرفعال است تا ویرایش ظاهراً موفق با restart از بین نرود. پوشهٔ فقط‌خواندنی داشبورد از محل دیتابیس قابل نوشتن جداست.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo tee '/srv/academy-monitor/config/dashboards/academy.yaml' >/dev/null <<'YAML'
apiVersion: 1
providers:
  - name: academy
    orgId: 1
    folder: Academy
    type: file
    disableDeletion: true
    allowUiUpdates: false
    updateIntervalSeconds: 30
    options:
      path: /var/lib/grafana/dashboards
YAML
از کجا بدانم درست انجام شد؟

provider به پوشهٔ mountشدهٔ داشبورد اشاره می‌کند.

12

قدم بعدی

داشبورد کوچک و قابل بررسی را بسازید

این فایل دو پنل کاربردی دارد و پلاگین یا داشبورد ناشناخته از بازار وارد نمی‌کند. مقدار up=1 یعنی scrape موفق بوده و سلامت کسب‌وکار را ثابت نمی‌کند؛ حافظهٔ فرایند هم کل RAM میزبان یا کانتینر نیست. cgroup، فایل‌سیستم میزبان، بررسی از بیرون و ارسال هشدار به ابزاربندی جدا احتیاج دارند. داشبورد node_exporter را وارد نکنید و وجود متریک میزبان را فرض نگیرید.

Bash

سرور اختصاصی لینوکس؛ پوستهٔ Bash

sudo tee '/srv/academy-monitor/dashboards/compose.json' >/dev/null <<'JSON'
{
  "uid": "academy-compose",
  "title": "Compose service health",
  "schemaVersion": 39,
  "version": 1,
  "editable": false,
  "timezone": "browser",
  "refresh": "15s",
  "time": {
    "from": "now-30m",
    "to": "now"
  },
  "panels": [
    {
      "id": 1,
      "type": "timeseries",
      "title": "Scrape health (1 up / 0 failed)",
      "gridPos": {
        "h": 8,
        "w": 24,
        "x": 0,
        "y": 0
      },
      "datasource": {
        "type": "prometheus",
        "uid": "academy-prometheus"
      },
      "targets": [
        {
          "refId": "A",
          "expr": "up",
          "legendFormat": "{{job}} / {{instance}}"
        }
      ],
      "fieldConfig": {
        "defaults": {
          "min": 0,
          "max": 1
        },
        "overrides": []
      },
      "options": {
        "legend": {
          "displayMode": "list",
          "placement": "bottom"
        }
      }
    },
    {
      "id": 2,
      "type": "timeseries",
      "title": "Process resident memory \u2014 not host RAM",
      "gridPos": {
        "h": 8,
        "w": 24,
        "x": 0,
        "y": 8
      },
      "datasource": {
        "type": "prometheus",
        "uid": "academy-prometheus"
      },
      "targets": [
        {
          "refId": "A",
          "expr": "process_resident_memory_bytes",
          "legendFormat": "{{job}} / {{instance}}"
        }
      ],
      "fieldConfig": {
        "defaults": {
          "unit": "bytes"
        },
        "overrides": []
      },
      "options": {
        "legend": {
          "displayMode": "list",
          "placement": "bottom"
        }
      }
    }
  ]
}
JSON
از کجا بدانم درست انجام شد؟

داشبورد به academy-prometheus و کوئری‌های up و حافظهٔ فرایند متصل است.

همهٔ آموزش‌های آکادمی ↗