معرفی
لوکی (Grafana Loki) سامانهای متنباز برای ذخیرهسازی و جستوجوی لاگها است که توسط Grafana Labs توسعه داده میشود. این ابزار برای بررسی لاگ سرویسها، کانتینرها و زیرساخت کاربرد دارد و معمولاً در کنار Grafana برای مشاهده و تحلیل لاگها استفاده میشود.
تفاوت مهم لوکی با بسیاری از سامانههای مدیریت لاگ این است که متن کامل هر خط لاگ را ایندکس نمیکند. در عوض، برچسبها (Labels)، مانند نام سرویس، محیط اجرا و فضای نام Kubernetes، برای شناسایی و محدودکردن جریانهای لاگ ایندکس میشوند. متن لاگ هنگام اجرای پرسوجو بررسی میشود. این معماری میتواند هزینه ذخیرهسازی و ایندکسسازی را کاهش دهد، اما انتخاب برچسبهای مناسب اهمیت زیادی دارد. برچسبهای بسیار متنوع، مانند شناسه کاربر یا شناسه درخواست، ممکن است تعداد جریانهای لاگ را افزایش دهند و به عملکرد سامانه آسیب بزنند.
مهندسان دواپس، مهندسان زیرساخت و توسعهدهندگان بکاند از لوکی برای بررسی خطاهای محیط عملیاتی، تحلیل رخدادها و ارتباطدادن لاگها با متریکها و تریسها استفاده میکنند. زبان پرسوجوی LogQL امکان فیلترکردن لاگها، جستوجوی الگوهای متنی و استخراج سنجههای مبتنی بر لاگ را فراهم میکند. این سنجهها را میتوان در Grafana برای ساخت نمودار و تعریف هشدار به کار برد.
Loki نرمافزاری متنباز است و میتوان آن را بدون پرداخت هزینه مجوز، روی زیرساخت شخصی مستقر کرد. با این حال، منابع پردازشی، فضای ذخیرهسازی، انتقال داده و نگهداری زیرساخت ممکن است هزینه داشته باشند. استفاده از سرویس میزبانیشده Grafana Cloud نیز تابع شرایط و طرح قیمتگذاری آن است.
ویژگیهای کلیدی
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
ایندکسسازی بر پایه برچسب
لوکی برچسبهای هر جریان لاگ را ایندکس میکند، نه متن کامل خطوط لاگ را. برچسبهایی مانند service، namespace و environment به محدودکردن جستوجو کمک میکنند. انتخاب برچسبهایی با تعداد مقادیر متمایز کم، برای حفظ کارایی و کنترل هزینه اهمیت دارد.
-
زبان پرسوجوی LogQL
LogQL زبان پرسوجوی Loki است و برای انتخاب جریانهای لاگ، فیلترکردن خطوط بر اساس متن یا الگو، پردازش لاگهای ساختیافته و محاسبه سنجه از دادههای لاگ به کار میرود.
-
یکپارچگی با Grafana
با اتصال Loki به Grafana میتوان لاگها را در کنار متریکها و تریسها بررسی کرد و از دادههای یک رخداد به اطلاعات مرتبط در منابع دیگر رسید. میزان این یکپارچگی به تنظیمات و اتصال منابع داده بستگی دارد.
-
مناسب برای محیطهای کانتینری
لوکی برای ذخیره و جستوجوی لاگهای محیطهای کانتینری، از جمله Kubernetes، کاربرد دارد. میتوان لاگها را با برچسبهایی مانند نام برنامه، فضای نام و کلاستر تفکیک کرد. استفاده از نام Pod بهعنوان برچسب نیز باید با توجه به تعداد مقادیر متمایز آن و اثر احتمالی بر کارایی انجام شود.
-
پشتیبانی از ذخیرهسازی شیءگرا
Loki از ذخیرهسازی دادهها در فضای ذخیرهسازی شیءگرا، مانند Amazon S3 و Google Cloud Storage، پشتیبانی میکند. برای استقرارهای بزرگتر نیز میتوان اجزای آن را در قالب معماری توزیعشده اجرا کرد و متناسب با نیاز، منابع هر بخش را افزایش داد.
-
چندمستاجری
Loki از چندمستاجری (Multi-tenancy) پشتیبانی میکند و امکان تفکیک دادهها و درخواستهای مستاجران مختلف را فراهم میسازد. این قابلیت برای سامانههایی با چند تیم یا مشتری مفید است، اما استفاده از آن به پیکربندی مناسب و رعایت الزامات امنیتی وابسته است.
کاربردها
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
عیبیابی خطای سرویس در محیط تولید
پس از افزایش خطا در یک API، تیم میتواند لاگ همان سرویس و بازه زمانی را با برچسبهای محیط و نام سرویس فیلتر کند و پیامهای خطا را بررسی کند.
-
بررسی لاگهای Kubernetes
تیم زیرساخت میتواند لاگهای کانتینرها و Podهای Kubernetes را با استفاده از برچسبهایی مانند فضای نام، نام برنامه و کلاستر محدود کند و پیامهای مرتبط با خطاهای استقرار را بررسی کند.
-
اتصال متریک، تریس و لاگ
هنگام مشاهده افزایش زمان پاسخ در Grafana، میتوان متریکهای مرتبط را با لاگهای همان سرویس مقایسه کرد و اطلاعات بیشتری درباره علت احتمالی رخداد به دست آورد. این کار به اتصال منابع داده و تنظیم قابلیتهای مرتبط در Grafana وابسته است.
-
ساخت هشدار از الگوی خطا
میتوان تعداد رخدادهای مشخص، مانند خطاهای 5xx یا پیامهای شکست اتصال، را با LogQL محاسبه و برای آنها هشدار تعریف کرد.
پرسشهای رایج درباره لوکی
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
آیا لوکی خودش لاگها را از سرورها جمع میکند؟
Loki وظیفه دریافت، ذخیرهسازی و جستوجوی لاگها را بر عهده دارد، اما برای جمعآوری لاگ از منابع مختلف معمولاً به یک عامل یا Collector نیاز است. برای نمونه، میتوان از Grafana Alloy یا OpenTelemetry Collector استفاده کرد. روش ارسال و تنظیمات لازم به منبع لاگ و معماری سامانه بستگی دارد.
تفاوت لوکی و Grafana چیست؟
Loki سامانهای برای دریافت، ذخیرهسازی و جستوجوی لاگها است. Grafana نیز برای مشاهده و تحلیل دادهها، ساخت داشبورد و بررسی اطلاعات منابع مختلف، از جمله Loki و Prometheus، استفاده میشود. این دو ابزار معمولاً در کنار یکدیگر به کار میروند.
آیا لوکی جایگزین Prometheus است؟
خیر. Prometheus عمدتاً برای متریکهای عددی و سریهای زمانی است، اما لوکی برای لاگها کاربرد دارد. ترکیب آنها در یک سامانه مشاهدهپذیری رایج است.
چرا نباید برای هر شناسه کاربر یک Label در لوکی بسازم؟
استفاده از مقادیر پربسامد، مانند شناسه کاربر و شناسه درخواست، در برچسبها میتواند تعداد جریانهای لاگ را بهشدت افزایش دهد و هزینه ذخیرهسازی و پردازش پرسوجوها را بالا ببرد. بهتر است این مقادیر را در متن لاگ یا، در صورت پشتیبانی و تنظیم مناسب، در فراداده ساختیافته (Structured Metadata) نگه دارید. این کار امکان بررسی چنین مقادیری را بدون تبدیل هر مقدار به یک برچسب مستقل فراهم میکند.
برای شروع یادگیری لوکی چه چیزهایی لازم است؟
برای شروع، Loki و Grafana را در یک محیط آزمایشی اجرا کنید، چند لاگ نمونه به Loki بفرستید و نتیجه را در Grafana بررسی کنید. سپس نوشتن پرسوجوهای پایه LogQL، فیلترکردن بر اساس برچسب و متن و محاسبه تعداد خطاها را تمرین کنید. آشنایی مقدماتی با Docker و مفاهیم لاگ و شبکه به یادگیری کمک میکند. مدت لازم برای رسیدن به سطح مقدماتی به تجربه قبلی، زمان تمرین و پیچیدگی تمرینها بستگی دارد.