修改SNMP端口并利用snmpwalk测试,nagios监控,脚本读取后筛选出磁盘占用空间的值

############################################################
插入一个信息
Handy.sh里,Linux下如果要根据read到的nl序号筛选出目录名。
需要用以下表达式:
folder_name=ls -l "$DIR" | awk -F" " ‘{ print $9 }‘ | grep -v Handy.sh | nl | grep ‘\ ‘"$REPLY"$‘\t‘ | a<br/>wk ‘{ print $2 }‘

URL:https://www.linuxidc.com/Linux/2011-11/47000.htm

############################################################
标题:修改SNMP端口并利用snmpwalk测试,nagios监控,脚本读取后筛选出磁盘占用空间的值

正文:

当UDP161端口被网站服务SNMP占用时,如何通过修改SNMP端口来实现双SNMP同时监控?

起因:想用nagios监控Redbox所在的Server,用netstat却发现161端口已被占用,更奇怪的是,services.msc里的SNMP Service却没有

开启。
后来发现,Redbox这个平台的网页上也可以设置SNMP,但是无法修改SNMP的端口号。由于这是仅针对于平台的SNMP监控,所以采集到的

信息并非server的信息。
[[email protected] libexec]# snmpwalk -v1 -c public x.x.0.20
SNMPv2-MIB::sysDescr.0 = STRING: Red Box Recorder
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9854.2
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (261002866) 30 days, 5:00:28.66
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: SHARBM01
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 0
[[email protected] libexec]#

在Redbox网页端设置的SNMP占用了161端口后,想办法在所在Server上也启用SNMP监控服务器本身的方法。终究被我找到了。
而且经测试,并不会影响到网页上设置的SNMP服务。这也说明了网页端的SNMP并没有调用Windows Server上的SNMP服务,只是占用了这

个公认的端口。

接下来进行Windows Server的SNMP Service定义。

1.修改service文件里的SNMP端口
https://blog.csdn.net/liang4571231/article/details/6749833

2.启动services.msc里的SNMP service服务,配置好必要的community和allow IP。

3.用snmpwalk检测连通性时发现,snmpwalk工具没有指定SNMP端口的参数,但是却告诉了我们使用方法。
[[email protected] ~]# snmpwalk -v1 -c public x.x.0.21 -p:16161
Warning: -p option is no longer used - specify the remote host as HOST:PORT

[[email protected] libexec]# snmpwalk -v1 -c public x.x.0.20:16161
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: Intel64 Family 6 Model 63 Stepping 2 AT/AT COMPATIBLE - Software: Windows

Version 6.1 (Build 7601 Multiprocessor Free)
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.311.1.1.3.1.2
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (132130) 0:22:01.30
SNMPv2-MIB::sysContact.0 = STRING:
SNMPv2-MIB::sysName.0 = STRING: SHARBM01.xxxx.aspa.xxxx.local
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 76
IF-MIB::ifNumber.0 = INTEGER: 26
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifIndex.3 = INTEGER: 3
.....

4.用check_snmp_storage.pl的插件来抓取我们要的信息。

[[email protected] libexec]# ./check_snmp_storage.pl -C public -H x.x.0.20 -p16161 -m ^[CD]: -w 1 -c 2 -v
Alarm at 15
SNMP v1 login
Filter : ^[CD]:
OID : 1.3.6.1.2.1.25.2.3.1.3.3, Desc : F:\
OID : 1.3.6.1.2.1.25.2.3.1.3.5, Desc : Physical Memory
OID : 1.3.6.1.2.1.25.2.3.1.3.2, Desc : D:\ Label:DATA Serial Number 4ca023fc
Name : D:\ Label:DATA Serial Number 4ca023fc, Index : 2
OID : 1.3.6.1.2.1.25.2.3.1.3.4, Desc : Virtual Memory
OID : 1.3.6.1.2.1.25.2.3.1.3.1, Desc : C:\ Label: Serial Number 43dd6d28
Name : C:\ Label: Serial Number 43dd6d28, Index : 1
storages selected : 2
Descr : D:\ Label:DATA Serial Number 4ca023fc
Size : 950481663
Used : 189262909
Alloc : 4096
Descr : C:\ Label: Serial Number 43dd6d28
Size : 26188139
Used : 8212374
Alloc : 4096
Perf data : ‘D:_Label:DATA__Serial_Number_4ca023fc‘=739308MB;37128;74256;0;3712819 ‘C:

_Label:__Serial_Number_43dd6d28‘=32080MB;1023;2046;0;102297
D:\ Label:DATA Serial Number 4ca023fc: 20%used(739308MB/3712819MB) C:\ Label: Serial Number 43dd6d28: 31%used

(32080MB/102297MB) (>2%) : CRITICAL

5.接下来就可以用nagios来添加监控项了。

[[email protected] objects]# tail -n2 ../resource.cfg

Sets $USER7$ to be the SNMP community name

$USER7$=public

[[email protected] objects]# vi commands.cfg
define command {
command_name check_snmp_stor

command_line $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -C $ARG1$ -m $ARG2$ -w $ARG3$ -c $ARG4$

command_line    $USER1$/check_snmp_storage.pl -H $HOSTADDRESS$ -p $ARG1$  -C $USER7$ -m $ARG2$ -w $ARG3$ -c $ARG4$
}

对参数作了一定修改。

[[email protected] objects]# vi windows.cfg
define service {
use generic-service
hostgroup_name windows-servers ; The name of the hostgroup
service_description C:\ Disk Space

check_command check_snmp_stor!public!C:!70!90

check_command           check_snmp_stor!161!C:!70!90

}

先验证下修改后的配置文件对于原来的监控是否正常。

6.经验证正常后,开始添加Redbox Server到Nagios。
由于定义的host如果use模板windows-server,那就会被上面定义的service自动生成监控,但段口号却是不对的。
所以我们需要区别对待,为所有16161端口的windows-server定义另一个template.
[[email protected] objects]# vi templates.cfg
新增以下template。
define host {

name                            redbox-server          ; The name of this host template
use                             generic-host            ; Inherit default values from the generic-host template
check_period                    24x7                    ; By default, Windows servers are monitored round the 

clock
check_interval 5 ; Actively check the server every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each server 10 times (max)
check_command check-host-alive ; Default command to check if servers are "alive"
notification_period 24x7 ; Send notification out at any time - day or night
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
hostgroups redbox-servers ; Host groups that Windows servers should be a member of
register 0 ; DON‘T REGISTER THIS - ITS JUST A TEMPLATE
}

主要修改name和hostgroups

然后到windows.cfg里定义redbox的host,use这个template
[[email protected] objects]# vi windows.cfg
define host {

use                     redbox-server           ; Inherit default values from a template
host_name               Redbox Media Server     ; The name we‘re giving to this host
alias                   Redbox Windows Server   ; A longer name associated with the host
address                 x.x.0.20             ; IP address of the host

}

并且定义redbox一个新的hostgroup
define hostgroup {

hostgroup_name          redbox-servers         ; The name of the hostgroup
alias                   Redbox Servers         ; Long name of the group

}

最后添加服务
define service {
use generic-service
hostgroup_name redbox-servers ; The name of the hostgroup
service_description C:\ D:\ Disk Space
check_command check_snmp_stor!16161!^[CD]:!70!90
}

监控效果是OK的。

7.如法炮制的把另外两台Redbox Server也加入到里面来。



8.接下来,由于公司需要定期借特权帐号登录到目标机器察看磁盘空间.
每次都觉得比较麻烦,其实要知道磁盘空间不是只能登录到电脑去查看硬盘空间,还可以利用SNMP抓取的信息进行分析和筛选.
所以想写一个利用snmpwalk来截取磁盘空间信息的脚本.

9.脚本如下
其中变量的计算参考如下:
URL: https://www.jb51.net/article/31232.htm

脚本旨在抓取三台SNMP端口为16161的windows server的磁盘分区C,D盘已用空间,以及一台Windows server的C,D,E盘空间。
======================Script Start=========================
[[email protected] check_disk_space]# cat check_disk_space.sh
#!/bin/bash

#Define Variables
DATE=date ‘+%Y-%m-%d_%H:%M:%S‘
script_dir=$(cd "$(dirname "$0")";pwd)
output=$script_dir/Disk_Space.txt

cd /usr/local/nagios/libexec

echo ‘#######Disk Space(Used Space)#######‘ | tee $output
echo ‘Date: ‘$DATE | tee -a $output

#Check Disk Space
for i in x.x.0.20 x.x.0.21 x.x.0.22
do
Cspace=$(./check_snmp_storage.pl -C public -H $i -p16161 -m ^[CD]: -w 1 -c 2 -v | grep "Perf data" | awk -F"="

‘{print $3}‘ | awk -F";" ‘{print $1}‘ | sed ‘s/MB//g‘)
Dspace=$(./check_snmp_storage.pl -C public -H $i -p16161 -m ^[CD]: -w 1 -c 2 -v | grep "Perf data" | awk -F"="

‘{print $2}‘ | awk -F";" ‘{print $1}‘ | sed ‘s/MB//g‘)

    Cspace=$(echo "scale=1;$Cspace/1024" | bc)
    Dspace=$(echo "scale=1;$Dspace/1024" | bc)
    echo Server‘[‘$i‘]‘ | tee -a $output
    echo ‘C Drive: ‘$Cspace GB | tee -a $output
    echo ‘D Drive: ‘$Dspace GB | tee -a $output
    echo ‘ ‘ | tee -a $output

done
======================Script End=========================

10.这里有个问题,就是有一个IP地址为10.116.x.x的Windows Server,从Nagios所在的Linux电脑不可达。所以我不能在它上面用snmp

抓取信息。手头可达的服务器只有一台Windows Server可达。我从网上下载了snmpwalk.exe到这台电脑。写个执行脚本,每天定时抓取

10.116.x.x的信息。然后再在筛选磁盘已用空间脚本所在的Linux Server上,通过读取每天导出的日志内容来分析出已用空间。
下载地址:https://github.com/PentestBox/snmpwalk
有条件可以去官网下载.

1)在脚本所在的电脑上,脚本是调用nagios的插件check_snmp_storage.pl来筛选已用空间信息的。
这个在Windows电脑上没有。但是本质上snmpwalk也能抓到需要的信息。
根据分析比对和查阅资料,我发现
hrStorageUsed是我们需要的内容,它可以显示每个驱动器的已用空间。根据序号的不同,对应不同的驱动器。
所以理论上只要以下命令就够了,可以抓到所有硬盘的信息:
[[email protected] libexec]# snmpwalk -v2c -c public x.x.0.21:16161 hrStorage

URL:https://my.oschina.net/yisenn/blog/14626

从check_snmp_storage.pl的输出结果来看。
Descr : C:\ Label:SYSTEM Serial Number b6daab5c
Size : 26155775
Used : 7387236
Alloc : 4096
Perf data : ‘D:_Label:DATA__Serial_Number_8c92ea56‘=1584803MB;44760;89521;0;4476035 ‘C:

_Label:SYSTEM__Serial_Number_b6daab5c‘=28856MB;1022;2043;0;102171

这里的计算逻辑是。

28856MB10241024/4096=7387136,很接近Used的数值。
而这个Used的数值其实和snmpwalk结果里的HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER等值。
那么反推,想要知道已使用空间多少MB,只要将[Used]*4096/1024/1024就可以得到了。

然后不论从Windows上执行snmpwalk.exe还是linux上的snmpwalk命令,都可以得到这样一个输出结果
OID : 1.3.6.1.2.1.25.2.3.1.3.1, HOST-RESOURCES-MIB::hrStorageDescr.1 = STRING: C:\ Label
OID : 1.3.6.1.2.1.25.2.3.1.3.2, HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: D:\ Label
OID : 1.3.6.1.2.1.25.2.3.1.3.3, HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: E:\ Label
OID : 1.3.6.1.2.1.25.2.3.1.4.1, HOST-RESOURCES-MIB::hrStorageAllocationUnits.1 = INTEGER: 4096 Bytes
OID : 1.3.6.1.2.1.25.2.3.1.4.2, HOST-RESOURCES-MIB::hrStorageAllocationUnits.2 = INTEGER: 4096 Bytes
OID : 1.3.6.1.2.1.25.2.3.1.4.3, HOST-RESOURCES-MIB::hrStorageAllocationUnits.3 = INTEGER: 4096 Bytes
OID : 1.3.6.1.2.1.25.2.3.1.5.1, HOST-RESOURCES-MIB::hrStorageSize.1 = INTEGER: 26155775
OID : 1.3.6.1.2.1.25.2.3.1.5.2, HOST-RESOURCES-MIB::hrStorageSize.2 = INTEGER: 1145864959
OID : 1.3.6.1.2.1.25.2.3.1.5.3, HOST-RESOURCES-MIB::hrStorageSize.3 = INTEGER: 124354354
OID : 1.3.6.1.2.1.25.2.3.1.6.1, HOST-RESOURCES-MIB::hrStorageUsed.1 = INTEGER: 7387236
OID : 1.3.6.1.2.1.25.2.3.1.6.2, HOST-RESOURCES-MIB::hrStorageUsed.2 = INTEGER: 405721068
OID : 1.3.6.1.2.1.25.2.3.1.6.3, HOST-RESOURCES-MIB::hrStorageUsed.3 = INTEGER: 43284233

在Windows下的snmpwalk.exe,执行以下命令来缩小抓取的范围。
C:\snmpwalk-master> Snmpwalk.exe -r:10.116.x.x -c:XXXX -v:1 -os:1.3.6.1.2.1.25.2.3.1.2.6 -op:1.3.6.1.2.1.25.2.3.1.7.1

C:\Snmpwalk.txt
我们准备Windows上的snmpwalk命令写成bat,然后放到scheduled task里,每天执行一次。内容就是上文。

这里有两点需要注意。
a)-os是抓取范围的起点OID,-op则是终点OID。但是抓取时不包含着两个OID。
b)有时候会出现以下错误:“snmpwalk.exe failed to get value of SNMP variable.Timeout”.这时可以尝试参数-v换一个version

的SNMP。

2)加入计划任务后,发现可以创建Snmpwalk.txt,但不像双击执行*.cmd脚本时可以导出结果。
经过测试,发现原来是双击执行脚本时默认在当前目录下寻找exe文件,但计划任务不是。
解决方法是,在计划任务里的Actions里,添加Start in(optional)的值为exe所在路径。

3)接下来,试着在Nagios和Linux脚本所在的Linux Server上,挂载Windows Server的目录,然后直接分析刚才导出的Snmpwalk.txt来

获取最终结果。
[[email protected] libexec]# mkdir /C
[[email protected] check_disk_space]# mount -t cifs //10.116.x.x/C$/Cxxxxx/Script_by_xxxx/snmpwalk-master/snmpwalk-master

-o username=‘administrator‘,password="xxxxx",r /C
经验证,可以正常挂载。
[[email protected] check_disk_space]# umount -l /C
经验证,也可以正常卸载。

4)接下来可以追加到脚本里了。
[[email protected] check_disk_space]# vi check_disk_space.sh

追加了以下这段:
======================Script End=========================
#######Output for VRS-Dealing########
mount -t cifs //10.x.x.193/C$/CyberArk/Script_by_Chris/snmpwalk-master/snmpwalk-master -o

username=‘administrator‘,password="[email protected]",r /C

VRS=10.116.x.x
VRS_Cused=$(cat /C/Snmpwalk.txt | grep 1.3.6.1.2.1.25.2.3.1.6.1 | awk -F= ‘{print $4}‘ | tr -d ‘\r‘)
VRS_Dused=$(cat /C/Snmpwalk.txt | grep 1.3.6.1.2.1.25.2.3.1.6.2 | awk -F= ‘{print $4}‘ | tr -d ‘\r‘)
VRS_Eused=$(cat /C/Snmpwalk.txt | grep 1.3.6.1.2.1.25.2.3.1.6.3 | awk -F= ‘{print $4}‘ | tr -d ‘\r‘)

VRS_Cused=$(echo "scale=1;$VRS_Cused4096/1024/1024/1024" | bc)
VRS_Dused=$(echo "scale=1;$VRS_Dused
4096/1024/1024/1024" | bc)
VRS_Eused=$(echo "scale=1;$VRS_Eused*4096/1024/1024/1024" | bc)
echo Server‘[‘$VRS‘]‘ | tee -a $output
echo ‘C Drive: ‘$VRS_Cused GB | tee -a $output
echo ‘D Drive: ‘$VRS_Dused GB | tee -a $output
echo ‘E Drive: ‘$VRS_Eused GB | tee -a $output
echo ‘ ‘ | tee -a $output

umount -l /C
======================Script End=========================

原文地址:http://blog.51cto.com/7350550/2348688

时间: 2024-10-01 03:54:47

修改SNMP端口并利用snmpwalk测试,nagios监控,脚本读取后筛选出磁盘占用空间的值的相关文章

自定义 nagios监控脚本

一. 自定义nagios监控脚本 1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.sh   :就是监控脚本要在客户端vim  /usr/local/nagios/libexec/check_disk.sh 写入如下内容:(client上)#!/bin/bash#!/bin/bashrow=`df -h |wc -l`for i in `seq 2 $row`do        ava=`df -h |sed -n "$i"p|awk '

[工具开发] 把nagios监控脚本改成keepalived监控脚本

最近在做开发和办公环境的高可用,采用的是keepalived:keepalived基于Linux内核支持的LVS,既能实现高可用,又能实现负载均衡,非常实用. keepalived监控服务状态时可以用多种方式,如:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK(自定义脚本方式),为了精确的监控服务的状态,我们需要编写自定义监控脚本. 目前很多公司都会部署nagios作为服务的监控平台,nagios也需要监控脚本或者程序,如果keepalived监

通过collectd工具获取虚拟机的nagios监控脚本简单例子

在宿主机上安装collectd工具后,可以通过collectd工具来获取宿主机上的虚拟机的cpu,memery,if-traffic等数据.可以通过nagios监控脚本来实现对这些数据监控. 以下是一个简单的监控虚拟机内存脚本: #!/bin/bash #Desc:to check memory about vm instance STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 COLLECTD_HOME=/usr/loca

自定义nagios监控脚本

在客户端上创建脚本/usr/lib/nagios/plugins/check_disk.sh   //yum安装的nagios,如果是自己编译安装默认脚本文件目录在自定义安装的nagios目录下 在客户端上操作: vim  /usr/lib/nagios/plugins/check_disk.sh 写入如下内容: //这是一个disk脚本样例,你也可以写自己的监控脚本#!/bin/bashrow=`df -h |wc -l`for i in `seq 2 $row`do        ava=`

nagios监控脚本(自定义监控系统磁盘)

1. 在客户端上创建脚本/usr/local/nagios/libexec/check_disk.shvim  /usr/local/nagios/libexec/check_disk.sh 写入如下内容:(client上)#!/bin/bash#!/bin/bashrow=`df -h |wc -l`for i in `seq 2 $row`do        ava=`df -h |sed -n "$i"p|awk '{print $4}'`        u_per=`df -h

Linux或Window是修改snmp的默认端口

SNMP默认端口通讯使用 UDP 161,在安装一些监控软件的过程中,常常提示端口被占用等情况,下面说一下如何修改系统的默认SNMP端口 windows修改snmp端口 1 打开services文件 路径:C:\Windows\System32\drivers\etc 2 修改端口 修改前:snmp 161/udp #SNMP 修改后:snmp 1161/udp #SNMP 3 重启SNMP的服务 linux 修改snmp端口 1 修改linux的/etc/snmp/snmpd.conf文件 命

nagios监控+pnp4出图

Nagios监控系统 By:大官人 一.nagios简介 Nagios是一个监视系统运行状态和网络信息的监视系统.Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等.Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等. 二.nagios功能特点 1.监控网络服务(SMTP.POP3.HTTP.NNTP.PING等): 2.监控主机资源(处理器负荷.磁盘利用率等): 3.简单地插

使用nagios监控Windows下的tomcat和mysql

一.NSClient与nrpe最大的区别就是: (1)被监控机上安装有nrpe,并且还有插件,最终的监控是由这些插件来进行的.当监控主机将监控请求发给nrpe后,nrpe调用插件来完成监控. (2)NSClient则不同,被监控机上只安装NSClient,没有任何的插件.当监控主机将监控请求发给NSClient后,NSClient直接完成监控,所有的监控是由NSClient完成的. 二.安装windows监控引擎 下载NSClient++的安装包,注意根据实际的32/64CPU来下载 下载地址 

Linux下利用nc命令来监控检测服务器的端口使用情况(转载)

最近碰到一个项目,前端用apache htttpd进行发布(80端口),通过双机负载均衡转发到后端的两个tomcat进行处理(8081和8082端口),现在需要随时监控这三个端口的情况,一旦down掉需要能够立即告警处理.批量的系统监控比较好的是用nagios软件来实现,这样小项目专门装一个nagios软件,有点繁琐了.在网上查了一些资料,总结实验了一下,可以用简单的nc命令来实现. 一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程.