最近决定将夜班值班人员取消,夜里告警采用机器人电话通知。总结一下这么几个情况,有问题还请指出,希望也能给大家多一个思路。
V1做的太糙了,预计年初上V2
一、用谁家的服务
费用我没有太关注,主要就是看了哪个简单一些。
国内:
问了几家国内云平台的客服,他们都需要公司的营业执照,我直接就选择了放弃
国外:
Nexmo,这是我们现在用的,第一次成功打出电话用的就是他,后来直接选择他了。网上对他的介绍也很多,大家可以去看看,直接调用,不需要向他们提供多余的信息,付款也是支持paypal,所以很方便
二、思路
1、zabbix端:
将符合告警条件的内容,通过Action下发到服务器中日志。
2、内容处理
将告警的内容进行文本化,最后以curl的形式,访问电话url
3、判断接口
一个中间接口,这个接口会对发过来的内容进行判断,在30分钟内,相同主机组的主机,将不会被进行二次告警,因为如果是大规模的告警,很有可能打爆你的电话
三、具体的优化和操作
1、zabbix端:
在zabbix的action对需要告警的内容做一个划分,我们这里只对“High”级别才会触发下发内容
其中的"Default message"很关键,他可以有效的帮助我简化对文本的操作
2、内容处理
将下发的内容进行格式化,将多余的空格清理掉;
cat ${logs_path}ss.log | awk -vstart=$start_time -vend=$end_time -F'^' 'start<=$1 && $1<=end {print $0}' | awk '{gsub(/\r[[:blank:]]|[[:blank:]]/,"")}1' > ${alertlogs_path}format$(date +"%Y%m%d%H%M").log
通过切割后的日志,查看triggerid,从zabbix的数据库中提出groupid;
for triggerid in $(awk -F ^ '{print $2}' /usr/local/zabbix_ora/alertscripts/alertshell_dir/alertlog_dir/format$(date +"%Y%m%d%H%M").log )
do
su - oracle <<!
sqlplus -S user/passwd@$IP:1521/zabbix << EOF
set heading off
set feedback off
set pagesize 0
set verify off
set termout off
spool ${alertlogs_path}groupid$(date +"%Y%m%d%H%M").log append
select '${triggerid}^'||groupid from hosts_groups where hostid = (select hostid from items where itemid = (select itemid from functions where triggerid = $triggerid));
spool off
EOF
exit
!
done
将处理的文本和group中的trigger相同的行输出;
awk -F '^' 'NR==FNR{a[$2]=$0;next}{print a[$1]"^"$2}' ${path}format$(date +"%Y%m%d%H%m").log ${path}groupid$(date +"%Y%m%d%H%M").log | awk '{gsub(/[[:blank:]]/,"",$0);print $0}' > ${path}formatmethod.log
将log转换为可执行的语句,并执行
cat /dev/null > transitionkey.sh
for line in `cat ${path}formatmethod.log`
do
echo "${line}" | awk -F ^ '{print "curl '\''$URL="$2"&alertGroupNumber="$6"&alertSummary="$4"&alertDetail="$5"&alertAction=T'\''"}' >> transitionkey.sh
done