############################################################
插入一个信息
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:ttps://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的信息。
[root@ChrisTest 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
[root@ChrisTest libexec]#

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

个公认的端口。

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

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

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

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

[root@ChrisTest 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的插件来抓取我们要的信息。

[root@ChrisTest 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来添加监控项了。

[root@ChrisTest objects]# tail -n2 ../resource.cfg

Sets $USER7$ to be the SNMP community name

$USER7$=public

[root@ChrisTest 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$
}

对参数作了一定修改。

[root@ChrisTest 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.
[root@ChrisTest 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
[root@ChrisTest 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: ttps://www.jb51.net/article/31232.htm

脚本旨在抓取三台SNMP端口为16161的windows server的磁盘分区C,D盘已用空间,以及一台Windows server的C,D,E盘空间。
======================Script Start=========================
[root@ChrisTest 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 $outputecho 'C Drive: '$Cspace GB | tee -a $outputecho 'D Drive: '$Dspace GB | tee -a $outputecho ' ' | 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上,通过读取每天导出的日志内容来分析出已用空间。
下载地址:ttps://github.com/PentestBox/snmpwalk
有条件可以去官网下载.

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

URL:ttps://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来

获取最终结果。
[root@ChrisTest libexec]# mkdir /C
[root@ChrisTest 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
经验证,可以正常挂载。
[root@ChrisTest check_disk_space]# umount -l /C
经验证,也可以正常卸载。

4)接下来可以追加到脚本里了。
[root@ChrisTest 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="P@ssw0rd",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=========================

以上已更新

转载于:https://blog.51cto.com/7350550/2394341

Disk Space相关推荐

  1. 成功解决VM虚拟机内This compute has only 713.3MB disk space remaning

    成功解决VM虚拟机内This compute has only 713.3MB disk space remaning 目录 解决问题 解决思路 解决方法 解决问题 This compute has ...

  2. android sdk no space,Android SDK folder taking a lot of disk space. Do

    可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: There are a lot of system images piling up on m ...

  3. 【diskgenius】【Error on partition resizing.(2000011a)Out of disk space.】【The partition(or volume)“PART

    目录 一.[问题] 二.[原因] 三.[解决方法] 一.[问题] 在使用diskgenius对磁盘进行划分时,可能会遇到的问题:         (1)Error on partition resiz ...

  4. 使用BDE数据库引擎的应用软件出现Insufficient disk space的解决方法

    问题描述: 某医院收费软件,在运行时候,最近突然偶尔会出现下图的错误提示,刚开始还以为是c盘空间不足了,检查后发现还有20多G的剩余空间,显然不是没有硬盘空间的原因. 究其原因: 查阅相关资料后发现, ...

  5. 磁盘分析管理软件:Disk Space Analyzer Pro mac版

    Disk Space Analyzer Pro for Mac是一款运行在macOS平台上的磁盘分析管理软件.Disk Space Analyzer Pro Mac版会扫描您的硬盘驱动器分区,直观地显 ...

  6. 插入数据报错:ISAM error:no free disk space

    我是在迁移数据时报的错: [ERROR]:插入数据发生错误 Error SQLCode:[-271] Error message:Could not insert new row into the t ...

  7. informix GBase -179 ISAM error: No free disk space for sort.

    项目场景: 单表100W+,需要通过时间排序分页查询数据. 问题描述: -179 ISAM error: No free disk space for sort. 官方解释如下 在执行排序时,数据库服 ...

  8. file_put_contents(): Only 0 of 317 bytes written, possibly out of free disk space

    file_put_contents(): Only 0 of 317 bytes written, possibly out of free disk space网站报错问题解决 其实就是网站的日志数 ...

  9. 小白笔记:VM VirtualBox 虚拟机下Ubuntu磁盘空间不足”Low Disk Space on “Filesystem root” ”及固定大小储存虚拟磁盘转动态分配储存的简单扩容

    示范版本:虚拟机软件VM VirtualBox 6.1.36 +系统Ubuntu20.04 解决问题:Ubuntu在启动或下载文件时候时,提示磁盘空间不足(Low Disk Space on &quo ...

  10. 7 Ways To Free Up Hard Disk Space On Windows

    Hard drives are getting larger and larger, but somehow they always seem to fill up. This is even mor ...

最新文章

  1. BCH优于BCE+LN的5个理由
  2. 《计算机网络》实验报告——使用SNORT观察网络数据包和TCP连接
  3. 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
  4. initializeCachedDB function in JavaScript - how is the call delegated to
  5. NRedis-Proxy - 高性能中间件服务器
  6. STM32CubeMx HAL库使用硬件IIC读写AT24C02
  7. Web存储—sessionStorage存储
  8. mysql按日期查询数据_mysql按日期查询数据
  9. 合上More Exceptional C++的瞬间
  10. 8.3分叉/结合的框架(Fork/Join Framework)
  11. bt磁力链接转换种子中的问题
  12. 机械自动化与计算机专业,大学机械与自动化专业主要学什么
  13. 解密带星号手机号网页_外滩大会“硬核科技”解密:支付宝金融级业务的“定海神针”...
  14. 缓存问题(二) 布隆过滤器(Bloom Filter) 介绍和原理
  15. android计算器设计步骤,Android Studio的简易计算器界面设计
  16. linux替换变量字符串,linux shell 替换字符串的几种方法,变量替换${},sed,awk
  17. windows11 文档背景设置护眼色
  18. php imagejpeg函数,php imagepng()函数有什么用?
  19. Java是如何实现平台无关性(跨平台)的?
  20. 记一次ajax sync为false 同步神坑bug

热门文章

  1. 基于机器学习的工控安全风险评估
  2. Arduino Uno 无声无息的开关 固态继电器(四引脚)的实验
  3. thinkphp6 接口响应数据格式 commom.php
  4. 我们收敛了当初的样子
  5. 利用Win32 API绕过360驱动防火墙
  6. MegaCli64工具磁盘修复处理
  7. 外汇操盘手离你并不远,成为他不是没可能
  8. 青松资讯:想窃取用户密码?一个“U盘”就能搞定
  9. 每天都做这17件事,你就会变聪明哦!
  10. Google浏览器——session Storage和Local Storage