一种基于综合诊断平台的调度主站系统的运行监测系统的制作方法

文档序号:15980569发布日期:2018-11-17 00:17阅读:275来源:国知局

本发明涉及供电或配电系统技术领域,尤其涉及一种基于综合诊断平台的调度主站系统的运行监测系统。



背景技术:

目前电力调度主站系统,数据采集规模较大、存储方式复杂,但伴随长时间不间断运行及数据积累,出现了繁多功能模块之间内控有效性降低、数据传递错误、商用库与实时库同步不及时、数据及模型不统一等系统问题,其中不乏一些没有检测手段,不能及时显现的,直至影响正常功能使用后才能处理的安全运行隐患,对系统稳定运行造成不可忽视的影响。

此外,系统强大的同时也对主站系统运维的技术人员提出了更高的要求。对于自动化运维人员需要熟练掌握操作系统、数据库、电网运行、调度数据网网络、二次安全防护等关键性专业操作技能,能运维并处理日常缺陷需要很高的技术水平,对人员培养提出了周期长、专业深的高门槛,不利于新进员工的快速成长。



技术实现要素:

本发明的目的是提供一种基于综合诊断平台的调度主站系统的运行监测系统,因提前根据故障编译程序并自动执行比对及校验,在应用到主站系统后,仅用很短一段时间就完成软件程序的安装调试,自动应用在后台执行后,大大提高了系统可靠性及工作效率。

本发明提出的主站系统运行监测系统基于综合诊断平台整合三个模块十种工具,总结所遇到的故障、梳理需要完善的工作项目,再转化为机器语言简化操作步骤而形成系统诊断实用工具平台,为调度主站系统运行提供更可靠、更便捷的检测和处理手段。

本发明的目的通过以下技术方案来实现:

一种基于综合诊断平台的调度主站系统的运行监测系统,所述综合诊断平台包括商用库与实时库同步比对模块、综合巡检模块和安全审计模块,将各模块中的工具通过操作命令整合、shell脚本开发、人机服务编译实现图形界面操作,建立以工作模块和工作流程为基础的脚本控制,使用C++编程技术结合QT开源图形接口进行设计,实现工具集的人机可视化交互,进而将多用户多命令的复杂不安全操作转换成多道批处理作业流,实现机器学习、统计分析等技术在智能电网调度控制系统上的应用。

使用C++编程技术结合QT开源图形接口进行设计,具体包括画面功能设计、工具功能实现设计和反馈功能设计。

所述画面功能设计具体为:利用D5000图形界面将零散的Linux shell脚本进行整合,利用系统工具和进程的软件复用技术,将多道批处理作业流小工具集成人机可视化交互,形成安全运行综合诊断工具集,调用执行文件,实现图形化操作和一键式执行的功能。

所述工具功能实现设计包括商用库与实时库同步比对模块设计、综合巡检模块工具集设计和安全审计模块工具集设计。

所述商用库与实时库同步比对模块设计,采用实商库同步进程和表数据容量的在线质量纠错,实现弹性双反馈纠错功能,挖掘系统数据流控制、进程控制、数据递交、数据库实例等最优控制方式,完善作业管理和文件管理的平衡机制,具体包括如下步骤:

a、实时库单应用单表导出脚本。通过脚本调用D5000系统的rtio实时库交互工具,将某应用下的某张表导出来,默认导出为标准csv格式。

b、商用库单表导出,脚本中使用isql交互工具,将D5000模式的表导出,默认导出为标准csv格式。

c、利用python语言中map字典和list列表的组合数据类型实现对结果中id值的校对,调用has_key方法(python自带哈希算法)进行比对。利用list列表核实结果,执行程序采用定时执行机制。

所述巡检模块工具集设计具体为:以统计查询功能为主,按照关键字对content字段(内容)进行模糊匹配等方式编写SQL语句,经校验语法无误后打开数据库链接,发给后台服务接收端,创建缓冲池以接收返回结果。可执行实现遥信频发分析、系统应用主备机运行状态监视、服务器磁盘空间、CPU负载、进程数量、IO使用、core文件监视并自动处理等系统状态诊断功能。

所述安全审计模块工具集设计具体包括如下步骤:

a、用户密码强度检查。检查系统pam密码权限设置,通过D5000接口检查用户密码强度,长度至少8位,必须含字母数字特殊字符。

b、检查httpd(web服务)、ntpd(对时服务)、inetd(网络请求管理服务)、samba(共享服务)、smtp(邮件服务)、snmp(设备负载信息服务)、telnet(明文远程登录服务)、ftp(文件服务)、rlogin/rsh(明文远程登录服务)、177端口(远程左面)等业务是否已关闭。

c、检查生产大区所有服务器工作站上带容量usb设备是否已禁用。

d、Ukey使用状态检查。采用Linux系统Crontab定时调用程序,每隔五分钟循环遍历生产大区所有工作站及服务器,检查domain.sys文件相关配置,确定其是否使用Ukey登录方式,如果没有使用Ukey并且启动了D5000应用则写入审计报告。

所述反馈功能设计具体为:将综合诊断平台执行及确认功能结合Linux shell脚本以及友好的界面交互工具实现,反馈界面以列表的形式组织呈现,最终导出成磁盘文件的CSV-Excel格式。

本发明的综合诊断平台运行时需要依赖后台硬件资源,尤其是数据库服务器及核心交换机,将会受到处理器、内存、硬盘、网络带宽、Socket连接数、可操作文件数影响。考虑到语句下发可能会扫描数个甚至数十个GB的磁盘文件,占用数百MB或上GB的内存,为了不影响系统正常业务的执行,程序上将对适用范围做出限制,例如只在调控网一区使用,后台负载较重时将放弃下发命令并告知用户。

本发明具有如下有益效果:

(1)多功能集成,综合诊断;通过综合诊断,有针对性的实现核心数据库同步、重要资源进程的在线监测,将诊断结果定时反馈并触发告警,起到自动隐患排查,高效、准确、安全。通过模块化管理,可以自由设定所检查内容进行系统诊断。

(2)定时出诊,检测智能化;可根据事先设定的检测周期及检测内容自动完成系统巡检和报告生成工作,不需要人工干预,实现了工具检测的智能化,节约人工对数据的排查、清洗、统计工作。

(3)以诊断工具为切入点,开拓系统监测多源化工作思路;综合诊断平台采用开放性的设计理念,更好地服务于数据分析,进一步与内网安监平台等自动化系统进行接口开发,实现多数据源的合并、分析,组建大数据分析平台,实现全面的系统扫描诊断。

(4)界面化操作,降低系统专业巡检技术门槛;综合诊断平台采用统一平台可视化的操作界面,提供复选框、文本框等交互工具,方便用户操作。功能执行及生成报告采用一键式完成的方式,省时、省力、省心。

(5)综合诊断平台对调度主站系统重要资源及程序的扫描诊断,实现对系统功能质量的纠错,反应系统实时运行状态水平大大增强。

(6)提高了系统运行的安全性,降低了系统运行中隐患给电网调控运行带来的不良影响,缩短了系统故障排查时间。

(7)避免人为统计、判断的干扰因素,节省了人工操作及判定的工作量,大大提升了系统的实用化水平。

(8)化零为整,系统诊断,综合巡检,使系统维护工作系统化,集约化。

(9)深入挖掘其数据流控制,深化挖掘其进程控制、数据递交、数据库实例等最优控制方式,为电力调度专业发展提供了一种新的工作思路。

具体实施方式

下面结合具体实施例对本发明的内容进行进一步的解释和说明,需要注意的是,以下实施例仅是本发明的较佳实施例而并非全部的实施例,不应造成对本发明保护范围的限制。

实施例1

本发明的监测方法适用于调度主站系统安全控制1区的系统诊断检测工作。一种基于综合诊断平台的调度主站系统的运行监测系统,所述综合诊断平台包括商用库与实时库同步比对模块、综合巡检模块和安全审计模块,将各模块中的工具通过操作命令整合、shell脚本开发、人机服务编译实现图形界面操作;建立以工作模块和工作流程为基础的脚本控制;使用C++编程技术结合QT开源图形接口进行设计,实现工具集的人机可视化交互。

使用C++编程技术结合QT开源图形接口进行设计,具体包括画面功能设计、工具功能实现设计和反馈功能设计。

所述画面功能设计具体为:利用D5000图形界面将零散的Linux shell脚本进行整合,形成安全运行综合诊断工具集,调用执行文件,实现图形化操作和一键式执行的功能。

所述工具功能实现设计包括商用库与实时库同步比对模块设计、综合巡检模块工具集设计和安全审计模块工具集设计。

所述商用库与实时库同步比对模块设计具体包括如下步骤:

a、实时库单应用单表导出脚本。通过脚本调用D5000系统的rtio实时库交互工具,将某应用下的某张表导出来,默认导出为标准csv格式。

b、商用库单表导出,脚本中使用isql交互工具,将D5000模式的表导出,默认导出为标准csv格式。

c、利用python语言中map字典和list列表的组合数据类型实现对结果中id值的校对,调用has_key方法(python自带哈希算法)进行比对。利用list列表核实结果,执行程序采用定时执行机制。

所述巡检模块工具集设计具体为:以统计查询功能为主,按照关键字对content字段(内容)进行模糊匹配等方式编写SQL语句,经校验语法无误后打开数据库链接,发给后台服务接收端,创建缓冲池以接收返回结果。可执行实现遥信频发分析、系统应用主备机运行状态监视、服务器磁盘空间、CPU负载、进程数量、IO使用、core文件监视并自动处理等系统状态诊断功能。

所述安全审计模块工具集设计具体包括如下步骤:

a、用户密码强度检查。检查系统pam密码权限设置,通过D5000接口检查用户密码强度,长度至少8位,必须含字母数字特殊字符。

b、检查httpd(web服务)、ntpd(对时服务)、inetd(网络请求管理服务)、samba(共享服务)、smtp(邮件服务)、snmp(设备负载信息服务)、telnet(明文远程登录服务)、ftp(文件服务)、rlogin/rsh(明文远程登录服务)、177端口(远程左面)等业务是否已关闭。

c、检查生产大区所有服务器工作站上带容量usb设备是否已禁用。

d、Ukey使用状态检查。采用Linux系统Crontab定时调用程序,每隔五分钟循环遍历生产大区所有工作站及服务器,检查domain.sys文件相关配置,确定其是否使用Ukey登录方式,如果没有使用Ukey并且启动了D5000应用则写入审计报告。

所述反馈功能设计具体为:将综合诊断平台执行及确认功能结合Linux shell脚本以及友好的界面交互工具实现,反馈界面以列表的形式组织呈现,最终导出成磁盘文件的CSV-Excel格式。

各模块中涉及到的源码文件如下所示:

done

else

printf "ping不通!\n"

fi

done

D5000系统体检结果

EOF

let NO++

cat >> check_result.log <<EOF

$NO. 机器网络情况

EOF

qtcheck.sh $NODE_CONF_FILE >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 机器时间校准情况

EOF

check_time.sh $SECOND_LIMIT >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 机器CPU负荷情况

EOF

check_load.sh $LOAD_LIMIT >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 机器硬盘分区使用率情况

EOF

check_disk.sh $DISK_LIMIT >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 机器硬盘inode使用率情况

EOF

check_inode.sh $INODE_LIMIT >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. CPU占用最多的进程TOP5

EOF

check_cpu.sh >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 内存占用最多的进程TOP5

EOF

check_memory.sh >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 虚拟内存占用最多的进程TOP5

EOF

check_swap.sh >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 最高句柄数的进程NO.1

EOF

check_lsof.sh >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 商用数据库连接数

EOF

check_db.sh $DB_TYPE $DB_ADDR >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. app_msg.log日志情况

EOF

check_app_msg.sh >> check_result.log

let NO++

cat >> check_result.log <<EOF

$NO. 数据库同步复制文件堆积情况

EOF

当前体检配置:

* 节点文件: $NODE_CONF_FILE

* 数据库连接参数: $DB_TYPE $DB_ADDR

* 时间误差告警限值(秒): $SECOND_LIMIT

* CPU负荷告警限值: $LOAD_LIMIT

* 磁盘分区使用率告警限值: $DISK_LIMIT

* 磁盘inode使用率告警限值: $INODE_LIMIT

重要说明:

* 仅在Linux上进行了完整测试!

1:按默认设置进行系统体检

2:人工设置体检参数后,再进行系统体检

3:体检节点配置文件设置[$NODE_CONF_FILE_1 或 $NODE_CONF_FILE_2]

4:数据库连接参数设置

q:退出

EOF

echo "你的选择[1,2,3,q]:"

read CHOICE

case $CHOICE in

1) gen_check_result

break;;

2) while :

do

tput clear

echo "体检参数设置界面"

echo "请输入机器CPU负荷告警限值[1-100]:"

read LOAD_LIMIT

echo "请输入机器硬盘分区使用率告警限值[1-100]:"

read DISK_LIMIT

echo "请输入机器硬盘inode使用率告警限值[1-100]:"

read INODE_LIMIT

echo "请输入时间误差告警限值(秒):"

read SECOND_LIMIT

CONFIRM=""

until [ "$CONFIRM" = "n" -o "$CONFIRM" = "N" -o "$CONFIRM" = "y" -o "$CONFIRM" = "Y" ]

do

echo "请确认以上参数是否正确[y/n]:"

read CONFIRM

done

if [ "$CONFIRM" = "y" -o "$CONFIRM" = "Y" ]; then

gen_check_result

break

fi

done

break;;

3) while :

do

tput clear

echo "请选择体检节点配置文件"

echo "1.$NODE_CONF_FILE_1"

echo "2.$NODE_CONF_FILE_2"

echo "你的选择是[1,2]:"

read NODE_CONF_FILE_CHOICE

case $NODE_CONF_FILE_CHOICE in

1) NODE_CONF_FILE=$NODE_CONF_FILE_1

break;;

2) NODE_CONF_FILE=$NODE_CONF_FILE_2

break;;

*) echo "选择错误!"

echo "按回车键继续!"

read DUMP;;

esac

done;;

4) while :

do

tput clear

echo "数据库连接参数设置界面"

echo "请输入数据库类型和连接地址[dm|kb x.x.x.x]:"

read DB_CONNECT_PARA

para_num=`echo $DB_CONNECT_PARA | wc -w`

if [ $para_num -ne 2 ]; then

echo "输入错误!"

echo "按回车键继续!"

read DUMP

else

echo $DB_CONNECT_PARA > $DB_CONNECT_CONF

break

fi

done;;

Q|q) exit 0;;

*) echo "选择错误!"

echo "按回车键继续!"

read DUMP;;

#!/bin/sh

#当前时间标志

DDATE=$(date +%Y%m%d)

DATE=$(date "+%Y-%m-%d %H:%M:%S")

#地区表示

local_name="$(hostname | cut -d1 -f1)"

#脚本主目录

home="/home/d5000/hebei/d5000-shell"

#节点目录

host="${home}/hosts.ini"

#检查结果目录

res_file="${home}/result"

#当前检查结果时标子目录

chk_dir="${res_file}/chk_${DDATE}"

#所有检查结果文件

chk_res_all="${chk_dir}/res_all.txt"

#对时异常结果文件

chk_res_time="${chk_dir}/res_time.txt"

#对时所有结果文件

chk_time_all="${chk_dir}/res_time_all.csv"

#硬盘空间异常结果文件

chk_res_hard="${chk_dir}/res_hard.txt"

#硬盘空间所有结果文件

chk_inode_all="${chk_dir}/res_inode_all.csv"

#Inode异常结果文件

chk_res_inode="${chk_dir}/res_inode.txt"

#Inode所有结果文件

chk_hard_all="${chk_dir}/res_hard_all.csv"

#ukey异常结果文件

chk_res_ukey="${chk_dir}/res_ukey.txt"

#ukey所有结果文件

chk_ukey_all="${chk_dir}/res_ukey_all.csv"

#无法ping通结果文件

bad_ping="${chk_dir}/bad_ping.txt"

#ping通但是22端口无法访问结果文件

bad_ssh="${chk_dir}/bad_ssh.txt"

#/etc/hosts中无配置结果文件

bad_known="${chk_dir}/bad_known.txt"

#isql命令绝对路径

ISQL="/home/kingbase/KingbaseES/bin/isql"

#file_send命令绝对路径

FILE_SEND="/home/d5000/hebei/bin/file_send"

#结果目标IP1

IP1="172.10.1.5"

#结果目标IP2

IP2="172.10.1.6"

#结果目标目录

des_dir="/home/d5000/hebei/d5000-shell/${local_name}"

#获取数据库服务端IP地址

DBHOST="$(cat /etc/sys_service.conf | awk -F"=" '/host=/{print $2;exit}')"

#检查ukey使用情况函数

_chkukey()

{

#节点名

unode=$1

#节点IP

u_id=$2

#获取conf下domain.sys配置文件中SGDAPI行

d_flag=$(ssh ${unode} cat /home/d5000/hebei/conf/domain.sys | grep "SGDAP")

#判断SGDAPI的值是否是1

if [[ "${d_flag}" = "SGDAPI=1" ]]

#是的话....

then

echo -e "${unode}节点ukey使用正常..."

#追加信息到结果文件中...

echo -e "${DATE},${u_id},${unode},1,${local_id}" >> ${chk_ukey_all}

#不是的话...

else

echo -e "${unode}节点ukey使用异常..."

echo -e "${unode}节点ukey使用异常..." >> ${chk_res_ukey}

echo -e "${DATE},${u_id},${unode},0,${local_id}" >> ${chk_ukey_all}

fi

}

#检查对时函数

_chktime()

{

#节点名

tnode=$1

#节点ID

t_id=$2

#获取对方时间

rtime=$(ssh ${tnode} date +%Y%m%d%H%M%S)

#获取本地时间

ltime=$(date +%Y%m%d%H%M%S)

#计算时间差

etime=$((${rtime}-${ltime}))

#如果时间差小于3

if [[ ${etime} -lt 3 ]]

#是的话...

then

echo -e "${tnode}节点对时正常..."

echo -e "${DATE},${t_id},${tnode},0,${local_id}" >> ${chk_time_all}

else

#不是的话

echo -e "${tnode}节点对时异常...相差时间为${etime}秒..."

echo -e "${tnode}节点对时异常...相差时间为${etime}秒..." >> ${chk_res_time}

echo -e "${DATE},${t_id},${tnode},1,${local_id}" >> ${chk_time_all}

fi

}

#检查硬盘空间函数

_chkhard()

{

#节点民

hnode=$1

#节点ID

h_id=$2

#获取硬盘信息数量

hnum=$(ssh ${hnode} df -t ext3 -h -v | grep G | wc -l)

#循环读取硬盘信息行数,通过hnum变量记录,当数量小于等于0的时候停止

while [ ${hnum} -gt 0 ]

do

#查看对方硬盘信息中的一行,然后获取该行中每一列的信息

h_info=$(ssh ${hnode} df -t ext3 -k -v | grep "%" | grep -v "文件" | grep -v "Use" | awk 'NR=="'${hnum}'"{print $(NF-4),$(NF-3),$(NF-2),$(NF-1),$NF}')

#awk输出最后一列

h_name=$(echo ${h_info} | awk '{print $NF}')

#awk输出倒数第二列

h_uper=$(echo ${h_info} | awk '{print $(NF-1)}'|cut -d% -f1)

#awk输出倒数第三列

h_free=$(echo ${h_info} | awk '{print $(NF-2)}')

#计算大小,换算为G

h_free=$((${h_free}/1024/1024))

#awk输出倒数第倒数第四列

h_used=$(echo ${h_info} | awk '{print $(NF-3)}')

#计算大小,换算为G

h_used=$((${h_used}/1024/1024))

#awk输出倒数第倒数第五列

h_total=$(echo ${h_info} | awk '{print $(NF-4)}')

#计算大小,换算为G

h_total=$((${h_total}/1024/1024))

#判断大小使用率是否大于79%

if [[ ${h_uper} -gt 79 ]]

then

echo -e "${hnode}节点...${h_name}目录空间越限...大小为${h_uper}%..."

echo -e "${hnode}节点...${h_name}目录空间越限...大小为${h_uper}%..." >> ${chk_res_hard}

echo -e "${DATE},${h_id},${hnode},${h_name},${h_total},${h_used},${h_free},${h_uper},1,${local_id}" >> ${chk_hard_all}

else

echo -e "${hnode}节点...${h_name}目录空间正常...大小为${h_uper}%..."

echo -e "${DATE},${h_id},${hnode},${h_name},${h_total},${h_used},${h_free},${h_uper},0,${local_id}" >> ${chk_hard_all}

fi

hnum=$((${hnum}-1))

#此循环主要是对df -h的硬盘信息,一行一行处理,在处理每一行时获取该行的每一列信息(全部空间,使用空间,剩余空间,使用率等等),判断越限条件是使用率是否大于79%

done

}

#检查Inode空间函数

_chkinode()

{

#节点名称

inode=$1

#节点ID

i_id=$2

#获取目标机器inode信息行数...以下与硬盘结构一直...只不过信息变成inode的了...

inum=$(ssh ${inode} df -t ext3 -h -v | grep G | wc -l)

while [ ${inum} -gt 0 ]

do

i_info=$(ssh ${inode} df -t ext3 -i -v | grep "%" | grep -v "文件" | grep -v "Use" | awk 'NR=="'${inum}'"{print $(NF-4),$(NF-3),$(NF-2),$(NF-1),$NF}')

i_name=$(echo ${i_info} | awk '{print $NF}')

i_uper=$(echo ${i_info} | awk '{print $(NF-1)}'|cut -d% -f1)

i_free=$(echo ${i_info} | awk '{print $(NF-2)}')

i_used=$(echo ${i_info} | awk '{print $(NF-3)}')

i_total=$(echo ${i_info} | awk '{print $(NF-4)}')

if [[ ${i_uper} -gt 79 ]]

then

echo -e "${inode}节点...${i_name}目录inode空间越限...大小为${i_uper}%..."

echo -e "${inode}节点...${i_name}目录inode空间越限...大小为${i_uper}%..." >> ${chk_res_inode}

echo -e "${DATE},${i_id},${inode},${i_name},${i_total},${i_used},${i_free},${i_uper},1,${local_id}" >> ${chk_inode_all}

else

echo -e "${inode}节点...${i_name}目录inode空间正常...大小为${i_uper}%..."

echo -e "${DATE},${i_id},${inode},${i_name},${i_total},${i_used},${i_free},${i_uper},0,${local_id}" >> ${chk_inode_all}

fi

inum=$((${inum}-1))

done

}

#检查数据库连接

#测试isql是否可以登录进去

#此处石向模型中心发送结果信息,并且汇报是否发送成功,结果信息会用kettle读写入数据库中,然后用移动终端进行展示。

#发送文件名称

esac

fi

}

check_swap_priv()

{

node_conf_file=$1

ping_flag=1

if [ "$2" != "" ]; then

ping_flag=$2

fi

if [ "$node_conf_file" = "" ]; then

printf "体检节点配置文件参数错误\n"

return;

fi

for host in $(cat $node_conf_file)

do

pingret=0

if [ "$ping_flag" = "1" ]; then

pingret=`ping_cmd $host`

fi

if [ "$ping_flag" != "1" -o $pingret -eq 0 ]; then

printf "============================== $host ==============================\n"

swap_cmd $host

printf "\n"

else

printf "$host 网络不通!\n"

fi

done

}

if [ $# != 0 -a $# != 1 ]

then

echo "用法1: $0(默认体检节点配置文件$PASSHOSTS)"

echo "例如: $0"

echo "用法2: $0 参数1"

echo "例如: $0 hostname.ini"

exit 1

fi

case $# in

0) check_swap_priv $PASSHOSTS 0;;

1) check_swap_priv $1;;

esac

#!/bin/sh

APP_MSG_FILE="${D5000_HOME}/var/log/app_msg.log"

MSG_ERROR_FILE="`pwd`/.tmp_msg_error.log"

PASSHOSTS="`pwd`/.passhosts.txt"

SSH="ssh"

ping_cmd()

{

pingret=-1

host=$1

if [ "$host" != "" ]; then

case `uname` in

AIX) ping -c1 -w2 $host > /dev/null

check_msg_error_cmd()

{

host=$1

if [ "$host" = "" ]; then

return

fi

#$SSH $host grep 消息失效 $APP_MSG_FILE > $MSG_ERROR_FILE

num=`$SSH $host "grep 消息失效 $APP_MSG_FILE | wc -l"`

if [ $num -gt 0 ] ; then

printf "$host 消息失效数量=${num},请检查!\n"

else

printf "$host 发送和接收消息正常!\n"

fi

}

check_app_msg_priv()

{

node_conf_file=$1

ping_flag=1

if [ "$2" != "" ]; then

ping_flag=$2

fi

if [ "$node_conf_file" = "" ]; then

printf "体检节点配置文件参数错误\n"

return;

fi

for host in $(cat $node_conf_file)

do

pingret=0

if [ "$ping_flag" = "1" ]; then

pingret=`ping_cmd $host`

fi

if [ "$ping_flag" != "1" -o $pingret -eq 0 ]; then

check_msg_error_cmd $host

# num1=`send_msg_error_cmd`

# if [ $num1 -gt 0 ] ; then

# printf "$host 发送侧消息失效数量=${num1},请检查!\n"

# else

#

# fi

#

# num2=`recv_msg_error_cmd`

# if [ $num2 -gt 0 ] ; then

# printf "$host 接收侧消息失效数量=${num2},请检查!\n"

# fi

#

# if [ $num1 -eq 0 -a $num2 -eq 0 ]; then

# printf "$host 发送和接收消息正常!\n"

# fi

else

printf "$host 网络不通!\n"

fi

done

}

if [ $# != 0 -a $# != 1 ]

then

echo "用法1: $0(默认体检节点配置文件$PASSHOSTS)"

echo "用法2: $0 参数1"

echo "例如: $0 hostname.ini"

exit 1

fi

case $# in

0) check_app_msg_priv $PASSHOSTS 0;;

1) check_app_msg_priv $1;;

esac

#!/bin/sh

DB_TYPE=""

DB_ADDR=""

}

check_dm()

{

DB_ADDR=$1

if [ "$DB_ADDR" = "" ]; then

return;

fi

isql SYSDBA/SYSDBA@$DB_ADDR <<EOF

select '达梦库, ${PREFIX}' || count(*) || ', 限值=' || get_para_value('max_sessions') || ', 占比=' || to_char(to_number(count(*))/get_para_value('max_sessions')*100, '99.99') || '%' from v\$session;

exit

EOF

printf "\n"

}

check_kb()

{

DB_ADDR=$1

if [ "$DB_ADDR" = "" ]; then

return;

fi

isql -h $DB_ADDR -USYSTEM -WMANAGER EMS <<EOF

select '金仓库, ${PREFIX}' || connections() || ', 限值=' || current_setting('max_connections') || ', 占比=' || to_char(to_number(connections())/current_setting('max_connections')*100, '99.99') || '%';

\q

EOF

printf "\n"

}

if [ $# != 2 ]; then

echo "用法: $0 dm|kb IP"

exit 1

fi

DB_TYPE=`echo $1 | tr '[A-Z]' '[a-z]'`

DB_ADDR=$2

pingret=`ping_cmd $DB_ADDR`

if [ $pingret -eq 0 ]; then

case $DB_TYPE in

'dm') check_dm $DB_ADDR | grep -i $PREFIX | grep -iv count | awk 'BEGIN{FS=" "}{for(i=2;i<=NF;i++)printf("%s ",$i);printf("\n");}';;

'kb') check_kb $DB_ADDR | grep -i $PREFIX;;

*) echo "Unknown database type";;

esac

else

printf "$DB_ADDR 网络不通!\n"

fi

本发明的综合诊断平台运行时需要依赖后台硬件资源,尤其是数据库服务器及核心交换机,将会受到处理器、内存、硬盘、网络带宽、Socket连接数、可操作文件数影响。考虑到语句下发可能会扫描数个甚至数十个GB的磁盘文件,占用数百MB或上GB的内存,为了不影响系统正常业务的执行,程序上将对适用范围做出限制,例如只在调控网一区使用,后台负载较重时将放弃下发命令并告知用户。

应用例1

下面以国网沧州供电公司系统为例简要介绍:

1.在调度主站系统人机界面中直接点击执行按钮,后台将会执行对应命令或脚本输出结果。

2.当命令需要扫描全网设备并输出文档时需要复检确认。若一键执行后展示UKEY使用异常状况,则在导出CSV文件复检确认时,点否;若一键执行后展示UKEY使用状况正常,则在导出CSV文件复检确认时,点是,成功导出CSV文件并存储指定目录。

3.当任务执行不成功将出现返回提示框,并提示失败原因。

4. 工具模块内设置有“帮助文档”,里面详细说明了工具执行步骤及所执行的脚本,起到培训及技术指导的作用。

综合诊断平台采用人机交互方式快速检查得到结果,为系统诊断、故障发现、缺陷消除等运维工作提供可视化、便捷化、服务化手段。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1