博客
关于我
zabbix企业应用之从数据库提取centos 6.2系统在线天数
阅读量:797 次
发布时间:2023-03-28

本文共 3253 字,大约阅读时间需要 10 分钟。

历史原因造成公司有很多CentOS 6.2的系统,从某天起6.2系统突然自动重启,经过排查发现是6.2内核的一个bug(超过208天后可能自动重启,可以参考相关资料)。为了不影响业务,建议在发现6.2系统在线超过180天后安排重启工作,避免因内核bug导致的意外重启对业务造成影响。

本文将介绍如何利用Zabbix监控CentOS 6.2系统的运行时间,并在超过180天后触发通知,确保重启工作得到计划性执行。

1. 脚本内容

以下是用于获取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

2. 使用方法

将脚本保存为check_6.2_uptime.sh,然后运行以下命令:

/bin/bash check_6.2_uptime.sh

3. 结果内容

默认结果文件位于/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

4. 文档转换

将文本文件转换为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/

你可能感兴趣的文章
Objective-C实现创建多级目录(附完整源码)
查看>>
Objective-C实现删除重复的字母字符算法(附完整源码)
查看>>
Objective-C实现判断32位的数字是否为正数isPositive算法(附完整源码)
查看>>
Objective-C实现十进制转N进制算法(附完整源码)
查看>>
Objective-C实现十进制转八进制算法(附完整源码)
查看>>
Objective-C实现华氏温度转摄氏温度(附完整源码)
查看>>
Objective-C实现单例模式(附完整源码)
查看>>
Objective-C实现单向链表的反转(附完整源码)
查看>>
Objective-C实现单向链表的反转(附完整源码)
查看>>
Objective-C实现单字母密码算法(附完整源码)
查看>>
Objective-C实现单循环链表算法(附完整源码)
查看>>
Objective-C实现单词计数(附完整源码)
查看>>
Objective-C实现单链表反转(附完整源码)
查看>>
Objective-C实现博福特密码算法(附完整源码)
查看>>
Objective-C实现卡尔曼滤波(附完整源码)
查看>>
Objective-C实现卡尔曼滤波(附完整源码)
查看>>
Objective-C实现卡尔曼滤波(附完整源码)
查看>>
Objective-C实现压缩文件夹(附完整源码)
查看>>
Objective-C实现原型模式(附完整源码)
查看>>
Objective-C实现双向A*算法(附完整源码)
查看>>