GLPI 中的 LSI RAID 库存

GLPI 中的 LSI RAID 库存
在我的工作中,我经常对缺乏基础设施信息感到困扰,并且随着所服务的服务器数量的增加,这变成了真正的折磨。 即使当我是小型组织的管理员时,我也总是想知道什么在哪里、在哪里插入、哪些人负责哪件硬件或服务,最重要的是,记录所有这些的变化。 当你来到一个新的地方并遇到一个事件时,你会花费大量的时间来搜索这些信息。 接下来我会告诉你我在RuVDS中遇到了什么,以及我是如何解决标题中指出的问题的。

史前

作为一名企业管理员,我几乎没有在数据中心工作的经验,但我瞥见了 RackTables。 它清楚地显示了机架上的所有服务器、UPS、交换机以及它们之间的所有连接。 RuVDS 没有这样的系统,只有 Excel/纸质文件,其中包含有关服务器、某些组件、机架号等信息。 使用这种方法,跟踪小组件的变化非常困难。 但服务器最重要、最频繁更换的消耗品是磁盘。 维护有关磁盘状态及其战略储备的最新信息非常重要。 如果 RAID 阵列中的某个驱动器发生故障并且没有快速更换,最终可能会导致致命的后果。 因此,我们确实需要一个跟踪磁盘位置及其状况的系统,以便了解我们可能缺少什么以及我们需要购买哪些型号。

GLPI 拯救了我们,这是一款开源产品,旨在提高 IT 部门的绩效并让他们达到 ITIL 理想。 除了设备库存和机架管理之外,它还具有知识库、服务台、文档管理等等。 GLPI有很多插件,包括FusionInventory和OCS Inventory,它们允许您通过代理安装和SNMP自动收集有关计算机和其他设备的信息。 您可以在其他文章中阅读有关安装 GLPI 和插件的更多信息,最重要的是 - 官方文档。 您可以使用现成的模板将其安装在我们的托管上 LAMP.

但是,部署代理后,我们将在 GLPI 中打开计算机组件并看到以下内容:

GLPI 中的 LSI RAID 库存
问题是没有一个插件可以看到有关 LSI RAID 阵列中物理磁盘的信息。 了解如何使用 PowerShell 脚本解决 Zabbix 中的监控问题 LSI-raid.ps1 我决定编写一个类似的程序来将信息传输到 GLPI。
有关阵列中磁盘的数据可以使用控制器制造商提供的实用程序获取;对于 LSI,这是 StorCLI。 您可以从中获取 JSON 格式的数据,解析它并将其传递给 GLPI API。 我们将把磁盘链接到 FusionInventory 已创建的计算机。 再次执行时,该脚本将更新磁盘上的数据并添加新数据。 脚本本身 Send-RAIDtoGLPI.ps1 是 在 GitHub 上。 接下来我就告诉大家如何使用。

将需要什么

  1. 格里菲 版本 9.5.1(在此版本上进行测试)
  2. 插件 融合库存 和 Windows 代理
  3. Windows 2012 R2(及更高版本)作为主机系统,或插入控制器的管理虚拟机,PowerShell 版本 4 或更高版本
  4. 安装 MegaRAID 驱动程序
  5. PowerShell 模块 - PSGLPI
  6. GLPI 中的帐户具有管理员配置文件,可通过 UserToken 和 AppToken 生成的 API 进行授权

很重要的一点。 由于某种原因,GLPI 对于磁盘模型有 2 个不同的实体,但没有“媒体类型”属性。 因此,为了记录 HDD 和 SSD 属性,我决定使用“硬盘型号”下拉列表(front/devicemodel.php?itemtype=DeviceHardDriveModel)。 该脚本必须在 GLPI 数据库中具有这些值,否则将无法写入有关磁盘模型的数据。 因此,您需要先将HDD添加到这个空列表中,然后将SSD添加到这个空列表中,以便这些元素在数据库中的ID为1和2。如果还有其他元素,则将脚本的这一行替换为Send-RAIDtoGLPI.ps1之后HDD 和 SSD 而不是 1 和 2 它们对应的 ID:

deviceharddrivemodels_id = switch ($MediaType) { "HDD" { "1" }; "SSD" { "2" }; default { "" } }

如果您不想为此烦恼,或者您以不同的方式使用此下拉列表,则只需从脚本中删除此行即可。

您还需要在“Element Statuses”(/front/state.php) 中添加磁盘状态。 我添加了状态“MediaError”(至少有一个磁盘访问错误)和“OK”,这是脚本中传输其 ID 的一行,“2”代表“OK”,“1”代表“MediaError”:

states_id = switch ($MediaError) { 0 { "2" }; { $_ -gt 0 } { "1" } }

这些状态是为了方便起见而需要的;如果您不需要这些属性,您也可以完全删除此行。

在脚本本身中,不要忘记将变量指向您的变量。 $GlpiCreds 必须包含 GLPI API 服务器的 URL、UserToken 和 AppToken。

剧本里有什么

由于繁琐的 JSON 解析和空的 ifs,该脚本很难阅读,所以我在这里描述它的逻辑。

首次在主机上启动时,脚本会遍历所有控制器,并通过序列号在 GLPI 数据库中搜索磁盘;如果没有找到,则查找型号;如果没有找到型号,则添加将新磁盘的型号添加到 GLPI 并将该磁盘输入到数据库中。

每次新通过时,脚本都会尝试检测新磁盘,但它不知道如何删除丢失的磁盘,因此您必须手动执行此操作。

部署示例

脚本存储库包含 Deploy-Send-RAIDtoGLPI.ps1 脚本,该脚本将从我们的 GLPI 服务器下载包含必要文件的 ZIP 存档,并将它们部署到每个主机。

复制文件后,脚本将安装 FusionInventory 代理以作为日常任务运行,并为我们的脚本创建相同的任务。 成功实现后,我们终于可以在GLPI中的计算机的Components部分看到驱动器了。

导致

现在,通过“设置”->“组件”->“硬盘”菜单中的GLPI,我们可以点击硬盘型号并查看其数量,以了解我们需要购买什么。

GLPI 中的 LSI RAID 库存
GLPI 中的 LSI RAID 库存

来源: habr.com

添加评论