GM DC Monitor v2.0 数据中心监控预警平台-CMDB使用教程(第十篇)
监控脚本开发帮助手册
如果您具备一定的采集脚本编写能力,在我们的平台上,您可以发挥它的最大价值!
本节主要讲解如何自己编写监控脚本监控目标设备
必备写脚本的基本技术:shell 或者 python3
脚本验证的服务器必须已安装:python3,net-snmp-utils
- 功能介绍
通过自己编写一个监控脚本,实现对目标设备的定制化监控。
- 脚本开发示例
脚本相关名称解释:
- 监控系统如何识别脚本返回报警标识码,脚本返回的固定标识码如下:
0:表示监控指标正常状态
1:表示监控指标处于警告状态
2:表示监控指标处于严重状态
3:表示监控指标处于未知状态
- 监控系统如何识别脚本返回的报警数据:
当脚本返回相关状态标识码前,先打印相关信息即可,具体可看后续的示例。
- 脚本宏变量的定义格式为:$_SERVICE + 自定义名称 + $
举例如定义一个账号名称的宏变量: $_SERVICEACCOUNT$
- 监控系统全局常用宏变量标识及解释:
$HOSTNAME$:此值取自监控目标设备定义中的设备名称
$_HOSTSNMPCOMMUNITY$:此值取自监控目标设备定义中SNMP团体名称
$_HOSTSNMPVERSION$:此值取自监控目标设备定义中SNMP版本
$HOSTADDRESS$:此值取自监控目标设备定义中管理IP
示例1:使用shell语言编写一个简单的监控脚本
目标:采集目标linux服务器的主机名称
目标IP地址:127.0.01
目标服务器的snmp团体名:public
要求:目标服务器必须启动snmp服务并配置团体名称为:public,监控服务器必须可以访问到目标服务器的udp 161端口
第一步:写一个监控脚本
脚本名称:check_hostname.sh
脚本内容:
#!/bin/bash
# 简单示例:通过snmp采集操作系统的主机名称
# 脚本输出数字,监控系统根据数字识别报警状态: 0:正常,1:警告,2:严重,3:未知
# 脚本传递参数
ip=$1
comm=$2
# 定义snmp采集命令
out=`snmpwalk -v 2c -c ${comm} ${ip} SNMPv2-MIB::sysName`
if [ $? -eq 0 ];then
result=$(echo $out | cut -d '=' -f 2 | awk -F':' '{print $2}'|tr -d ' ')
echo 主机名称:$result
exit 0
else:
echo "命令执行失败"
exit 1
第二步:脚本编写完成后,进行功能验证
脚本解释:当前脚本是通过snmpwalk命令进行采集,所以当前主机需要已安装:net-snmp-utils
执行命令如下:
./check_hostname.sh 127.0.0.1 public
输出:主机名称:2f69f32b507d
第三步:验证完毕后,保存到容器脚本目录中并进行授权,命令如下:
docker cp check_hostname.sh gm-app:/dh3/plugins/
docker exec -i gm-app chmod 775 /dh3/plugins/check_hostname.sh
docker exec -i gm-app chown root:dh3 /dh3/plugins/check_hostname.sh
至此,一个监控脚本定制化准备完毕,接下来直接到监控平台的【CMDB-采集配置管理-检查命令配置】新建一条检查命令,命令行脚本名称为: check_hostname.sh
示例2:使用python3语言编写一个高级的监控脚本
目标:采集目标linux服务器的内存使用率,并具有报警和性能视图功能
目标IP地址:127.0.0.1
目标服务器的snmp团体名:public
报警阀值:80,90
要求:目标服务器必须启动snmp服务并配置团体名称为:public,监控服务器必须可以访问到目标服务器的udp 161端口
第一步:编写一个监控脚本
脚本名称:check_memory.py
脚本内容:
#!/usr/bin/python3
import subprocess
import sys
########定义SNMP函数
def get_snmp(ip,commu,oid):
'''
执行snmpwalk采集任务
'''
snmp_string='''snmpwalk -v 2c -c '{0}' '{1}' '{2}' '''.format(commu,ip,oid)
snmp_list = subprocess.getoutput(snmp_string)
return snmp_list
try:
host_info = sys.argv
ip = host_info[1]
comm = host_info[2]
warning = host_info[3]
critical = host_info[4]
# 获取总物理内存
resp = get_snmp(ip, comm, 'UCD-SNMP-MIB::memTotalReal.0')
total_memory = resp.split('INTEGER:')[1].strip().split()[0]
# 获取可用物理内存
resp = get_snmp(ip, comm, 'UCD-SNMP-MIB::memAvailReal.0')
available_memory = resp.split('INTEGER:')[1].strip().split()[0]
# 计算已使用的内存
used_memory = int(total_memory) - int(available_memory)
# 计算内存使用率
memory_usage = '%d' % int((used_memory / int(total_memory)) * 100)
if memory_usage < warning:
print('OK 内存使用率:%s%%|内存使用率=%s%%;%s;%s;0;100' % (memory_usage,memory_usage,warning,critical))
sys.exit(0)
elif warning <= memory_usage <= critical:
print('Warning 内存使用率:%s%%|内存使用率=%s%%;%s;%s;0;100' % (memory_usage,memory_usage,warning,critical))
sys.exit(1)
else:
print('Critical 内存使用率:%s%%|内存使用率=%s%%;%s;%s;0;100' % (memory_usage,memory_usage,warning,critical))
sys.exit(2)
except Exception as e:
print('Unknown 内存使用率:监控脚本未采集到目标设备的内存数据')
sys.exit(3)
脚本报警块解释:此python3脚本通过snmp采集目标设备的内存当前使用率,我们设定了告警阀值2个,一个实一般告警阀值(warning),一个实严重告警阀值(critical),运行脚本后当采集到的数据小于warning值,即为服务正常,如果采集到的数据大于warning并小于critical,即为输出一般告警,如果采集到的数据大于critical,即为输出严重告警,当没有采集到数据或者其他错误,均输出未知状态。
脚本性能视图块解释:
print('OK 内存使用率:%s%%|内存使用率=%s%%;%s;%s;0;100' % (memory_usage,memory_usage,warning,critical))
涉及性能视图代码通过管道符分隔:内存使用率=%s%%;%s;%s;0;100' % (memory_usage,memory_usage,warning,critical)
以下分段解释
内存使用率:性能视图的监控目标点
分号分隔的第一列变量替换为:memory_usage %%:
memory_usage:当前监控指标的监控值
%%:当前监控指标的单位(百分号:%)
分号分隔的第二列变量替换为:warning:
Warning:警告值(可选)
分号分隔的第三列变量替换为:critical:
critical:严重值(可选)
分号分隔的第四列和第五列为:最小值和最大值(可选)
第二步:脚本功能验证
脚本解释:当前脚本是通过snmpwalk命令进行采集,然后对采集到的数据进行结果分析,并打印对应的输出结果,所以当前主机需要已安装:net-snmp-utils, python3
假设监控目标主机为:127.0.0.1 目标团体名称为:public 警告阀值:80,严重阀值:90 执行命令如下:
./check_memory.py 127.0.0.1 public 80 90
输出:Critical 内存使用率:97%|内存使用率=97%;80;90;0;100
第三步:验证完毕后,保存到容器脚本目录中并进行授权,命令如下
docker cp check_memory.py gm-app:/dh3/plugins/
docker exec -i check_memory.py 775 /dh3/plugins/check_memory.py
docker exec -i check_memory.py root:dh3 /dh3/plugins/check_memory.py
至此,一个高级的监控脚本定制化准备完毕,接下来直接到监控平台的【CMDB-采集配置管理-检查命令配置】新建一条检查命令,命令行脚本名称为: check_memory.py