【转载】http://blog.chinaunix.net/uid-26978448-id-3408364.html
#cat check_snmp_storage.py
- #!
/
usr/
bin/
python
- #_*
_ coding:
utf-
8 _*
_
- #_*
_ coding:
cp950 _*
_
-
''
'
- Create date: 2012-10-30
- Last update: 2012-10-30
- Version: 1.0
- Description: Monitor Disk usage
- Author: Victor
- QQ:1409175531
- '''
-
import
sys
-
import
netsnmp
-
from
decimal import
*
-
def
help(
)
:
- print
''
'Usage:
- sys.argv[0] <Community> <Host> <Device> <Warning_threshold> <Critical_threshold>'''
-
if
len(
sys.
argv)
<
6:
- help(
)
- sys.
exit(
3)
-
elif
sys.
argv[
4]
>
sys.
argv[
5]
:
- print
'Critical_threshold must be more than Warning_threshold'
- sys.
exit(
3)
-
try
:
- session =
netsnmp.
Session(
Version=
2,
Community=
sys.
argv[
1]
,
DestHost=
sys.
argv[
2]
)
-
except
IndexError
:
- sys.
exit(
3)
- oid01 =
netsnmp.
Varbind(
'hrStorageDescr'
)
- oid02 =
netsnmp.
Varbind(
'hrStorageSize'
)
- oid03 =
netsnmp.
Varbind(
'hrStorageUsed'
)
- oid04 =
netsnmp.
Varbind(
'hrStorageAllocationUnits'
)
- oidlist01 =
netsnmp.
VarList(
oid01)
- oidlist02 =
netsnmp.
VarList(
oid02)
- oidlist03 =
netsnmp.
VarList(
oid03)
- oidlist04 =
netsnmp.
VarList(
oid04)
- rl01 =
session.
walk(
oidlist01)
- rl02 =
session.
walk(
oidlist02)
- rl03 =
session.
walk(
oidlist03)
- rl04 =
session.
walk(
oidlist04)
-
try
:
- units =
dict(
zip(
rl01,
rl04)
)
[
sys.
argv[
3]
]
- total =
Decimal(
dict(
zip(
rl01,
rl02)
)
[
sys.
argv[
3]
]
)
*
Decimal(
units)
/
Decimal(
1024)
/
Decimal(
1024)
- used_1 =
dict(
zip(
rl01,
rl03)
)
[
sys.
argv[
3]
]
- used_2 =
Decimal(
used_1)
*
Decimal(
units)
/
Decimal(
1024)
/
Decimal(
1024)
-
except
KeyError
:
- print
'Timeout or please check syntax/community/Host or other params.'
- sys.
exit(
3)
- getcontext(
)
.
prec =
2
- used_percent =
int(
Decimal(
used_2)
/
Decimal(
total)
*
Decimal(
100)
)
- warning =
Decimal(
total)
*
Decimal(
sys.
argv[
4]
)
- w_threshold =
int(
warning)
- w_percent =
Decimal(
sys.
argv[
4]
)
*
Decimal(
100)
- critical =
Decimal(
total)
*
Decimal(
sys.
argv[
5]
)
- c_threshold =
int(
critical)
- c_percent =
Decimal(
sys.
argv[
5]
)
*
Decimal(
100)
-
if
used_percent <
w_percent:
- print
'OK - "%s" 使用了:%s%% | 总容量:%s MB , 已使用:%s MB (w:%s%%, c:%s%%)'
%
(
sys.
argv[
3]
,
used_percent,
int(
total)
,
int(
used_2)
,
w_percent,
c_percent)
- sys.
exit(
0)
-
elif
c_percent >
used_percent >
=
w_percent:
- print
'Warning - "%s" 使用了:%s%% | 总容量:%s MB , 已使用:%s MB (w:%s%%, c:%s%%)'
%
(
sys.
argv[
3]
,
used_percent,
int(
total)
,
int(
used_2)
,
w_percent,
c_percent)
- sys.
exit(
1)
-
elif
used_percent >
c_percent:
- print
'Critical - "%s" 使用了:%s%% | 总容量:%s MB , 已使用:%s MB (w:%s%%, c:%s%%)'
%
(
sys.
argv[
3]
,
used_percent,
int(
total)
,
int(
used_2)
,
w_percent,
c_percent)
- sys.
exit(
2)
-
elif
not
used_2:
- print
'Unknown'
- sys.
exit(
3)
-
else
:
- print
'Unknown'
- sys.
exit(
3)
将脚本check_snmp_storage.py放到/usr/local/nagios/libexec目录下,给执行权限。直接执行脚本可以看到脚本的用法:
#python check_snmp_storage.py
Usage:
sys.argv[0] <Community> <Host> <Device> <Warning_threshold> <Critical_threshold>
<Device> 设备名,如“Physical memory”、“Swap space”、 “/usr/local”等,如果不确定设备名,可先使用snmpdf查看,如:
<Device> 需要与上图Description列的名字吻合,大小写必须一致,否则脚本通过snmp去取数据时会找不到设备。
<Warning_threshold> 和<Critical_threshold>是报警阀值,用小数点表示,如0.8表示80%,0.9表示90%。
举例:
commands.cfg配置如下:
define command{
command_name check_snmp_storage
command_line $USER1$/check_snmp_storage.py $ARG1$ $HOSTADDRESS$ $ARG2$ $ARG3$ $ARG4$ $ARG5$
}
services.cfg配置如下:
define service{
use service02
host_name test
service_description Mem
notifications_enabled 0
check_command check_snmp_storage_v4!public!'Physical memory'!0.85!0.9
}
以上完成后重启nagios服务,效果图如下:
分享到:
相关推荐
Python监控CentOS磁盘空间,磁盘空间利用大于80%则发邮件通知。
监控 CPU 温度, 内存使用量MB, CPU单核使用率(此项不太准), 网络流入差量KB , 流出差量KB, 运行时间 (小时数),磁盘剩余空间MB, 定时 15秒,将数据上传到 yeelink 免费网站. 修改代码, 更正apikey 和URL中数字为你...
监控LINUX服务器内存、CPU、磁盘路径等信息钉钉、企业微信机器人发送消息提醒脚本,可使用定时任务来完成此功能
使用Python监控本机资源情况写入InfluxDB并使用Grafana监控,对CPU,内存,磁盘使用率,网络流量进行监控并展现。具体内容请参考我的博客,谢谢。 https://blog.csdn.net/wsdc0521/article/details/106082411
创建一个文件,并以适当的格式将时间、CPU使用率和内存使用率写入文件。可以使用CSV或其他文本格式。 控制循环频率: 可以使用time.sleep()函数控制每次循环之间的延迟时间,以调整数据采集的频率。 退出循环并关闭...
列出内存的大小以及剩余内存和计算内存的使用率 记录系统启动时间 列出系统用户 记录网卡的接收与发送流量 列出磁盘分区信息,总容量、已用容量以及可用容量 列出系统中的进程名称,内存利用率,进程状态以及创建...
/usr/bin/python # -*- coding: UTF-8 -*- import smtplib import os import commands,time from email.mime.text import MIMEText #from email import MIMEText disk_free=os.popen('df -lh') list_disk=disk_free....
服务器的监控通过安装一些常用的监控软件之外,有时也需要运行一些shell或Python脚本;shell下可以使用系统自带的ps/free/top/df等shell命令,Python可以调用subprocess等模块来运行shell命令,不过这么做就比较麻烦...
Linux运维日常巡检脚本 -- 可自行修改,内包含经常要看的大多数内容,如: 巡检时间 √ 主机名 √ 该服务器为宿主机还是虚拟机还是云服务器 √ ip地址 √ cpu使用空间 √ 内存总计 √ 内存可用 √ 内存...
备份脚本信息这是用于将文件夹备份到外部硬盘驱动器的python脚本。 它使用命令检查在实际复制之前是否需要复制文件/文件夹。 目前,仅支持Linux系统(不知道Windows和命令如何运行)。意向替换重要/特殊文件的手动...
我创建了一个简单的 python 脚本,它每 60 秒运行一次,并通过 MQTT 发送多个系统数据。它使用 MQTT Discovery for Home Assistant,因此如果您为 MQTT 启用了发现,则无需在 Home Assistant 中配置任何内容 它当前...
Python 脚本Linux“打开的文件太多”错误Apache2 优化Apache 将子域重定向到端口Linux 查找为写入而打开的文件查找可以使用密码登录的 Linux 用户Apache 安全:安装 mod_security Linux 服务器利用率Linux 磁盘/内存...
如果您需要将文件上传到RDP,而在这些地方可能无法使用复制/粘贴和本地磁盘,请使用此选项。 此外,它可以用于Bastion主机内的Azure等云环境中,复制/粘贴有时会特别棘手。 免责声明:仅在法律允许的服务上使用此...
1. 系统信息脚本 - 收集并显示系统信息,如CPU、内存、磁盘使用情况等。 2. 磁盘清理脚本 - 查找并删除指定目录下超过指定天数的旧文件。 3. 日志文件分析 - 分析日志文件,查找特定模式的行或计算错误消息的数量...
8.2 在Linux上测量内存使用 317 8.3 调试垃圾回收进程 318 8.4 捕获和记录异常 320 8.5 在调试模式中跟踪表达式和注释 322 8.6 从traceback中获得更多信息 324 8.7 当未捕获异常发生时自动启用调试器 327 8.8 ...
一个非常简单的分析程序使用来自简单字符串的源,对每个单词的出现进行计数并输出到磁盘上的文件(使用覆盖功能)。 热门标签 与字数统计非常相似的示例,但包括仅包含主题标签和不同源/接收器的过滤步骤。 在这种...
它应该有助于识别大型未使用文件,这些文件会增加磁盘使用率。 这些年来,诸如C:\User\myUser\AppData文件夹正在增长。 示例结果: Size of the folder including subfolders (C:\Users\myuser\AppData) is 34433 ...
我创建了一个简单的python脚本,该脚本每60秒运行一次,并通过MQTT发送多个系统数据。 它使用用于Home Assistant的MQTT发现,因此,如果已为MQTT启用发现,则无需在Home Assistant中进行任何配置。 当前,它记录...
本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...
该脚本将监视计算机的运行状况,并检查诸如CPU使用率,本地主机,可用磁盘空间,挂起的重启等内容。如果任何测试失败,它将发出消息。 report.py 该脚本初始化不同类型的reportlab对象,以在生成的PDF中使用。 更...