当前位置: 首页 > news >正文

GM DC Monitor v2.0 数据中心监控预警平台-CMDB使用教程(第十篇)

监控脚本开发帮助手册

如果您具备一定的采集脚本编写能力,在我们的平台上,您可以发挥它的最大价值!

本节主要讲解如何自己编写监控脚本监控目标设备

必备写脚本的基本技术:shell 或者 python3

脚本验证的服务器必须已安装:python3,net-snmp-utils

  • 功能介绍

通过自己编写一个监控脚本,实现对目标设备的定制化监控。

  • 脚本开发示例

脚本相关名称解释:

  1. 监控系统如何识别脚本返回报警标识码,脚本返回的固定标识码如下:

0:表示监控指标正常状态

1:表示监控指标处于警告状态

2:表示监控指标处于严重状态

3:表示监控指标处于未知状态

  1. 监控系统如何识别脚本返回的报警数据:

当脚本返回相关状态标识码前,先打印相关信息即可,具体可看后续的示例。

  1. 脚本宏变量的定义格式为:$_SERVICE + 自定义名称 + $

举例如定义一个账号名称的宏变量: $_SERVICEACCOUNT$

  1. 监控系统全局常用宏变量标识及解释:

$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

相关文章:

  • 【图像处理基石】什么是通透感?
  • cropperjs 2.0裁剪图片后转base64提示“Tainted canvases may not be exported”跨域问题的解决办法。
  • 0x03.Redis 通常应用于哪些场景?
  • 【从0到1搞懂大模型】transformer先导:seq2seq、注意力机制、残差网络等(6)
  • C++ 数据结构之图:从理论到实践
  • React(1)基础入门
  • 【模拟电路】PIN光电二极管和APD雪崩光电二极管
  • I/O进程5
  • fio的资料
  • 基于FPGA的一维时间序列idct变换verilog实现,包含testbench和matlab辅助验证程序
  • L1 第6次课 for循环
  • Python学生信息查询
  • Lesson 11 One good turn deserves another
  • AtCoder Beginner Contest 401 E题 题解
  • 文件包含靶场
  • sql 向Java的映射
  • docker compose搭建博客wordpress
  • 基于springboot的“流浪动物管理系统”的设计与实现(源码+数据库+文档+PPT)
  • Losson 4 NFS(network file system(网络文件系统))
  • 地毯填充luogu
  • 广西桂林、百色、河池等地表态:全力配合中央对蓝天立的审查调查
  • 浙江理工大学传播系原系主任刘曦逝世,年仅44岁
  • 经济日报金观平:促进信贷资金畅达小微企业
  • 外交部部长助理兼礼宾司司长洪磊接受美国新任驻华大使递交国书副本
  • 新华时评:让医德医风建设为健康中国护航
  • 商务部新闻发言人就出口管制管控名单答记者问