本文共 3253 字,大约阅读时间需要 10 分钟。
历史原因造成公司有很多CentOS 6.2的系统,从某天起6.2系统突然自动重启,经过排查发现是6.2内核的一个bug(超过208天后可能自动重启,可以参考相关资料)。为了不影响业务,建议在发现6.2系统在线超过180天后安排重启工作,避免因内核bug导致的意外重启对业务造成影响。
本文将介绍如何利用Zabbix监控CentOS 6.2系统的运行时间,并在超过180天后触发通知,确保重启工作得到计划性执行。
以下是用于获取CentOS 6.2系统运行天数的Bash脚本:
#!/bin/bash#脚本名称:check_6.2_uptime.shlogdir='/tmp/zabbix_log'mysql_host='localhost'mysql_user='zabbix'mysql_passwd='zabbix'mysql_database='zabbix'year=$(date +%Y)month=$(date +%m-%d)next_month=$(date +%m-%d -d "1 days")if [ ! -d $logdir ]; then mkdir $logdirfi#查询系统版本信息mysql -h $mysql_host -u $mysql_user -p $mysql_passwd $mysql_database > $logdir/mysql_zabbix_os_system.txt << EOF SET names utf8; SELECT from_unixtime(hi.clock) as date, g.name as group_name, h.host as host, hi.value as system_version FROM hosts_groups hg JOIN groups g ON hg.groupid = g.groupid JOIN items i ON hg.hostid = i.hostid JOIN hosts h ON h.hostid = i.hostid JOIN history_str hi ON i.itemid = hi.itemid WHERE i.key = 'system.sw.os[name]' AND hi.value like '%6.2%' AND g.name > '所有Mysql主机组' AND hi.clock > UNIX_TIMESTAMP('$year-$month 00:00:00') AND hi.clock < UNIX_TIMESTAMP('$year-$next_month 00:00:00') GROUP BY h.host;EOF#查询系统 uptime 信息mysql -h $mysql_host -u $mysql_user -p $mysql_passwd $mysql_database > $logdir/mysql_zabbix_os_uptime.txt << EOF SET names utf8; SELECT from_unixtime(hi.clock) as date, g.name as group_name, h.host as host, round(max(hi.value_max) / 86400, 0) as system_uptime FROM hosts_groups hg JOIN groups g ON hg.groupid = g.groupid JOIN items i ON hg.hostid = i.hostid JOIN hosts h ON h.hostid = i.hostid JOIN trends_uint hi ON i.itemid = hi.itemid WHERE i.key = 'system.uptime' AND hi.clock > UNIX_TIMESTAMP('$year-$month 00:00:00') AND hi.clock < UNIX_TIMESTAMP('$year-$next_month 00:00:00') GROUP BY h.host;EOF#处理并输出结果sed -i '/Date/' d $logdir/mysql_zabbix_os_system.txtsed -i '/Date/' d $logdir/mysql_zabbix_os_uptime.txt#提取并格式化结果awk '{print $1"\t"$3"\t"$4"\t6.2"}' $logdir/mysql_zabbix_os_system.txt > $logdir/mysql_zabbix_os_system_version.txtawk '{print $1"\t"$3"\t"$4"\t"$5}' $logdir/mysql_zabbix_os_uptime.txt > $logdir/mysql_zabbix_os_uptime_new.txt#合并并过滤结果awk 'NR==FNR {a[$1,$2,$3]=$4; next} {print $0, a[$1,$2,$3]}' $logdir/mysql_zabbix_os_uptime_new.txt $logdir/mysql_zabbix_os_system_version.txt > $logdir/zabbix_os_uptime_result.txt#过滤显示天数大于150的主机awk '{if($5 > 150) {print $0}}' $logdir/zabbix_os_uptime_result.txt > $logdir/zabbix_os_uptime_result.txtsort -k2nr $logdir/zabbix_os_uptime_result.txt > $logdir/zabbix_os_uptime_result_sorted.txt#生成最终结果文档sed -i '1i 查询日期\t所属组\t主机ip\t系统版本\t在线天数' $logdir/zabbix_os_uptime_result_sorted.txt 将脚本保存为check_6.2_uptime.sh,然后运行以下命令:
/bin/bash check_6.2_uptime.sh
默认结果文件位于/tmp/zabbix_log/zabbix_os_uptime_result.txt,请根据实际环境自行修改数据库信息和输出路径。
以下是部分示例结果:
查询日期 所属组 主机ip 系统版本 在线天数2014-07-23 xxx机房--自研项目--xx 10.10.10.46 6.2 2182014-07-23 xxx机房--自研项目--xxx 10.10.10.47 6.2 2182014-07-23 xxx机房--自研项目--xxx 192.168.10.153 6.2 2022014-07-23 xxx机房--自研项目--xxx 192.168.10.154 6.2 202
将文本文件转换为Excel格式,可以使用以下命令:
awk 'NR==FNR{a[$1,$2,$3]=$4;next}{print $0,a[$1,$2,$3]}' $logdir/zabbix_os_uptime_result.txt $logdir/zabbix_os_uptime_new.txt 如需进一步处理,请根据实际需求添加其他命令。
以上脚本和说明可根据实际环境进行修改和完善,确保与Zabbix数据库的信息一致,并根据实际业务需求调整通知规则。
转载地址:http://bahfk.baihongyu.com/