项目地址: https://github.com/zhangrj/HUAWEI-OceanStor-Sx900-Monitor

开发背景

公司使用的两套华为S3900存储,缺乏监控手段,十分依赖人工巡检。通过OceanStor ISM可以直观的检查磁阵的状态。在系统配置->事件日志中,可以配置TRAP IP及事件通知(邮件、短信、Syslog等),这是必须配置的,也是非常有用的。但是从监控的角度来讲却略微有些不够直观,因为只有在发生故障的时候才能看到故障状态,从监控系统中却无法实时查看各组件状态。

使用到的知识点

expect

expect是一种简单的工具语言,用来实现与系统的自动交互。常用的关键词有:

  • sspawn:后面加上需要执行的shell命令
  • expect:expect脚本中用于等待和分析机器执行结果用
  • send:expect脚本中用于模仿“人”向机器进程发出linux命令用

S3900存储没有相应的API可使用,也没有找到MIB参考文档,但可以使用SSH登录,因此可以使用expect与之交互来获取存储状态。S3900存储使用SSH登录后常用的命令有:

  • ?:用于显示可用的命令
  • showcontroller:显示控制器状态
  • showdisk -physic:显示物理硬盘状态
  • showdisk -logic:显示逻辑硬盘状态
  • showenclosure:显示框状态
  • showfan:显示风扇状态
  • showpower:显示电源状态

Zabbix自动发现与zabbix_sender

每套存储的硬盘数量、框数量等配置均有不通,所以监控此类设备需要使用zabbix的自动发现功能,我已在模板中配置好:https://github.com/zhangrj/HUAWEI-OceanStor-Sx900-Monitor/blob/master/zbx_HUAWEI_OceanStort_Sx900_templates.xml

为了降低zabbix server压力,我通常使用zabbix_sender来上传监控数据。

使用如下命令上传自动发现数据:

zabbix_sender -z server [-p port] [-I IP-address] -s host -k key -o value

其中k为自动发现key值,o为json格式数据。我们可以用zabbix_get来看一下zabbix都接受什么样的数据,以自动发现文件系统为例:

[root@localhost]# zabbix_get -s 172.20.0.198 -k vfs.fs.discovery
[{"{#FSNAME}":"/","{#FSTYPE}":"rootfs"},{"{#FSNAME}":"/","{#FSTYPE}":"ext3"},{"{#FSNAME}":"/dev","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/proc","{#FSTYPE}":"proc"},{"{#FSNAME}":"/sys","{#FSTYPE}":"sysfs"},{"{#FSNAME}":"/proc/bus/usb","{#FSTYPE}":"usbfs"},{"{#FSNAME}":"/dev/pts","{#FSTYPE}":"devpts"},{"{#FSNAME}":"/var","{#FSTYPE}":"ext3"},{"{#FSNAME}":"/usr","{#FSTYPE}":"ext3"},{"{#FSNAME}":"/tmp","{#FSTYPE}":"ext3"},{"{#FSNAME}":"/home","{#FSTYPE}":"ext3"},{"{#FSNAME}":"/dev/shm","{#FSTYPE}":"tmpfs"},{"{#FSNAME}":"/proc/sys/fs/binfmt_misc","{#FSTYPE}":"binfmt_misc"},{"{#FSNAME}":"/var/lib/nfs/rpc_pipefs","{#FSTYPE}":"rpc_pipefs"}]

即可以按照上述格式来构建json数据。

使用如下命令发送监控项数据:

zabbix_sender [-v] -z server [-p port] [-I IP-address] [-s host] [-T] [-r] -i input-file

因为监控项很多,为了减少zabbix_sender命令的调用次数,将各类监控项及其对应的监控数据写入文件一次性发送。i参数的文件内容应按照如下示例构建:

192.168.137.52 "Sx900.power.[Enclosure 0 Power 0]" Normal
192.168.137.52 "Sx900.power.[Enclosure 0 Power 1]" Normal
192.168.137.52 "Sx900.power.[Enclosure 1 Power 0]" Normal
192.168.137.52 "Sx900.power.[Enclosure 1 Power 1]" Normal
192.168.137.52 "Sx900.power.[Enclosure 1 Power 2]" Normal
192.168.137.52 "Sx900.power.[Enclosure 1 Power 3]" Normal
192.168.137.52 "Sx900.power.[Enclosure 2 Power 0]" Normal
192.168.137.52 "Sx900.power.[Enclosure 2 Power 1]" Normal
192.168.137.52 "Sx900.power.[Enclosure 2 Power 2]" Normal
192.168.137.52 "Sx900.power.[Enclosure 2 Power 3]" Normal

脚本的工作流程及使用方法

工作流程

**_discovery_status.py调用执行**_info.sh,通过expect交互命令取得组件的状态信息并写入文件**info。这一步需要注意交互命令显示结果有“–More–”时需做处理,例如showdisk -physic:

admin:/>showdisk -physic
=====================================================================================================================Disk Information
---------------------------------------------------------------------------------------------------------------------Disk Location    Status    Type      Vendor     Model              Serial Number           FW Version    Speed(RPM)Rate(Gbps)    Raw Capacity(GB)    BarCode
---------------------------------------------------------------------------------------------------------------------(0,0)            Normal    SAS       Seagate    ST600MM0006        S0M1GMG30000M4207A1N    B001          10000     6.0           558                 210235G6M910E1000251  (0,1)            Normal    SAS       Seagate    ST600MM0006        S0M1GP8Q0000B419CJM4    B001          10000     6.0           558                 210235G6M910E1000263  (0,2)            Normal    SAS       Seagate    ST600MM0006        S0M1GN6V0000M4207A16    B001          10000     6.0           558                 210235G6M910E1000247
--More--

expect交互脚本中可做如下处理:

while { $running  > 0 } {expect {"\n" { puts -nonewline $output "$expect_out(buffer)" }-re "--More--" { send " " }-re ">" {send "exit\r"expect -re "y/n"send "y\r"expect eof#关闭文件close $outputset running 0}}
}

使用**info文件的中的数据构建自动发现json数据;

使用**info文件中的数据构建监控项及其status文件;

使用zabbix_sender想zabbix server发送自动发现及监控项数据;

使用方法

在任意一台可ssh登录存储的服务器上:

  • 安装expect:yum install expect
  • 安装zabbix_sender:yum install zabbix_sender
  • 创建文件夹:touch /root/HW_S3900(程序中的文件路径是写死的,你可以自行修改,文件夹路径与程序中保持一致即可)
  • 上传**_status.py、**info.sh到/root/HWS3900,并添加执行权限
  • 修改**.py中的如下字段:
zabbix_sender = "/usr/bin/zabbix_sender"  //zabbix_sender路径
zabbix_serevr = 'zabbix_server_ip'
zabbix_port = '10051'Sx900_IP = '存储控制器IP'
Sx900_Port = '22'
Sx900_Username = '存储登录账户'
Sx900_Pwd = '存储登录密码'
  • 设置定时任务:crontab -e,添加:
0 * * * * /usr/bin/python /root/HW_S3900/controller_discovery_status.py > /dev/null 2>&1
5 * * * * /usr/bin/python /root/HW_S3900/disk_discovery_status.py > /dev/null 2>&1
10 * * * * /usr/bin/python /root/HW_S3900/enclosure_discovery_status.py > /dev/null 2>&1
15 * * * * /usr/bin/python /root/HW_S3900/fan_discovery_status.py > /dev/null 2>&1
20 * * * * /usr/bin/python /root/HW_S3900/power_discovery_status.py > /dev/null 2>&1
  • 导入zabbix模板zbx_HUAWEI_OceanStort_Sx900_templates.xml
  • 创建主机,主机名称为存储控制器IP,即第5步中的Sx900_IP。
  • 手动执行一次**.py,查看zabbix中的监控数据是否刷新。

备注

脚本写得很粗糙,读者可自行优化,掌握方法即可。

华为Sx900存储的监控(使用Zabbix)相关推荐

  1. 全网最详细的zabbix监控(zabbix安装和配置、web页面配置、监控Linux主机、监控华为交换机、监控Windows、监控nginx)

    目录 前言 一.准备工作 二.zabbix server端 三.zabbix-agent Linux客户端的安装 四.zabbix-agent Windows客户端的安装 五.使用zabbix监控ng ...

  2. 监控平台zabbix高级配置

    2019独角兽企业重金招聘Python工程师标准>>> 12月26日任务 19.12 添加自定义监控项目 19.13/19.14 配置邮件告警 19.15 测试告警 19.16 不发 ...

  3. 服务器监控软件ZABBIX

    1.什么是ZABBIX? zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以 ...

  4. 监控系统zabbix

    一.zabbix监控 1.为什么要监控 当我们需要实时关注与其相关的各项指标是否正常,往往存在着很多的服务器.网络设备等硬件资源,如果我们想要能够更加方便的.集中的监控他们,zabix可以实现集中监控 ...

  5. 分布式监控平台——Zabbix

    目录 一.zabbix概述 1.zabbix是什么 2.zabbix构成 3.zabbix监控原理 4.zabbix端口号 二.安装zabbix 1.部署 zabbix 服务端 2.部署 zabbix ...

  6. 分布式监控平台-Zabbix

    分布监控平台-Zabbix 一.Zabbix概述 1.Zabbix是什么? 2.Zabbix监控原理 二.部署Zabbix服务端(端口:10051) 1.关闭防火墙 修改主机名 2.获取Zabbix下 ...

  7. 安装监控系统zabbix

    官方网站 http://www.zabbix.com/ 为什么要监控 对于运维人员来说,监控是非常重要的,因此如果想要保证线上业务整体能够稳定运行,那么我们则需要实时关注与其相关的各项指标是否正常,而 ...

  8. 大厂经典运维监控(Zabbix+Prometheus)面试题整理汇总

    1.监控原则 监控是基础设施,目的是为了解决问题,不要只朝着大而全去做,尤其是不必要的指标采集,浪费人力和存储资源(To B商业产品例外). 需要处理的告警才发出来,发出来的告警必须得到处理. 简单的 ...

  9. 分布式应用之监控平台zabbix的认识与搭建

    内容预知 1.监控系统的相关知识 1.1 监控系统运用的原因 1.2 网站的可用性 1.3 市面上常用的监控系统 2.zabbix的相关知识 2.1 zabbix的概述 2.2 zabbix 是什么? ...

最新文章

  1. 再学Android之多线程
  2. 从名称认识电容在电路中的作用
  3. 建议被降级降薪员工主动辞职?网友炸了!
  4. 吴恩达-《深度学习DeepLearning》汇总目录
  5. 运算符优先级与结合性
  6. android下载图片服务,Android中的背景图片下载需要帮助吗?
  7. 制炭机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. Python 实例教程
  9. 前端开发所需基本环境和软件配置
  10. 水电图纸——安装配电箱,插座——3.8
  11. 手撸一个外卖点餐系统后台,可以写上简历的实战项目!
  12. 【愚公系列】2023年01月 .NET CORE工具案例-CS-Script脚本执行引擎
  13. 常见的几种距离量度(欧式距离、曼哈顿距离、切比雪夫距离等)
  14. 【转】怎样运行 Vue 打包后的项目
  15. 【CH376】使用CH376控制U盘-读写文件
  16. Go+ 发布 weekly release: v0.7.3
  17. MySQL创建用户,并赋予表权限
  18. MATLAB与安捷伦lan口通讯,matlab与安捷伦示波器通讯问题
  19. 树莓派CM4 USB不能使用
  20. c++基础-继承与派生,定义基类person和公有派生类student

热门文章

  1. 安卓版PDA扫码获取扫描枪数据;input获取焦点不弹出虚拟键盘;解决页面btn可操作数据的逻辑,导致DOM元素渲染,input的readonly失效
  2. 该死!GitHub上这些C++项目真香
  3. SUSAN算子——边缘检测
  4. 手机上的廉价快感,真的得戒掉
  5. 我的计算机光盘无法显示,为何电脑上插上光盘显示不出来
  6. python3中的os.path模块
  7. 四川学计算机好的专科学院,四川有哪些好的计算机编程专科学校
  8. 基于PLC的智能农业温室大棚控制系统设计大棚电气控制组态 温室大棚组态 温室组态
  9. 【快应用】折叠屏手机打开快应用页面重新加载问题
  10. D/D/O/S学习思维导图