لماذا تخزين مخصّص لمقاييسك
يجمع Prometheus وحده بين مهمّتين: جمع مقاييس خدماتك كل خمس عشرة ثانية، وتخزينها. الأولى خفيفة، والثانية تكبر مع كل سلسلة وكل يوم من السجل. فينتهي الأمر بتقليص مدة الاحتفاظ إلى بضعة أسابيع، ويبقى سؤال «هل كان زمن الاستجابة بهذا الارتفاع في الربع الماضي؟» بلا جواب.
تفصل VictoriaMetrics بين المهمّتين. يواصل Prometheus — أو Grafana Alloy أو vmagent أو Telegraf — الجمع، ثم يرسل كل نقطة إلى VictoriaMetrics التي تضغطها وتحتفظ بها. ولأنها تجيب على واجهة استعلام Prometheus، يستعلم منها Grafana دون تغيير أي لوحة.
ما تقدّمه VictoriaMetrics
- متوافقة مع Prometheus — هدف
remote_writeوواجهة استعلام Prometheus ومصدر بيانات Grafana دون إضافة. - PromQL وMetricsQL — تعمل استعلامات PromQL كما هي، وتضيف MetricsQL دوالّ أكثر عملية.
- تخزين مضغوط — ضغط قوي للسلاسل، واحتفاظ لعدة أشهر على قرص متواضع.
- بروتوكولات متعددة — InfluxDB line protocol وGraphite وOpenTSDB وOpenTelemetry واستيراد CSV وJSON.
- واجهة vmui — استكشاف السلاسل والرسوم البيانية وتحليل التعدّدية وأبطأ الاستعلامات.
- ملف تنفيذي واحد — حاوية واحدة بلا أي اعتماد خارجي، وبضع عشرات من الميغابايتات من الذاكرة في وضع الخمول.
VictoriaMetrics مقارنة بالتخزين المحلي لـ Prometheus
مرّر الجدول أفقيًا
| VictoriaMetrics | Prometheus وحده | |
|---|---|---|
| مدة الاحتفاظ المعتادة | من عدة أشهر إلى عدة سنوات | خمسة عشر يومًا افتراضيًا |
| تجميع عدة خوادم | نعم، عبر remote_write | لا، نسخة لكل نطاق |
| لغة الاستعلام | PromQL وMetricsQL | PromQL |
| صيغ الاستقبال | Prometheus وInfluxDB وGraphite وOpenTSDB وOTLP | جمع Prometheus |
| Grafana | مصدر بيانات Prometheus | مصدر بيانات Prometheus |
| جمع الأهداف | ممكن، لكن يُترك لـ Prometheus أو vmagent | نعم، هذا دوره |
المتطلبات
يكفي VPS بنظام Ubuntu 24.04 وذاكرة 1 غيغابايت للبدء؛ خطّط لـ 2 غيغابايت وقرص أكبر إذا كنت تجمع خوادم كثيرة. تحتاج إلى Docker مع إضافة Compose، وإلى اسم نطاق يشير إلى الخادم مع nginx وشهادة HTTPS: سترسل خوادمك مقاييسها إليه وسيستعلم منه Grafana، لذا يجب أن يكون العنوان ثابتًا ومشفّرًا.
من الأفضل تثبيت VictoriaMetrics على خادم منفصل عن الخوادم التي تراقبها: إن سقطت معها فقدتَ بالضبط البيانات التي تشرح العطل.
تثبيت VictoriaMetrics باستخدام Docker Compose
تحضير المجلد وكلمة المرور
أنشئ مجلد التطبيق وملف
.envيحمل كلمة مرور المستخدمadmin.mkdir -p /opt/victoriametrics && cd /opt/victoriametrics echo "ADMIN_PASSWORD=$(openssl rand -hex 16)" > .env chmod 600 .envكتابة ملف docker-compose.yml
يُنشر المنفذ على واجهة الحلقة المحلية فقط: لا يصل إليه سوى nginx. يحمي الخياران
-httpAuthكل نقاط الوصول — الواجهة والاستعلامات والاستقبال. ويحتفظ-retentionPeriod=12باثني عشر شهرًا من البيانات.services: victoriametrics: image: victoriametrics/victoria-metrics:v1.155.0 restart: unless-stopped ports: - "127.0.0.1:8428:8428" command: - -storageDataPath=/storage - -retentionPeriod=12 - -httpAuth.username=admin - -httpAuth.password=${ADMIN_PASSWORD} - -selfScrapeInterval=30s volumes: - victoriametrics-data:/storage volumes: victoriametrics-data: {}تشغيل الحاوية
يستغرق التشغيل أقل من ثانية. يجب أن يعرض السجل «started VictoriaMetrics» ثم بدء جمع مقاييسها الخاصة.
docker compose up -d docker compose logs --tail 20النشر عبر HTTPS باستخدام nginx
في ملف vhost الخاص بنطاقك (الشهادة من certbot)، وجّه الطلبات إلى المنفذ المحلي. ارفع قيمة
client_max_body_size: دفعاتremote_writeتتجاوز الحد الافتراضي بسرعة.location / { proxy_pass http://127.0.0.1:8428; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 64m; }
دون كلمة مرور، تكون القاعدة مفتوحة للكتابة
دون الخيارين -httpAuth، يستطيع كل من يعرف العنوان قراءة جميع مقاييسك وكتابة مقاييس مزيّفة، بل وحذف سلاسل عبر واجهة الإدارة. أبقِ المصادقة مفعّلة، ولا تنشر المنفذ 8428 مباشرة على عنوان IP العام: مرّ دائمًا عبر الوكيل العكسي HTTPS.
إرسال المقاييس من Prometheus
على كل خادم يشغّل Prometheus، أضف كتلة remote_write إلى prometheus.yml ثم أعد تحميل Prometheus. يواصل الجمع كما كان ويكرّر كل نقطة نحو VictoriaMetrics.
remote_write:
- url: https://metrics.example.com/api/v1/write
basic_auth:
username: admin
password: "<ADMIN_PASSWORD>"تحقّق بعد ذلك من وصول البيانات: يجب أن تجيب سلسلة up الخاصة بأهدافك. تظهر النقاط الحديثة بعد نحو ثلاثين ثانية، وهو تأخير طبيعي تطبّقه VictoriaMetrics على الاستعلامات الفورية.
curl -u admin:<ADMIN_PASSWORD> \
'https://metrics.example.com/api/v1/query?query=up'الاستعلام من VictoriaMetrics عبر Grafana
في Grafana أضف مصدر بيانات من نوع Prometheus بالعنوان https://metrics.example.com، وفعّل Basic auth وأدخل المستخدم admin وكلمة المرور. تعمل لوحاتك الحالية — Node Exporter Full مثلًا — دون تعديل، على كامل عمق السجل المحفوظ.
للاستكشاف دون Grafana، افتح https://metrics.example.com/vmui: ترسم الواجهة المدمجة الاستعلامات وتسرد السلاسل وتُظهر، في تبويب التعدّدية، أي المقاييس أكثر كلفة في التخزين.
مدة الاحتفاظ والقرص والنسخ الاحتياطي
تُضبط مدة الاحتفاظ بالخيار -retentionPeriod: الرقم وحده يعدّ أشهرًا، واللواحق d وw وy تعدّ أيامًا وأسابيع وسنوات. تعتمد المساحة المستخدمة أساسًا على عدد السلاسل النشطة وتواتر الجمع: قِسها بعد أسبوع (du -sh على المجلد) بدل تقديرها. للنسخ الاحتياطي، تلتقط الأداة الرسمية vmbackup لقطات متّسقة دون إيقاف القاعدة؛ وإلا فأوقف الحاوية قبل نسخ المجلد.
إرسال المقاييس دون Prometheus
ليس Prometheus ممرًّا إلزاميًا. تقبل VictoriaMetrics مباشرة الصيغة النصية لـ Prometheus وline protocol الخاص بـ InfluxDB وGraphite وOpenTSDB وOpenTelemetry. يمكن إذن لتطبيق ما أن يدفع عدّاداته الخاصة باستدعاء HTTP بسيط — وهذا مفيد لمقياس تجاري أو سكربت نسخ احتياطي أو مهمة مجدولة لا تدوم طويلًا بما يكفي ليتم جمعها.
curl -u admin:<ADMIN_PASSWORD> \
-d 'orders_total{shop="casa"} 1284' \
https://metrics.example.com/api/v1/import/prometheusإن كنت تستخدم Telegraf أصلًا، فوجّه مخرج InfluxDB الخاص به إلى https://metrics.example.com ببيانات الاعتماد نفسها: تقدّم VictoriaMetrics نفسها كقاعدة InfluxDB للكتابة. ولجمع الأهداف دون تثبيت Prometheus على كل خادم، يقرأ الوكيل الخفيف vmagent إعداد scrape_configs نفسه الذي يستخدمه Prometheus ويرسل كل شيء عبر remote_write؛ ويحتفظ بالنقاط مؤقتًا على القرص إذا تعذّر الوصول إلى VictoriaMetrics لحظيًا.
التحكّم في التعدّدية
لا تعتمد كلفة قاعدة بيانات السلاسل الزمنية على عدد النقاط، بل على عدد السلاسل: كل تركيبة فريدة من اسم المقياس والتسميات تُنشئ سلسلة. والتسمية التي تحمل معرّف مستخدم أو عنوان IP أو رابطًا كاملًا تضاعف السلاسل بالآلاف، وهي التي تملأ الذاكرة والقرص — مع VictoriaMetrics كما مع Prometheus.
يسرد تبويب Cardinality في vmui المقاييس والتسميات التي تُنتج أكبر عدد من السلاسل. راجعه بعد ربط أي خدمة جديدة: تُصحَّح التسمية ذات القيم غير المحدودة من مصدرها، في التطبيق أو بقاعدة metric_relabel_configs في جهة Prometheus، قبل أن تملأ أشهرًا من التخزين.
تحديث VictoriaMetrics
ينشر المشروع إصدارًا جديدًا عدة مرات في الشهر، مع ملاحظات إصدار مفصّلة. وتبقى صيغة التخزين متوافقة من إصدار إلى آخر: يكفي للتحديث تغيير رقم الصورة في docker-compose.yml ثم إعادة تشغيل الحاوية. يُحتفظ بمجلد البيانات، ويمتصّ التخزين المؤقت لدى Prometheus أو vmagent الانقطاع القصير أثناء إعادة التشغيل، إذ يعيد إرسال النقاط المعلّقة.
cd /opt/victoriametrics
docker compose pull
docker compose up -dتثبيت بنقرة واحدة من متجر ServOrbit
يثبّت متجر ServOrbit تطبيق VictoriaMetrics على خادمك دون سطر أوامر: ينشر الحاوية الرسمية، ويولّد كلمة مرور المستخدم admin، ويفعّل المصادقة على كل نقاط الوصول، وينشر الواجهة عبر HTTPS على نطاق فرعي من نطاقك أو على النطاق الفرعي المجاني للخادم. تظهر كلمة المرور في مساحة العميل؛ ولا يبقى سوى إضافة كتلة remote_write إلى خوادمك ومصدر البيانات في Grafana.