سامانه امید
نوامبر 17, 2020سلام
در این نوشته چندتا نکته در مورد نحوه خواندن لاگ اپلیکشنها و چندتا دستور لینوکسی پر استفاده که در خیلی موارد کار ما رو راه میندازه رو توضیح میدم. امیدوارم که این توضیحات در زمانهای بحران بتونه سریع ما رو به خطایی که در لاگ اپلیکیشن ها هست هدایت کنه.
همونطور که همه میدونیم در سیستم عامل لینوکس همه چیز فایل هست! یعنی حتی پوشه ها، دیسکها و CD-ROM هم یکسری فایل هستند پس نحوه خواندن فایلها یکی از نیازمندیهایی هست که میتونه به برنامه نویسها کمک کنه.
معمولا در اپلیکیشن ها زمانی که میخوایم لاگ بزنیم از چند روش استفاده میکنیم:
ساده ترین روش استفاده از sysout یا syserr هست که از System.out.println یا System.out.err جاوا استفاده میشه. اما همانطور که در استاندارد برنامه نویسی آویهنگ توصیه شده ما از log4j نسخه 2 برای ثبت لاگهای برنامه استفاده میکنیم.
یکی از مزیتهای اساسی log4j این هست که سطح لاگ در برنامه رو میشه از طریق appender های مختلف مدیریت کرد. مکانیزمهای متعدد rotation و pattern و یکپارچه سازی با سایر ابزارها (Logstash و Kafka) هم از مزیتهای دیگه log4j هست.
لاگ زدن در برنامه ها
یکسری استانداردهای دیگه وجود داره که در زمان لاگ زدن در اپلیکیشن اونها رو باید رعایت کنیم که در مقاله ای دیگه در موردش کامل صحبت خواهیم کرد.
اما چه لاگ برای برنامه های تحت وب توسط تامکت یا هر وب کانتینر دیگه ای زده بشه چه لاگ در اپلیکیشنهای جاوایی مثل ورتیکس در fat jar ها زده بشه نهایتا در سیستم عامل لینوکس در داخل یک فایل قرار داده میشه. خوب در محیطهای تست و عملیاتی تنهای چیزی که میشه از یک application و صحت کارکردش در اختیار دولوپر قرار داده بشه لاگ اپلیکیشنش هست پس لاگ اپلیکیشنها باید بسیار خوانا و حاوی داده های قابل رهگیری باشه.
ما در آویهنگ مدتها تلاش کردیم تا یک الگوی مناسب برای لاگ زدن در برنامه های کاربردی داشته باشیم. که در مقاله ای دیگه به ان اشاره خواهیم کرد.
پس بعنوان یک برنامه نویس فرض کنید یک فایل از لاگهای برنامه شما در اختیارتان قرار داده شده. مجموعه دستوراتی که در ادامه توضیح خواهم داد در رسیدن به یک بخش خاص از فایل به شما کمک خواهد کرد.
فایلها در لینوکس
همانطور که میدونیم فایلها باید توسط filesystem مدیریت بشن. فایل سیستم در واقع مکانیزم و نحوه مدیریت فایلها (نحوه ذخیره سازی و واکشی اونها ) در سیستم عامل ها هستند. بر اساس نیازمندیهای مختلف فایل سیستمهای مختلفی هم در سیستم عاملها وجود دارند و این فایل سیستمها با گذر زمان تغییر و بهبود پیدا کردن.
مثلا در ویندوز یک زمانی فایل سیستم FAT بود و بعد NTFS اومد و در لینوکس هم چندتا فایل سیستم شناخته شده وجود داره مثل ext2 و ext3 و .... در این مقاله خیلی نمیخوایم وارد مفاهیم سیستم عامل بشیم ولی این رو باید بدونیم که در لینوکس داریم با یک فایل سیستم متفاوت از ویندوز کار میکنیم.
df
خروجی این دستور توی لینوکس مانت پوینت های مختلف یا درایوهای مختلف رو نشون میده.
مثلا در خروجی بالا توی این سرور دیسکهای مختلفی به مسیرهای مختلفی مانت شدن.
چیزی که برای ما معمولا اهمیت داره مسیر اسلش هست (/)
در محیطهای شرکت معمولا لاگها در مسیرهای مشخصی نگهداری میشن مثلا اگر از logstash استفاده شده باشده در مسیر
/logstastash/logs/appname/appname.log
و اگر در سرویسهای tomcat باشه معمولا در مسیر
/opt/apprepo/apache/logs/catalina.out
لاگها قرار گرفتن.
دستورات کاربردی
در این بخش مجموعه دستورات پر کاربرد برای بررسی فایلها رو توضیح میدیم:
ll path
ls path
برای مثال:
در خروجی این دستور چند دسته اطلاعات قابل توجه است:
قسمت خاکستری رنگ ستون اول مشخص کننده سطح دسترسی هریک از فایلهاست. 777 دسترسی تعریف شده برای فایلها در لینوکس است که نشان دهنده دسترسی دو دویی برای سه عملیات Read و Write و Execute است برای سه دسته user و group و others.
قسمت زرد رنگ ستون دوم از سمت چپ مشخص کننده user و group ای است که دسترسی به این فایل دارد.
قسمت آبی رنگ سایز فایل به بایت و قسمت سبز رنگ last modified date هست.
head pathToFile
از این دستور برای مشاهده ابتدای فایل استفاده میشود. مثلا اگر بخوایم بدونیم که لاگی که در فایل مورد نظر ما قرار داره از چه ساعتی شروع شده خوبه از این دستور استفاده کرد:
tail pathToFile
از این دستور برای مشاهده انتهای فایل استفاده میشود.