در کارم اغلب وسواسهایی در مورد کمبود اطلاعات در مورد زیرساختها تجربه میکنم و با افزایش تعداد سرورهای ارائهشده، این به شکنجه واقعی تبدیل میشود. حتی زمانی که در سازمانهای کوچک مدیر بودم، همیشه میخواستم بدانم چه چیزی کجاست، کجا وصل شده است، چه افرادی مسئول کدام سختافزار یا خدمات هستند و مهمتر از همه، ثبت تغییرات در همه اینها. وقتی به مکان جدیدی می آیید و با حادثه ای مواجه می شوید، زمان زیادی صرف جستجوی این اطلاعات می شود. در مرحله بعد، من به شما خواهم گفت که در RuVDS با چه چیزی روبرو بودم و چگونه مشکل ذکر شده در عنوان را حل کردم.
ماقبل تاریخ
به عنوان یک مدیر سازمانی، تجربه کمی از کار در مرکز داده داشتم، اما نگاهی اجمالی به RackTables داشتم. به وضوح رک را با تمام سرورها، یو پی اس ها، سوئیچ ها و تمام اتصالات بین آنها نشان می داد. RuVDS چنین سیستمی نداشت، بلکه فقط فایل های اکسل/کاغذی با اطلاعات سرورها، برخی از اجزای آنها، شماره رک و غیره داشت. با این رویکرد، پیگیری تغییرات در اجزای کوچک بسیار دشوار است. اما مهم ترین و پرتعویض ترین مواد مصرفی برای سرورها دیسک ها هستند. حفظ اطلاعات به روز در مورد وضعیت دیسک ها و ذخیره استراتژیک آنها بسیار مهم است. اگر یک درایو از یک آرایه RAID خراب شود و به سرعت جایگزین نشود، این در نهایت می تواند منجر به عواقب مرگبار شود. بنابراین، ما واقعاً به سیستمی نیاز داریم که موقعیت دیسک ها و وضعیت آنها را ردیابی کند تا بفهمیم چه چیزی ممکن است گم شده باشیم و چه مدل هایی را باید خریداری کنیم.
GLPI به کمک آمد، یک محصول متن باز که برای بهبود عملکرد بخش های فناوری اطلاعات و رساندن آنها به ایده آل های ITIL طراحی شده است. علاوه بر مدیریت موجودی تجهیزات و قفسه، دارای یک پایگاه دانش، میز خدمات، مدیریت اسناد و موارد دیگر است. GLPI دارای پلاگین های بسیاری از جمله FusionInventory و OCS Inventory است که به شما امکان می دهد به طور خودکار اطلاعات رایانه ها و سایر دستگاه ها را از طریق نصب عامل و SNMP جمع آوری کنید. میتوانید درباره نصب GLPI و افزونهها در مقالات دیگر، بهتر از همه، بیشتر بخوانید - اسناد رسمی. می توانید آن را روی هاست ما روی یک قالب آماده نصب کنید LAMP.
با این حال، پس از استقرار عامل، اجزای کامپیوتر را در GLPI باز می کنیم و این را مشاهده می کنیم:
مشکل این است که هیچ یک از پلاگین ها نمی توانند اطلاعات مربوط به دیسک های فیزیکی موجود در آرایه های LSI RAID را ببینند. با مشاهده نحوه حل این مشکل برای نظارت در Zabbix با استفاده از یک اسکریپت PowerShell lsi-raid.ps1 تصمیم گرفتم مشابهی برای انتقال اطلاعات به GLPI بنویسم.
دادههای مربوط به دیسکهای موجود در آرایه را میتوان با استفاده از ابزارهای کمکی از سازنده کنترلر به دست آورد؛ در مورد LSI، این StorCLI است. از آن میتوانید دادهها را با فرمت JSON دریافت کنید، آنها را تجزیه کنید و به GLPI API ارسال کنید. ما دیسک ها را به رایانه هایی که FusionInventory قبلاً ایجاد کرده است پیوند خواهیم داد. وقتی دوباره اجرا شد، اسکریپت داده های روی دیسک ها را به روز می کند و داده های جدید اضافه می کند. خود اسکریپت Send-RAIDtoGLPI.ps1 است اینجا در GitHub. در ادامه نحوه استفاده از آن را به شما خواهم گفت.
حساب در GLPI با نمایه Admin برای مجوز از طریق API ایجاد شده توسط UserToken و AppToken
نکته مهم. بنا به دلایلی، GLPI دارای 2 موجودیت مختلف برای مدل دیسک است، اما ویژگی "نوع رسانه" وجود ندارد. بنابراین، برای ضبط ویژگی های HDD و SSD، تصمیم گرفتم از لیست کشویی "Hard Drive Models" (front/devicemodel.php?itemtype=DeviceHardDriveModel) استفاده کنم. اسکریپت باید این مقادیر را در پایگاه داده GLPI داشته باشد، در غیر این صورت نمی تواند اطلاعات مربوط به مدل دیسک را بنویسد. بنابراین، باید ابتدا HDD و سپس SSD را به این لیست خالی اضافه کنید تا شناسه این عناصر در پایگاه داده 1 و 2 باشد. اگر موارد دیگر وجود دارد، سپس در این خط از اسکریپت Send-RAIDtoGLPI.ps1 را جایگزین کنید. HDD و SSD به جای 1 و 2 شناسه مربوطه خود:
اگر نمیخواهید با این کار زحمت بکشید یا از این لیست کشویی به شکل دیگری استفاده میکنید، میتوانید به سادگی این خط را از اسکریپت حذف کنید.
همچنین باید وضعیت دیسکها را در «وضعیت عنصر» (/front/state.php) اضافه کنید. من وضعیت های "MediaError" (حداقل یک خطای دسترسی به دیسک وجود داشت) و "OK" را اضافه کردم، یک خط در اسکریپت که شناسه های آنها ارسال می شود، "2" برای "OK" و "1" برای "MediaError":
این وضعیت ها برای راحتی مورد نیاز هستند؛ اگر به این ویژگی ها نیاز ندارید، می توانید این خط را نیز به طور کامل حذف کنید.
در خود اسکریپت، فراموش نکنید که متغیرها را به سمت خود مشخص کنید. $GlpiCreds باید حاوی URL سرور GLPI API، UserToken و AppToken باشد.
آنچه در فیلمنامه وجود دارد
به دلیل تجزیه دست و پا گیر JSON و if های خالی، خواندن اسکریپت دشوار است، بنابراین منطق آن را در اینجا شرح خواهم داد.
هنگامی که اسکریپت برای اولین بار در هاست راه اندازی می شود، از تمام کنترلرها می گذرد و دیسک های موجود در پایگاه داده GLPI را با شماره سریال جستجو می کند؛ اگر آن را پیدا نکرد، به دنبال مدل می گردد. اگر مدل را پیدا نکرد، آن را اضافه می کند. دیسک جدید را به GLPI مدل کرده و این دیسک را وارد پایگاه داده می کند.
هر پاس جدید اسکریپت سعی میکند دیسکهای جدید را شناسایی کند، اما نمیداند چگونه دیسکهای گمشده را حذف کند، بنابراین باید آن را به صورت دستی انجام دهید.
نمونه استقرار
مخزن اسکریپت حاوی اسکریپت Deploy-Send-RAIDtoGLPI.ps1 است که یک آرشیو ZIP با فایل های لازم را از سرور GLPI ما دانلود کرده و در هر میزبان مستقر می کند.
پس از کپی کردن فایل ها، اسکریپت عامل FusionInventory را نصب می کند تا به عنوان یک کار روزانه اجرا شود و همان کار را برای اسکریپت ما ایجاد کند. پس از اجرای موفقیت آمیز، در نهایت می توانیم درایوهای موجود در قسمت Components کامپیوتر را در GLPI ببینیم.
نتیجه
اکنون، با رفتن به GLPI در منوی "تنظیمات" -> "کامپوننت ها" -> "هارد دیسک"، میتوانیم روی مدلهای درایو کلیک کرده و تعداد آنها را ببینیم تا بفهمیم چه چیزی باید بخریم.