
私の仕事では、インフラストラクチャに関する情報が不足していることに執着することがよくあります。サービス対象のサーバーの数が増えると、これは本当の苦痛になります。小さな組織で管理しているときでも、どこに、どこに行き詰まっていて、どの人がどのハードウェアまたはサービスに責任を負っているのか、そして最も重要なこととして、この変更をすべての人に修正することを常に知りたいと思っていました。新しい場所に来て、ある種の事件に直面したとき、この情報を見つけるのに長い時間がかかります。次に、RuVDSで直面しなければならなかったことと、タイトルに示されている問題をどのように解決したかについて説明します。
バックグラウンド
エンタープライズ管理者として、私はデータセンターでの経験がほとんどありませんでしたが、RackTablesが目の前に見えました。すべてのサーバー、UPS、スイッチ、およびそれらの間のすべての接続を備えたラックが明確に示されていました。 RuVDSにはそのようなシステムはありませんでしたが、サーバー、そのコンポーネントの一部、ラック番号などに関する情報を含むExcel /紙のファイルのみがありました。このアプローチでは、小さなコンポーネントの変更を追跡することは非常に困難です。しかし、サーバーにとって最も重要で頻繁に交換される消耗品はディスクです。ドライブの状態とその戦略的予備力に関する最新の情報を維持することは非常に重要です。ドライブがRAIDアレイからクラッシュし、すぐに交換されない場合、これは最終的に致命的な結果につながる可能性があります。したがって、理解するためには、ディスクの場所とその状態を追跡するシステムが本当に必要です。何が足りないのか、どのモデルを購入する必要があるのか。
IT部門のパフォーマンスを改善し、ITILの理想に導くように設計されたオープンソース製品であるGLPIが救いの手を差し伸べました。機器の在庫管理とラック管理に加えて、ナレッジベース、サービスデスク、ドキュメント管理などがあります。 GLPIには、FusionInventoryやOCS Inventoryなどの多くのプラグインがあり、エージェントのインストールやSNMPを介して、コンピューターやその他のデバイスに関する情報を自動的に収集できます。 GLPIとプラグインのインストールについて詳しくは、他の記事、とりわけ公式ドキュメントをご覧ください。既製のLAMPテンプレートのホスティングにインストールできます。
ただし、エージェントをデプロイした後、GLPIでコンピューターコンポーネントを開き、次のことを確認します。

問題は、どのプラグインもLSIRAIDアレイの物理ディスク情報を見ることができないことです。PowerShellスクリプトlsi-raid.ps1を使用してZabbixで監視するためにこの問題がどのように解決されたかを確認した後、GLPIに情報を転送するための同様の問題を作成することにしました。
アレイ内のディスクに関するデータは、コントローラーの製造元のユーティリティを使用して取得できます。LSIの場合、これはStorCLIです。そこからJSON形式のデータを取得し、解析してGLPIAPIに渡すことができます。FusionInventoryがすでに作成したコンピューターにディスクをバインドします。繰り返し実行すると、スクリプトはディスク間でデータを更新し、新しいディスクを追加します。Send-RAIDtoGLPI.ps1スクリプト自体は、ここGitHubにあります。次に、使い方を紹介します。
必要なもの
- GLPI 9.5.1 ( )
- FusionInventory Windows
- Windows 2012 R2 ( ) , management-VM , PowerShell 4
- MegaRAID
- PowerShell — PSGLPI
- GLPI Admin API, UserToken AppToken
重要なポイント。何らかの理由で、GLPIにはディスクモデル用に2つの異なるエンティティがありますが、「メディアタイプ」プロパティはありません。したがって、HDDとSSDのプロパティを記録するために、ドロップダウンリスト「ハードディスクモデル」(front / devicemodel.php?Itemtype = DeviceHardDriveModel)を使用することにしました。スクリプトはGLPIデータベースにこれらの値を必要とします。そうでない場合、ディスクモデルに関するデータを書き込むことができません。したがって、最初にHDDを入力し、次にSSDをこの空のリストに入力して、データベース内のこれらの要素のIDが1と2になるようにする必要があります。他の要素がある場合は、Send-RAIDtoGLPI.ps1スクリプトのこの行の対応するIDを、1と2ではなくHDDとSSDの後に置き換えます。 :
deviceharddrivemodels_id = switch ($MediaType) { "HDD" { "1" }; "SSD" { "2" }; default { "" } }
これを気にしない場合、またはこのドロップダウンリストを別の方法で使用する場合は、スクリプトからこの行を削除するだけです。
また、ディスクのステータスを「アイテムステータス」(/front/state.php)に追加する必要があります。ステータス「MediaError」(少なくとも1つのディスクアクセスエラーがありました)と「OK」を追加しました。これは、IDが渡されるスクリプト内の行です。「OK」の場合は「2」、「MediaError」の場合は「1」です。
states_id = switch ($MediaError) { 0 { "2" }; { $_ -gt 0 } { "1" } }
これらのステータスは便宜上必要です。これらのプロパティが必要ない場合は、この行全体を削除することもできます。
スクリプト自体で、自分の変数を指定することを忘れないでください。$ GlpiCredsには、GLPI APIサーバーへのURL、UserToken、およびAppTokenが含まれている必要があります。
スクリプトの内容
面倒なJSON解析とifのシートのため、スクリプトは読みにくいので、ここでそのロジックについて説明します。
ホストでの最初の起動時に、スクリプトはすべてのコントローラーを調べ、シリアル番号でGLPIデータベース内のディスクを検索し、見つからない場合はモデルを検索します。モデルも見つからない場合は、新しいディスクのモデルをGLPIに追加し、このディスクをデータベースに入力します。
新しいパスごとに、スクリプトは新しいディスクを見つけようとしますが、不足しているディスクを削除することはできないため、手動で行う必要があります。
展開例
スクリプトリポジトリには、Deploy-Send-RAIDtoGLPI.ps1スクリプトが含まれています。このスクリプトは、必要なファイルを含むZIPアーカイブをGLPIサーバーからダウンロードし、各ホストに展開します。
ファイルをコピーした後、スクリプトは毎日のタスクとして実行されているFusionInventoryエージェントをインストールし、スクリプトに対して同じタスクを作成します。実装が成功すると、最終的にGLPIの[コンピューターコンポーネント]セクションにディスクが表示されるようになります。
結果
ここで、メニューの[設定]-> [コンポーネント]-> [ハードドライブ]でGLPIに移動すると、ドライブモデルをクリックして番号を確認し、購入する必要があるものを理解できます。

