获取HP硬件状态

一、HP刀片

通过登陆ssh刀框管理口,执行show server status all获取所有刀片的健康信息,这里以其中一个单刀为例,获取的结果如下:

OA-984BE1604CA7> show server status all
Blade #1 Status:
        Power: On
        Current Wattage used: 480
        Health: OK
        Unit Identification LED: Off
        Virtual Fan: 25%
        Diagnostic Status:
                Internal Data                            OK
                Management Processor                     OK
                I/O Configuration                        OK
                Power                                    OK
                Cooling                                  OK
                Location                                 OK
                Device Failure                           OK
                Device Degraded                          OK
                iLO Network                              OK
                Mezzanine Card                           OK

如果每一框所有的刀片都这样取,输出结果太多,不方便看。由于Health代表的主机的健康状态信息,所以可以通过只取该结果来判断刀片状态是否正常。

# sshpass -p'PASSWORD' ssh -o StrictHostKeyChecking=no admin@10.211.58.171 'show server status all'|grep -i Health

        Health: OK
        Health: OK
        Health: OK
        Health: OK
        Health: OK
        Health: OK
        Health: OK
        Health: OK

二、HP PCserver

1. ipmitool

由于HP PCserver的ssh命令并不规整,所以初始考虑使用openipmi取相应的结果,命令如下:

ipmitool -I lanplus  -H $IP -U$USERNAME -P$PASSWORD sdr list|grep -v disabled

后来实际应用中,发现ipmitool取得的结果不准确,比如一台主机的硬盘坏了,但ipmitools取的所有结果还是ok。

2. ssh

虽然HP PCserver的命令不规整,但是后来还是摸索出了规律,发现可以通过如下方法获取,这里以硬盘为例:

[root@361way.com health]# sshpass -p'PASSWORD' ssh -o StrictHostKeyChecking=no USERNAME@10.211.138.73 -a "show /system1/drives1" |grep Bay
    Bay 1 - drive status=Ok; UID=Off
    Bay 2 - drive status=Smart Error; UID=Off   //该块硬盘有问题
    Bay 3 - drive status=Ok; UID=Off
    Bay 4 - drive status=Ok; UID=Off
    Bay 5 - drive status=Ok; UID=Off
    Bay 6 - drive status=Ok; UID=Off
    Bay 7 - drive status=Ok; UID=Off
    Bay 8 - drive status=Ok; UID=Off

由于购买的HP服务器有多个批次,发现一部分主机取不到这个信息,经查看发现,部分主机里没有drivers1这项,其他像fans、powers都是有的。在ssh模块里也没有发现能显示主机状态的指令。

3. RESTful API

从HP官方的文档来看,其支持RESTful api这种方式获取相关信息,最初想通过HP官方的Python包获取数据,发现下来的包根本不能用,一切从简换用CURL处理,示例如下:

[root@361way.com health]# curl -s -k -u USERNAME:'PASSWORD' https://10.211.138.73/json/health_summary |jq . 
{
  "hostpwr_state": "ON",
  "fans_status": "OP_STATUS_OK",
  "fans_redundancy": "REDUNDANT",
  "temperature_status": "OP_STATUS_OK",
  "vrm_status": "OP_STATUS_OTHER",
  "power_supplies_status": "OP_STATUS_OK",
  "power_supplies_redundancy": "REDUNDANT",
  "power_supplies_mismatch": 0,
  "drive_status": "OP_STATUS_FAILED"   //状态失败,发现后,可以再通过管理口上查看,发现坏盘
}

通过页面抓包,发现其还有一些其他URL可以搞,如下:

https://200.200.2.73/json/overview
https://200.200.2.75/json/health_drives
https://200.200.2.75/json/health_phy_drives

不过不像health_summary --- 在所有批次的主机里都有,部分URL在某些批次的主机里没有数据返回,而且会报错。

另外需要注意,jq命令不是系统自动的,这个json处理命令可以从github上下载,如下:

wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
chmod +x ./jq
cp jq /usr/local/bin

RESTful获取的速度比较快,但在使用中发现过个别蛋疼的事情。比如一块硬盘坏了,但是storage看到的状态是ok的,这个不能管取回的结果,因为这个取得的结果和ILO口上看到的一致。但ssh方式搞回的结果是对的。

hp服务器状态

目前现网使用ssh方法和curl两个并用,互相印证。

参考页面:

hp restful-api

hp ilo-rest-api-docs


donation