OpenObserve - منصة الملاحظة على نطاق Petabyte (Cheatsheet)
OpenObserve (O2) هي منصة ملاحظة مفتوحة المصدر للسجلات والمقاييس والتتبعات، مكتوبة بـ Rust. اختيارها التصميمي المحدد هو تخزين البيانات في تخزين الكائنات (S3, GCS, MinIO) في Parquet مضغوط بدلاً من الأقراص المحلية المكلفة — الأساس لمطالبتها بانخفاض كبير في تكاليف التخزين مقارنة بـ Elasticsearch-based stacks. يأتي كملف ثنائي واحد مع واجهة مستخدم مدمجة، ويتحدث OpenTelemetry بشكل أصلي، ويستعلم بـ SQL.
التثبيت
| الطريقة | الأمر |
|---|
| ملف ثنائي | تحميل من GitHub Releases، ثم ./openobserve |
| Docker | docker run -d -p 5080:5080 -e ZO_ROOT_USER_EMAIL=a@b.c -e ZO_ROOT_USER_PASSWORD=pass public.ecr.aws/zinclabs/openobserve:latest |
| Kubernetes | مخطط Helm متاح |
| واجهة المستخدم | http://localhost:5080 |
| التحقق | تسجيل الدخول مع بيانات الاعتماد الجذر التي حددتها |
أوضاع التخزين
| الوضع | الاستخدام |
|---|
| قرص محلي | عقدة واحدة، نشرات dev/صغيرة |
| S3 / GCS / Azure Blob | الإنتاج، الاحتفاظ بعيد المدى رخيص |
| MinIO | تخزين كائنات مستضاف ذاتياً |
# أشر إلى S3 لتخزين الإنتاج
export ZO_LOCAL_MODE=false
export ZO_S3_BUCKET_NAME=my-o2-bucket
export ZO_S3_REGION_NAME=us-east-1
استيعاب البيانات
| المصدر | كيف |
|---|
| OpenTelemetry | أرسل OTLP إلى /api/{org}/v1/traces, /v1/logs, /v1/metrics |
| HTTP JSON | POST /api/{org}/{stream}/_json |
| Fluent Bit / Vector | بلاجين إخراج إلى نقطة نهاية HTTP من O2 |
| Prometheus remote write | /api/{org}/prometheus/api/v1/write |
| Syslog | مستمع TCP/UDP |
# السجلات المضغوطة بكمية كبيرة
curl -u "$USER:$PASS" -X POST \
"http://localhost:5080/api/default/app_logs/_json" \
-H "Content-Type: application/json" \
-d '[{"level":"error","message":"db timeout","service":"api"}]'
الاستعلام (SQL)
-- ابحث عن أخطاء حديثة لخدمة واحدة
SELECT * FROM app_logs
WHERE level = 'error' AND service = 'api'
ORDER BY _timestamp DESC
LIMIT 100;
-- عد الأخطاء لكل خدمة على مدى الوقت
SELECT service, count(*) AS errors
FROM app_logs
WHERE level = 'error'
GROUP BY service
ORDER BY errors DESC;
| الميزة | ملاحظة |
|---|
| استعلامات SQL | صيغة مألوفة على تدفقات السجل |
| البحث بنص كامل | match_all('timeout') |
| نطاق زمني | محدد في الواجهة أو عبر مرشحات _timestamp |
| استعلامات محفوظة | استعلامات قابلة لإعادة الاستخدام |
المفاهيم الأساسية
| المصطلح | المعنى |
|---|
| المنظمة | أعلى مستوى مستأجر |
| التدفق | تدفق البيانات المسمى (مثل فهرس) |
| المخطط | مستدل من البيانات المستوعبة |
| الدالة | تحويل VRL المطبق عند الابتلاع أو الاستعلام |
| التنبيه | استعلام مجدول + وجهة |
التنبيهات والرسوم البيانية
| الإمكانية | كيف |
|---|
| تنبيه مجدول | استعلام + حد + فترة التقييم |
| تنبيه فوري | تشغيل على السجلات المستوعبة المطابقة |
| الوجهات | Webhook, Slack, email, PagerDuty |
| لوحات تحكم | بناء الألواح من استعلامات SQL |
| القوالب | تنسيقات رسالة التنبيه القابلة لإعادة الاستخدام |
وظائف الابتلاع (VRL)
# تحرير حقل واشتقاق واحد جديد عند الابتلاع
.email = "REDACTED"
.status_class = floor(.status / 100)
تتيح الدوال صرف PII أو إثراء السجلات قبل التخزين — أرخص من فعل ذلك في وقت الاستعلام.
OpenObserve مقابل البدائل
| الجانب | OpenObserve | Elasticsearch/ELK | Grafana Loki |
|---|
| التخزين | تخزين الكائنات (Parquet) | فهارس القرص المحلي | تخزين الكائنات (chunks) |
| ملف التعريف التكلفة | منخفض جداً | عالي | منخفض |
| الاستعلام | SQL | Query DSL / KQL | LogQL |
| الاختصاص | السجلات + المقاييس + التتبعات | السجلات (+ APM) | السجلات (مكدس Grafana للباقي) |
| الإعداد | ملف ثنائي واحد | مكونات متعددة | مكونات متعددة |
اقترن مع OpenTelemetry للأداة؛ قارن مع Grafana Loki و Elasticsearch.
الموارد