تخطَّ إلى المحتوى

Quickwit - محرك بحث محلي السحابة للسجلات (Cheatsheet)

Quickwit - محرك بحث محلي السحابة للسجلات (Cheatsheet)

Quickwit هي محرك بحث مصمم لبيانات إلحاق فقط مفتوحة المصدر ومكتوبة بـ Rust — السجلات والتتبعات والأحداث المراجعة — التي تعمل مباشرة على تخزين الكائنات (S3, GCS, Azure). بخلاف Elasticsearch، فإنها لا تحتاج إلى قرص محلي أو ماكينة حالة الكتلة للفهارس، التي تفصل الحوسبة عن التخزين وتجعل الاحتفاظ على نطاق petabyte اقتصادي. تعريض API بحث متوافق مع Elasticsearch وهي خلفية Jaeger أصلية للتتبعات.

التثبيت

الطريقةالأمر
سكريبت التثبيت`curl -L https://install.quickwit.io
Dockerdocker run -p 7280:7280 quickwit/quickwit run
Kubernetesمخطط Helm متاح
بدء عقدة./quickwit run
واجهة المستخدم / APIhttp://localhost:7280

المفاهيم الأساسية

المصطلحالمعنى
فهرسمجموعة بيانات مسماة بخريطة doc
تقسيمشظية مفهرسة غير قابلة للتغيير مخزنة في تخزين الكائنات
Metastoreيتتبع الفهارس/التقسيمات (ملف أو PostgreSQL)
المصدرحيث تأتي المستندات (Kafka، ملف، ingest API)
أدوار العقدةindexer، searcher، metastore، control plane

إنشاء فهرس

# index-config.yaml
version: 0.8
index_id: app-logs
doc_mapping:
  field_mappings:
    - name: timestamp
      type: datetime
      fast: true
      input_formats: [rfc3339, unix_timestamp]
    - name: level
      type: text
      tokenizer: raw
    - name: service
      type: text
      tokenizer: raw
    - name: message
      type: text
      tokenizer: default
  timestamp_field: timestamp
indexing_settings:
  commit_timeout_secs: 30
search_settings:
  default_search_fields: [message]
quickwit index create --index-config index-config.yaml

استيعاب البيانات

الطريقةالأمر
ملفquickwit index ingest --index app-logs --input-path logs.json
Stdin`cat logs.json
Ingest APIPOST /api/v1/app-logs/ingest
مصدر Kafkaحدد مصدراً في إعداد الفهرس
OTLPنقطة نهاية OpenTelemetry الأصلية للسجلات/التتبعات
curl -XPOST "http://localhost:7280/api/v1/app-logs/ingest" \
  --data-binary @logs.ndjson

البحث

# بحث CLI
quickwit index search --index app-logs --query "level:ERROR AND service:api"

# بحث REST
curl "http://localhost:7280/api/v1/app-logs/search?query=level:ERROR&max_hits=20"
صيغة الاستعلامالمطابقة
termمصطلح نصي كامل في الحقول الافتراضية
field:valueتطابق الحقل الدقيق
a AND b, a OR b, NOT aالمنطق البوليني
field:[10 TO 100]نطاق
"exact phrase"مطابقة العبارة
field:prefix*مطابقة البادئة

التجميعات والمرشحات الزمنية

# بحث محدود بالوقت (يستخدم حقل الطابع الزمني السريع)
curl "http://localhost:7280/api/v1/app-logs/search?query=*&start_timestamp=1753400000&end_timestamp=1753486400"

Quickwit يدعم تجميعات بنمط Elasticsearch، لذا غالباً ما تنقل الاستعلامات والرسوم البيانية الموجودة مع تغيير قليل.

إدارة الفهارس

الأمرالوصف
quickwit index listقائمة الفهارس
quickwit index describe --index Xإظهار إحصائيات/تقسيمات
quickwit index clear --index Xحذف جميع المستندات
quickwit index delete --index Xحذف الفهرس
quickwit split list --index Xفحص التقسيمات

الاحتفاظ

retention:
  period: 90 days
  schedule: daily

لأن التقسيمات تعيش في تخزين الكائنات، الاحتفاظ هو فقط حذف التقسيمات القديمة — رخيصة وسريعة.

التكاملات

الهدفملاحظة
JaegerQuickwit هي خلفية تخزين Jaeger الأصلية
Grafanaمكون مصدر البيانات للرسوم البيانية
OpenTelemetryاستيعاب OTLP الأصلي للسجلات والتتبعات
Elasticsearch APIنقاط النهاية للبحث المتوافقة تسهل الهجرة

Quickwit مقابل البدائل

الجانبQuickwitElasticsearchLoki
التخزينتخزين الكائنات فقطقرص محليتخزين الكائنات
فهرس النص الكاملنعم (بحث حقيقي)نعمالتصفية المستندة إلى التسميات، محدودة
التكلفة في الحجممنخفضة جداًعاليةمنخفضة
التتبعاتخلفية Jaeger الأصليةإضافات APMعبر Tempo
الأفضل لـاحتفاظ سجل/تتبع قابل للبحث رخيصالبحث العامسجلات Grafana-native

قارن مع Loki و OpenObserve؛ اقترن مع Vector للابتلاع.

الموارد