项目地址: 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. linux下生成https的crt和key证书
  2. 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
  3. linux 密码策略设置,设置Linux密码策略
  4. 关于面向对象设计中类的方法是否应该使用boolean类型的参数
  5. html画特殊图形(待修改)
  6. java volatile修饰引用_关于volatile修饰引用类型的疑惑
  7. centos7 关闭防火墙的指令_CentOS7 怎么安装配置chrony时间同步服务?
  8. 上科大提出:对抗神经网络 动态人像系统SofGAN!
  9. Datatables + Bootstrap
  10. svn update中文报错_svn不能更新也不能提交!为什么?
  11. 一个资深系统管理员的O2O实践(引子)
  12. 用反射实现简单的框架
  13. arcgis中将地理坐标转换为投影坐标 / 经纬度坐标转换
  14. 进行单元测试时一直报这个错,原因是缺少aspectjweaver包
  15. php网页可视化编辑器,推荐几款HTML可视化在线编辑器
  16. C4D景深与运动模糊及hdr预设文件添加技巧
  17. ThreadLocal工具类
  18. Error running : No valid Maven installation found. Either set the
  19. uniapp子组件路由跳转老是失败
  20. workman定时任务队列雏形

热门文章

  1. 超然改编《该死的温柔》-王嘉尔
  2. Windows 系统错误193: 0xc1
  3. Pandas: 交叉表(crosstab)和透视表(pivot_table)的用法
  4. mysql之把查询的结果保存到新表
  5. TCP 通信程序学习
  6. S32DS 3.4 3.5颜色配色方案及代码自动补全提示
  7. Android宫格动态列,在Android app中实现九(n)宫格图片连续滑动效果
  8. AV1视频编码标准资源汇总 转载
  9. 2022年中国研究生报考现状分析:考研热度只增不减,就业压力仍为主要因素[图]
  10. 【干货】绕过校园网认证实现轻松上网