历史原因造成公司有很多centos 6.2的系统,从某天6.2系统突然自动重启,排查半天发现是6.2的内核bug(超过208天后可能自动重启,可以参考https://access.redhat.com/site/solutions/68466),所以为了不影响业务,在发现6.2系统在线超过180天后就安排重启工作,下面是介绍如何使用zabbix来从数据库里获取6.2系统服务器的在线天数,然后通知业务重启,避免意外重启导致业务受到影响。
1、脚本内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#!/bin/bash
#script name check_6.2_uptime.sh
.
/etc/profile
logdir=
'/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
$logdir
fi
##zabbix get centos 6.2 uptime
#select os system version
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 g.groupid = hg.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
#select 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 g.groupid = hg.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
.txt
sed
-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
.txt
awk
'{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|
awk
'{if($5 >150) {print $0}}'
|
sort
-k2nr > $logdir
/zabbix_os_uptime_result
.txt
sed
-i
'1i 查询日期\t所属组\t主机ip\t系统版本\t在线天数'
$logdir
/zabbix_os_uptime_result
.txt
|
默认结果在/tmp/zabbix_log/zabbix_os_uptime_result.txt,请自行根据自己的环境来修改脚本的数据库信息。
2、使用
直接使用下面命令
1
|
/bin/bash
check_6.2_uptime.sh
|
3、结果内容(部分展示,主机组信息屏蔽了)
1
2
3
4
5
6
|
[root@puppet zabbix_log]
# cat zabbix_os_uptime_result.txt
查询日期 所属组 主机ip 系统版本 在线天数
2014-07-23 xxx机房--自研项目--xx 10.10.10.46 6.2 218
2014-07-23 xxx机房--自研项目--xxx 10.10.10.47 6.2 218
2014-07-23 xxx机房--自研项目--xxx 192.168.10.153 6.2 202
2014-07-23 xxx机房--自研项目--xxx 192.168.10.154 6.2 202
|
4、txt转成excel格式
请参看“http://jingyan.baidu.com/article/359911f5108f3757fe0306fb.html”,我就不介绍了,很简单。
如果大家想使用我的脚本,可以从附件里下载,认为本文对你有益,请给个好评与赞,谢谢。
本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1529157,如需转载请自行联系原作者