文档章节

Dell-OMSA监控设备硬件,整合nagios

jastme
 jastme
发布于 2015/07/14 14:12
字数 1825
阅读 761
收藏 2
Nagiso 客户端要求必须在dell服务器上安装 OMSA(Openmanage Server Administrator)

 
Nagios客户端安装OMSA (可参考http://linux.dell.com/repo/hardware/OMSA_7.4.0/)

 
1、增加dell的yum库 ( 可以访问 http://linux.dell.com/repo/hardware 查看最新版本 )
 wget -q -O - http://linux.dell.com/repo/hardware/OMSA_7.4.0/bootstrap.cgi | bash

 
2、安装srvadmin
 yum install srvadmin-all -y

 
3、启动srvadmin
/opt/dell/srvadmin/sbin/srvadmin-services.sh start

Nagios 服务端配置
 
1、dell官方OMSA监控脚本下载(下载至Nagios 服务器 /usr/local/nagios/libexec下,并赋nagios执行权限)
 wget  http://folk.uio.no/trondham/software/check_openmanage-3.7.11/check_openmanage
 
 另,由于check_openmanage为perl脚本,故需perl解释器 需安装 perl-Net-SNMP
yum install perl-Net-SNMP  
 
2、以下是手动执行脚本获取硬件状态
 
#电压
./check_openmanage -H 192.168.1.100  --only voltage
VOLTAGE OK - 20 voltage probes checked

 
#cpu
./check_openmanage -H 192.168.1.100  --only cpu
PROCESSORS OK - 1 processors checked

 
#风扇转速
./check_openmanage -H 192.168.1.100  --only fans
FANS OK - 12 fan probes checked

#存储
./check_openmanage -H 192.168.1.100  --only storage
STORAGE OK - 3 physical drives, 1 logical drives

 
#内存
./check_openmanage -H 192.168.1.100  --only memory
MEMORY OK - 2 memory modules, 32768 MB total memory

 
#电池
./check_openmanage -H 192.168.1.100  --only batteries
BATTERIES OK - 1 batteries checked

 
check_openmanage 脚本更多详细用法请参考:
http://folk.uio.no/trondham/software/check_openmanage.html
如果以上无报错时,便可配置到Nagios 中了,配置方法网上较多,在这里就不多说了


#卸载openManage Server Administrator
yum erase $(rpm -qa | grep srvadmin)

故障处理

1.当系统日志出现
 Server Administrator (Shared Library): Data Engine EventID: 0  A semaphore set has to be created but the system limit for the maximum number of semaphore sets has been exceeded 
 出现这个东西的时候表示你的监控已经不能用了。
 大概意思是说:由于系统最大信号数量的限制,Data Engine未能成功开启。
 这需要修改系统内核对于 semaphore sets 的设定。方法如下:
 
ipcs -l
   ------ Shared Memory Limits --------  
   max number of segments = 4096  
   max seg size (kbytes) = 67108864  
   max total shared memory (kbytes) = 17179869184  
   min seg size (bytes) = 1  
   ------ Semaphore Limits --------  
   max number of arrays = 128  
   max semaphores per array = 250  
   max semaphores system wide = 32000  
   max ops per semop call = 32  
   semaphore max value = 32767  
   ------ Messages: Limits --------  
   max queues system wide = 16  
   max size of message (bytes) = 65536  
   default max size of queue (bytes) = 65536
   
sysctl -a | grep shm  
   vm.hugetlb_shm_group = 0  
   kernel.shmmni = 4096  
   kernel.shmall = 4294967296  
   kernel.shmmax = 68719476736 
 
 
 解决办法
 调整
 max queues system wide
 max number of arrays
 
 sysctl -w kernel.msgmni=16384 
 sysctl -w kernel.sem="250 32000 100 1024" 
 ##################################################
 echo "kernel.msgmni=16384" >> /etc/sysctl.conf 
 echo "kernel.sem=\"250 32000 100 1024\"" >> /etc/sysctl.conf 
 
 再次查看
ipcs -l 

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 67108864
max total shared memory (kbytes) = 17179869184
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 1024
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767

------ Messages: Limits --------
max queues system wide = 16384
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536

重启
/opt/dell/srvadmin/sbin/srvadmin-services.sh restart

refused smux peer: oid SNMPv2-SMI::enterprises.674.10892.1, descr Systems Management SNMP MIB Plug-in Manager 
SNMP 被拒绝
/etc/init.d/snmpd restart 即可  如果你的配置是正确的

3

ipmi_si: Could not enable interrupts, failed set, using polled mode.  
不能中断,错误的设置,使用轮询的方式。这个问题多半是服务器的共享内存队列太长所导致,使用
ipcs -a | grep nagios | awk '{print $2}' | xargs -n1 ipcrm -s 来删除nagios用户的共享内存和队列,让系统重新创建。
脚本check_openmanage超时也可以使用这个命令来操作
/opt/dell/srvadmin/sbin/srvadmin-services.sh stop
/etc/init.d/ipmi stop
/opt/dell/srvadmin/sbin/srvadmin-services.sh start
即可解决超时问题

下面我们将用自己的办法监控机器的状态


Get_Dell_Server_Detail.py   搜集DELL硬件信息  保存到/tmp目录下
cat /data/program/nagios-client/libexec/Get_Dell_Server_Detail.py 
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-

"""
The Dell Server Hardware Detail
author jastme
"""

import commands,os

try:
    if os.path.exists('/tmp/Dell_Hardware_Detail.txt'):
        pass
except IOError:
    f=open('/tmp/Dell_Hardware_Detail.txt','w')
    f.close()

def DellServer():
    detail=commands.getoutput('/data/program/nagios-client/libexec/check_openmanage -s -d')
    ff=open('/tmp/Dell_Hardware_Detail.txt','w')
    ff.write(detail)
    ff.close()

if __name__ == '__main__':
    DellServer()

###########################################

cat check_raid_card.py     #################
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
CHECK DELL SERVER --> RAID CARD
author jastme
"""

import commands,os,sys

def RaidCard():
    Controller=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Controller')
    l=[]
    for i in Controller.split('|'):
        l.append(i.strip(' '))
    NUM=str(l.count('OK'))
    if 'OK' in Controller and 'Ready' in Controller:
        print '%s | Status = %sOK;' %('   '.join(l),NUM)
        sys.exit(0)
    else:
        print '%s | Status = %sOK;' %('   '.join(l),NUM)
        sys.exit(2)
if __name__ == '__main__':
    RaidCard()
    
########################################################################
./check_raid_card.py 
OK   0   Controller 0 [PERC H710 Mini] is Ready | Status = 1OK;  这个是输出格式,可用于pnp4nagios出图

######################################################################

cat check_raid.py
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
CHECK DELL SERVER --> RAID
author jastme
"""

import commands,os,sys

def Raid():
    Physical_Drive=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Logical')
    l=[]
    for i in Physical_Drive.split('|'):
        l.append(i.strip(' '))
    NUM=str(l.count('OK'))
    if 'OK' in Physical_Drive and 'Ready' in Physical_Drive:
        print '%s | Status = %sOK;' %('   '.join(l),NUM)
        sys.exit(0)
    else:
        print '%s | Status = %sOK;' %('   '.join(l),NUM)
        sys.exit(2)
if __name__ == '__main__':
    Raid()
./check_raid.py
OK   0:0   Logical Drive '/dev/sda' [RAID-5, 1,115.50 GB] is Ready | Status = 1OK;

###########################################################

cat check_power_supply.py
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
CHECK DELL SERVER --> Power Supply
author jastme
"""

import commands,os,sys

def Power_Supply():
    Power=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Power | grep Supply')
    l=[]
    NUM=0
    for i in Power.split('\n'):
        l.append(' '.join(i.split('|'))+' \n')
        if 'OK' in i:
            NUM=NUM+1
    if NUM == 2:
        print '%s | Status = %sOK;' %(l,NUM)
        sys.exit(0)
    else:
        print '%s | Status = %sOK;' %(l.join(l),NUM)
        sys.exit(2)
if __name__ == '__main__':
    Power_Supply()
./check_power_supply.py 
['      OK      0   Power Supply 0 [AC]: Presence Detected \n', '      OK      1   Power Supply 1 [AC]: Presence Detected \n'] | Status = 2OK;

##########################################

cat check_fans.py
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
CHECK DELL SERVER --> Physical fan
author   jastme
"""

import commands,os,sys

def Fans():
    fan=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep fan')
    fans_num=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep fan | wc -l')
    l=[]
    NUM=0 
    for i in fan.split('\n'):
        l.append(' '.join(i.split('|'))+' \n')
        if 'OK' in i:
            NUM=NUM+1
    ll=[]
    for i in l:
        ll.append(' '.join([x for x in i.split(' ') if x !='' and x !='[System' and x !='Chassis' and x != 'Board' and x !='RPM]'] )) 
    if int(NUM) == int(fans_num):
        print '%s | Status = %sOK;' %(ll,NUM)
        sys.exit(0)
    else:
        print '%s | Status = %sOK;' %(ll,NUM)
        sys.exit(2)
if __name__ == '__main__':
    Fans()
./check_fans.py
['OK 0 fan 0 Fan1A reading: 3360 RPM \n', 'OK 1 fan 1 Fan2A reading: 3480 RPM \n', 'OK 2 fan 2 Fan3A reading: 3600 RPM \n', 'OK 3 fan 3 Fan4A reading: 3240 RPM \n', 'OK 4 fan 4 Fan5A reading: 3480 RPM \n', 'OK 5 fan 5 Fan6A reading: 3480 RPM \n', 'OK 6 fan 6 Fan7A reading: 3600 RPM \n', 'OK 7 fan 7 Fan1B reading: 3120 RPM \n', 'OK 8 fan 8 Fan2B reading: 3240 RPM \n', 'OK 9 fan 9 Fan3B reading: 3240 RPM \n', 'OK 10 fan 10 Fan4B reading: 3120 RPM \n', 'OK 11 fan 11 Fan5B reading: 3240 RPM \n', 'OK 12 fan 12 Fan6B reading: 3240 RPM \n', 'OK 13 fan 13 Fan7B reading: 3120 RPM \n'] | Status = 14OK;

################################################################

cat check_Physical_Disk.py
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
CHECK DELL SERVER --> Physical Disk
author   wubo
"""

import commands,os,sys

def Disk():
    Disk=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Physical')
    Disk_num=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Physical | wc -l')
    l=[]
    NUM=0
    for i in Disk.split('\n'):
        l.append(' '.join(i.split('|'))+' \n')
        if 'OK' in i:
            NUM=NUM+1
    if int(NUM) == int(Disk_num):
        print '%s | Status = %sOK;' %(l,NUM)
        sys.exit(0)
    else:
        print '%s | Status = %sOK;' %(l,NUM)
        sys.exit(2)
if __name__ == '__main__':
    Disk()
 ./check_Physical_Disk.py 
['      OK    0:0:1:0   Physical Disk 0:1:0 [SAS-HDD 300GB] on ctrl 0 is Online \n', '      OK    0:0:1:1   Physical Disk 0:1:1 [SAS-HDD 300GB] on ctrl 0 is Online \n', '      OK    0:0:1:2   Physical Disk 0:1:2 [SAS-HDD 300GB] on ctrl 0 is Online \n', '      OK    0:0:1:3   Physical Disk 0:1:3 [SAS-HDD 300GB] on ctrl 0 is Online \n', '      OK    0:0:1:4   Physical Disk 0:1:4 [SAS-HDD 300GB] on ctrl 0 is Online \n', '      OK    0:0:1:5   Physical Disk 0:1:5 [SAS-HDD 300GB] on ctrl 0 is Ready (Global HS) \n'] | Status = 6OK;

#################################################

cat check_memory_module.py
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
CHECK DELL SERVER --> Memory module
author jastme
"""

import commands,os,sys

def Memory_module():
    Memory=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Memory')
    Memory_num=commands.getoutput('cat /tmp/Dell_Hardware_Detail.txt | grep Memory | wc -l')
    l=[]
    NUM=0
    for i in Memory.split('\n'):
        l.append(' '.join(i.split('|'))+' \n')
        if 'OK' in i and 'Ok' in i:
            NUM=NUM+1
    if int(NUM) == int(Memory_num):
        print '%s | Status = %sOK;' %(l,NUM)
        sys.exit(0)
    else:
        print '%s | Status = %sOK;' %(l,NUM)
        sys.exit(2)
if __name__ == '__main__':
    Memory_module()
./check_memory_module.py 
['      OK      0   Memory module 0 [DIMM_A1, 16384 MB] is Ok \n', '      OK      1   Memory module 1 [DIMM_A2, 16384 MB] is Ok \n', '      OK      2   Memory module 2 [DIMM_A3, 16384 MB] is Ok \n', '      OK      3   Memory module 3 [DIMM_A4, 16384 MB] is Ok \n', '      OK      4   Memory module 4 [DIMM_A5, 16384 MB] is Ok \n', '      OK      5   Memory module 5 [DIMM_A6, 16384 MB] is Ok \n', '      OK      6   Memory module 6 [DIMM_A7, 16384 MB] is Ok \n', '      OK      7   Memory module 7 [DIMM_A8, 16384 MB] is Ok \n'] | Status = 8OK;

##############################################################################################

以上就是全部的代码

为nagios用户创建cron
#dell
*/5 * * * * /data/program/nagios-client/libexec/Get_Dell_Server_Detail.py   每5分钟搜集一次系统状态

然后启动nrpe

后面就是页面的展示了

© 著作权归作者所有

jastme
粉丝 40
博文 137
码字总数 61324
作品 0
成都
程序员
私信 提问
服务器硬件监控之OMSA

前一周上架服务器,本来准备把针对服务器的硬件监控这一部分总结下成文,结果过个端午给过忘了。。。今天就又整理了下,在这里分享给51博友,也算是对自己前段工作的一个总结。 在对服务器的...

aaao
2015/06/23
0
0
硬件层监控之Zabbix-snmp-trap企业级实战

监控对象: 服务器 存储 交换机 路由器 防洪墙 监控数据采集方法: SNMP trap 目前我监控以下的硬件信息: 1、cpu处理器状态 2、cpu省电模式状态(如果开启了省电模式,在压力大的时候,会很...

heavenseahill
2017/11/08
0
0
zabbix 监控硬件

之前介绍的zabbix监控都是属于监控服务方面,现在介绍一下zabbix监控服务器硬件信息的。 本文出自 “吟—技术交流” 博客http://dl528888.blog.51cto.com/2382721/1403893 之前介绍的zabbix监...

暖暖miss
2017/06/01
0
0
服务器硬件监控之Check_openmanage

昨天分享了下服务器硬件监控的知识,在文章的结尾提到了check_openmanage工具。本文就主要介绍这个工具在服务器硬件监控方面的作用。 一、check_openmanage介绍 check_openmanage 是一个 Na...

aaao
2015/06/24
0
0
zabbix企业应用之centos7安装硬件监控

之前介绍过dell服务器在centos5、6与ubuntu、windows系统里部署硬件监控,最近我在测试docker集群,很多集群软件都依赖centos7的systemd,所以我研究了一下如何在centos7里部署硬件监控,基于...

dl528888
2015/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL左连接问题,右表做筛选,左表列依然在

两张表,一张user表,一张user_log表 CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFA......

bengozhong
19分钟前
4
0
重新开始学Java——多线程基础

多线程 进程 主流计算机操作系统都支持同时运行多个任务 , 每个任务通常就是一个程序 , 每个运行中的程序就是一个进程或者多个进程 。 进程的特点 独立性 进程是系统中独立存在的实体 可以...

大家都是低调来的
20分钟前
3
0
注解在Java中是如何工作的?

> 来一点咖啡,准备好进入注解的世界。 注解一直是 Java 的一个非常重要的部分,它从 J2SE 5.0 开始就已经存在了。在我们的应用程序代码中,经常看到 @Override 和 @Deprecated 这样的注解。...

liululee
23分钟前
7
0
Docker 容器连接

Docker 容器连接 容器间的链接有两种方法,你选择其一即可 网络端口映射 docker run -d -P docker run -d -p-P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定...

测者陈磊
26分钟前
5
0
车载导航应用中基于Sketch UI主题定制方案的实现

1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式、压缩资源、插件等) 其实,针对不同的主题...

阿里云官方博客
31分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部