获取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方式搞回的结果是对的。
目前现网使用ssh方法和curl两个并用,互相印证。