فاکتور یازدهم: Logs
فاکتور یازدهم در 12-Factor App بر مدیریت لاگها به عنوان جریان رویداد (Event Stream) تمرکز دارد. لاگها نمایانگر رفتار اپلیکیشن در زمان اجرا هستند و به توسعهدهندگان و مدیران سیستم دید کاملی نسبت به عملکرد اپلیکیشن میدهند.

ویژگیهای لاگ در 12-Factor
- لاگها جریان زمانبندی شدهای از رویدادها هستند که از تمام فرآیندها و Backing Services جمعآوری میشوند.
- لاگها نباید به فایل محدود شوند یا اپلیکیشن مسئول مدیریت آنها باشد.
- هر فرآیند لاگهای خود را بدون بافر به
stdoutمیفرستد. - در محیط توسعه، توسعهدهنده این جریان را در ترمینال مشاهده میکند.
مدیریت لاگ در محیطهای Staging و Production
در این محیطها، جریان لاگ هر فرآیند توسط محیط اجرا جمعآوری و با جریانهای دیگر اپلیکیشن ترکیب میشود. سپس این جریانها به مقصد نهایی برای مشاهده و آرشیو طولانیمدت ارسال میشوند. اپلیکیشن هیچ کنترلی بر این مقصدها ندارد و مدیریت آن کاملاً بر عهده محیط اجرا است.
ابزارهای متنباز برای مدیریت این جریانها شامل Logplex و Fluentd هستند.
کاربردهای Event Stream
- مسیر دادن جریان به فایل یا مشاهده آن در ترمینال به صورت real-time.
- ارسال به سیستمهای تحلیل و ایندکسینگ لاگ مانند Splunk یا سیستمهای انبار داده عمومی مانند Hadoop/Hive.
- تحلیل رفتار اپلیکیشن در طول زمان، مانند پیدا کردن رویدادهای گذشته، ترسیم نمودارهای بزرگ (مثلاً تعداد درخواستها در دقیقه) و فعالسازی هشدارهای مبتنی بر معیارهای تعریفشده توسط کاربر.
نمونه عملی
تصور کنید اپلیکیشن وب شما درخواستهای HTTP و خطاهای داخلی را لاگ میکند. هر فرآیند جریان لاگ خود را به stdout میفرستد. این جریان توسط سیستم جمعآوری لاگها مانند Fluentd گرفته شده و به Splunk ارسال میشود. در Splunk میتوانید ببینید که در هر دقیقه چند درخواست موفق یا ناموفق دریافت شده، روند خطاها را بررسی کنید و در صورت عبور خطاها از حد تعریفشده، هشدار دریافت کنید.