چیزهایی که تو دانشگاه نمی‌گن: چجوری روت کاز آنالیز (RCA) تحویل بدیم؟

اتفاقات بد، منحصر به دنیای نرم افزار نیستن و همه جا می‌افتن. اما خب توی دنیا ما تقریبا یک چیز روزمره هستن. قطع شدن یک سرویس، کرش کردن دیتابیس، باگ و برنامه نویس تازه کاری که قارتی پوش کرده روی سرور لایو و فیلترینگی که نصفه شبی باعث شده سرور نتونه از ان پی ام آپدیت بشه، اتفاق‌هایی مرسوم هستن.

توی دنیای حرفه‌ای، اتفاق بعد می افته و تیم لایه اول ساپورت یا تکنیکال ساپورت لایه دوم و غیره لازمه با تمام سرعت ممکن مشکل رو برطرف کنن. مثلا اگر در سیستم استعلام جریمه رانندگی خراب بشه و درست کار نکنه، بر اساس قرار، مثلا توی چهار ساعت لازمه سرویس کاملا برگرده و درست کار کنه. شما ممکنه در این چهار ساعت سیستم رو ریبوت کنین یا کلا از مدار خارج کنین و سرویس دوم رو بالا بیارین و غیره و مساله از طریق یک workaround حل بشه اما فرداش لازمه مساله به شکل واقعی حل بشه. یعنی نوشتن و ارائه Root Cause Analysis یا همون RCA.

این یک داکیومنت است که توضیح می ده مشکل چرا پیش اومده بود و احیانا چطور می شه جلوی اتفاق مجددش رو گرفت. در واقع شما دارین علت ریشه ای رو تحلیل می کنین. یک مدیر خوب همیشه بعد از هر اتفاق باید از شما RCA بخواد تا ۱) بتونه بفهمه مشکل چرا پیش امده ۲) جلوش رو بگیره و ۳) دفعه بعدی مرجعی داشته باشه برای اینکه باید چیکار کنه.

اما نوشتن RCA کار بسیار ناخواستنی و نچسبی است ولی هر جای حرفه‌ای که کار کنین لازمه بلدش باشین. آر سی ای معمولا در پنج قدم نوشته می‌شه:

  1. جمع کردن شواهد
  2. تشریح مساله
  3. تحلیل علت و معلول‌ها
  4. پیشنهاد راه حل‌ها
  5. نوشتن RCA

البته مساله همیشه هم به همین راحتی ها نیست و تکنیک هایی هست برای کشف اینکه مشکل کجا بوده. از ترابل شوتینگ سیسمتاتیک تا ۵ بار جواب دادن به این سوال که «چی شد که اینطوری شد؟» و غیره و غیره وجود داره. اما بازم مواردی هست که نمی شه بهش جواب داد. مثلا ممکنه فلان سرویس قطع شده باشه. جواب اول به «چی شد که اینطوری شد؟» اینه که «اپلیکیشن پایین بوده» و جواب بعدی به «چرا؟» این باشه که «چون دیتابیس کرش کرده» و بعد برسین به اینکه «دیتابیس ساعت ۴ کرش کرد» و در جواب به اینکه «چی شد که کرش کرد؟» بعدی جوابی نداشته باشین. حالا شاید بگین:

  1. دیتابیس زاپاس داشته باشیم
  2. لاگ بیشتر اضافه کنیم که ببینیم دیتابیس چرا ممکنه کرش کنه

اولی پر دردسر و گرون است و در واقع فقط فراموش کردن صورت مساله است و دومی یک پینشهاد برای داشتن RCA بهتر در صورت بروز مشکل مجدد.

برای اطلاعات دقیق تر در مورد شیوه نوشتن RCA پیشنهاد می کنم این داکیومنت سریع و راحت با عنوان «رییسم گفته آر سی ای بدم، حالا باید چیکار کنم رو ببینین یا جایی ذخیره کنین چون بدون شک همین که کار حرفه ای تری رو شروع کنین، دائما نیاز به مراجعه بهش خواهید داشت.

یک ادمین لینوکس چه مهارت هایی لازم داره یا چطوری در لینوکس حرفه ای بشیم

اتاق سرور جادی

این سوال زیاد از من می شه و گفتم یکبار درست در وبلاگ بنویسم که یک مدیر سیستم نیاز به چه مهارت‌هایی داره. اکثرا هم انتظار اینه که لیستی بدیم از کتاب ها و مدرک‌ها یا حتی فهرستی از دستورات و مفاهیم. اما واقعیت امر اینه که لینوکس اصلا سخت نیست و ادمین خوب بودنش نیاز به دانش عجیبی در شروع کار نداره. یک مدیر سیستم تازه کار معمولا باید کنار یک حرفه ای کار کنه و چیزهای جدید یاد بگیره و در نتیجه چیزی که براش مهمتر از دانش است، یاد گرفتن مهارت‌های مربوط به یاد گرفتن است!

مطمئنا اگر شما می خواین مسوول یک سیستم لینوکسی باشین باید کمی لینوکس بدونین! برای اینکار تقریبا هر دوره یا کتاب LPIC1 به شما کمک می کنه و لازمه اعتراف کنم که در کارهای روزمره، مطالب LPIC1 تقریبا از هر چیزی که شما باهاش برخورد می کنین سطح بالاتره. (دوره من رو که دیدین؟ (: )). پس برای شروع با LPIC1 شروع کنین و کلیتش رو بفهمین. این فهمیدن پایه قدم‌های بعدی است.

نظر شخصی من اینه که برای سیستم ادمین خوب بودن، فهمیدن پایه ها، مفهوم فایل سیستم، دایرکتوری بندی لینوکس، مفهوم دامون و سرویس و … و درک فلسفه یونیکس و پوزیکس بسیار مهمتر از دونستن دستورات است. دونستن دستورات خوبه ولی برای پیشرفت شما نیاز به فهم دارین و این فهم پله به پله اتفاق می افته.

گفتم پله به پله؟ بله بله. این بسیار مهمه. اگر می خواین در نرم افزار / تکنولوژی پیشرفت کنین بسیار مهمه که پایه ها رو درک کنین. تا وقتی نمی تونین خط صاف بکشین نمی تونین نقاشی خوبی درست کنین و اونی که می بینین بدون درک پایه ها ظاهرا کارهای عجیب غریب می کنه شبیه کسی است که با خریدن یک کتاب نقاشی که کلی نقطه شماره دار داره و وصل کردن نقطه ها به ترتیب شماره به همدیگه برای شما نقش مار می کشه (: با حوصله باشین، هر چیزی رو سرچ کنین، بخونین، هر جایی هر چیزی که شنیدین که نمی دونستین چیه برین سراغ گوگل انگلیسی و man pageهای لینوکس و بخونین و دقیقا درک کنین اون زیر چی می گذره و سریع تبدیل می شین به آدمی که وقتی کسی چیزی رو درک نمی کنه یا مشکلی هست که منشاء اش معلوم نیست، می یان سراغ شما – چون شما می فهمین اون پایین چی می گذره.

در نهایت نکته بسیار مهم داشتن روحیه تیمی و درک این است که هر کس ممکنه اشتباه کنه و پذیرش این اشتباه کاری است که شما رو از دروغگوها جدا می کنه – و متاسفانه دروغگوها ممکنه پیشرفت کنن ولی خوشبختانه هیچ وقت حرفه ای نمی شن و از کارشون هم لذت نمی برن. الکی نگین همه چیز رو بلدین، الکی نگین هیچ چیز تقصیر شما نیست و خودتون رو از مشکلات دور نکنین. هر مشکل فرصت یاد گرفتن یک چیز جدید است و تکمیل کردن پایه ها و اگر یادتون باشه آدم حرفه ای کسی است که پایه ها رو بلده.

پس به شکل خلاصه:

  • دونستن کلیاتی از دستورها مهمه ولی مهمترین بخش نیست. LPIC1 رو دوره کنین
  • بخش حفظی لینوکس رو می شه در حد کار راه افتادن یکی دو هفته ای یاد گرفت
  • هیچ چیز حفظی نیست (: درک کردن و استمرار در هر چیزی باعث می شه بقیه فکر کنن شما چیزها رو حفظ کردین
  • اشتیاق داشته باشین و از کارتون لذت ببرین. اگر با لذت یاد نمی گیرین یعنی اینکار برای شما نیست
  • مطلقا هیچ وقت در هیچ شرایطی چیزی که نمی فهمین رو کپی پیست نکنین. با دولایه یاد گرفتن تقریبا می شه هر چیزی رو در دنیای کامپیوترها فهمید. یکبار وقت بذارین و یک عمر لذت ببرین.
  • هیچ وقت احساس خفن بودن نکنین و با علاقه و اشتیاق یاد بگیرین و بگین «نمی دونم ولی یاد می گیرم»
  • جرات اشتباه داشته باشین. تکنولوژی خیلی وقت ها با سعی و خطا و تلاش کار می کنه و بهترین آدم کسی است که اشتباهات رو اصلاح می کنه نه کسی که اشتباه نمی کنه
  • با تیم کار کنین. از هم تیمی ها یاد بگیرین، به هم تیمی ها یاد بدین و در کنار هم پیش برین. اون آدمی که عینک سیاه می زنه و سرش تو لپ تاپه و فضاسازی هکری می کنه، در شرکت معمولا خز ترین آدم است‌ (:
  • گوگل بهترین دوست شماست و برای اینکه دوستی حفظ بشه، باید چیزهایی که خودتون یاد می گیرین رو هم یک جایی مثلا وبلاگ، فروم، ویکی، … بنویسین.
  • لبخند بزنین. اگر نمی تونین لبخند بزنین یعنی یک جای کار اشکال داره!

پ.ن. اون لاستیک های روی کفش مال این هستن که خاک وارد اتاق سرورها نشه. اون دستگاه هم اسمش هست KVM. مانیتور و کیبوردش به شکل کشویی از لای سرورها می یاد بیرون و بر اساس اینکه چه دگمه ای رو بزنین به یکی از سرورها وصل می شه. انگار یک مانیتور و کیبورد دارین که به هر کدوم از سرورها که لازمه وصله.

مرتبط: چگونه در کامندلاین لینوکس حرفه ای بشیم؟