مستوى المقال: متوسط (Intermediate). يفترض إنك اشتغلت قبل كده على Kubernetes وكتبت YAML، وعندك خبرة بسيطة مع stack الـ ELK أو أي نظام logs مركزي.
Grafana Loki: استبدل Elasticsearch ووفّر 92% من فاتورة الـ Logs
لو فريقك بيدفع $2,400 شهرياً في Elasticsearch علشان يخزّن 80GB logs يومياً من 14 microservice، انت بتدفع 92% من الفاتورة في خاصية مش بتحتاجها فعلاً: full-text indexing لكل سطر log. المقال ده بيوريك ازاي تستبدل ده بـ Grafana Loki، تنزّل الفاتورة لـ $180 شهرياً، وتفضل تقدر تبحث في الـ logs بنفس السرعة لما الـ query بيعتمد على labels.
المشكلة باختصار
Elasticsearch بيبني inverted index لكل token في كل سطر log. ده معناه إن كل byte بيتخزّن مرتين على الأقل: مرة في الـ raw document، ومرة كـ entries في الـ inverted index. على workload فيه 80GB/يوم، الـ storage الفعلي بيوصل 220-280GB يومياً بعد الـ indexing والـ replication. الـ ROI بيبقى سلبي لما 95% من الـ queries بتكون "ورّيني logs الخدمة X في آخر ساعة" — سؤال مش محتاج full-text أصلاً.
ازاي Loki مختلف بشكل جذري
Loki بياخد فكرته من Prometheus: مش بيـ index غير الـ labels (يعني service=checkout, level=error, env=prod). الـ raw log line بيتضغط بـ snappy وبيتخزّن في object storage زي S3 أو MinIO. لو قارنّا التكلفة على 80GB/يوم:
- Elasticsearch + EBS gp3: حوالي $2,400/شهر (حسبة AWS Calculator على us-east-1).
- Loki + S3 Standard: حوالي $180/شهر بنفس فترة الاحتفاظ (30 يوم).
مثال بسيط للمبتدئ — فكر فيها كده
تخيّل إنك بتدير مكتبة فيها مليون كتاب. عندك طريقتين تنظّمهم:
- الطريقة الأولى (Elasticsearch): تعمل فهرس لكل كلمة في كل كتاب. لو حد سأل عن "الذكاء الاصطناعي"، تلاقي النتيجة في 30 ثانية، بس كل كتاب جديد بيكبّر الفهرس بـ 5× حجمه. المخزن لازم يكون ضخم وفاتورة الكهربا عالية.
- الطريقة الثانية (Loki): تنظّم الكتب على أرفف حسب نوعهم (روايات، علوم، تاريخ). لو حد سأل "ورّيني روايات عن البحر"، تفتح رف الروايات وتقلّب فيه. سريع جداً لو عارف الرف الصح، وأبطأ شوية لو محتاج تقلّب 50 كتاب من الرف. لكن مساحة المخزن انضغطت 80%.
ركز في الفرق: لو 95% من أسئلتك بتاعتك "ايه اللي حصل في خدمة كذا في آخر ساعة"، طريقة Loki أرخص بكتير وأسرع برضه.
تعريف علمي للـ Inverted Index و Label Index
الـ inverted index في Elasticsearch بيبنى على خوارزمية BM25 (Robertson 1995) اللي بتحسب tf-idf score لكل token. ده ممتاز للـ relevance scoring في search engines، بس مكلف جداً للـ time-series logs. Loki بيستخدم فكرة "log streams" — كل combination فريد من labels = stream له ID خاص، وبيتم تخزين الـ chunks الخاصة بيه مع timestamps. لما تيجي تستعلم، Loki بيستخدم الـ labels علشان يحدد streams معينة، وبعدها بيعمل linear scan على chunks الخاصة بيهم.