利用Shell生成Zabbix监控的数字报表

我们都知道Zabbix是一个非常强大的监控工具,我们公司呢也在用Zabbix监控所有网站的状态。

最近有一个需求,就是我们需要生成一份报告,报告里要包含前一天一整天的时间节点和对应的响应时间,这样的报告用来统计网站的可用性达到了什么水准。

?

Zabbix本身自带报告功能,可是都是图像的,并没有数据格式的。虽然没有提供数据格式的报表,但是Zabbix提供了一套API,可以根据需求获取对应的数据(JSON格式),于是我就写了个脚本,用来把每个监控的网址的监控数据输出到一个CSV文件中。(后续可以用Excel做一个宏去把所有收集到的CSV文件集合成一个XLS文件,这个Excel文件可以下载到:)

?

PS:服务器上面没有任何高级编程语言的编译工具或者运行环境,所以一切数据都用shell脚本去处理。用shell处理Json,蛋疼的不是一点点。。。。。。也有可能是我shell水平过差。。。如果有更好的想法的话请建议一下。谢谢。

?

?

?

脚本如下:

#!/bin/bash

##获取api的授权码,后面获取需要的信息的时候要用到。

##先根据官方方法获取授权,之后会有一段输出信息,其中包含授权码,用awk处理一下就能得到那串码了。
authjson=`curl -l -X POST -H ‘content-type: application/json‘ -d ‘{"jsonrpc":"2.0","method":"user.authenticate","params":{"user":"Admin","password":"zabbix"},"id":1}‘? http://127.0.0.1/zabbix/api_jsonrpc.php`
authstr=`echo $authjson | awk -F "[,:\"]" ‘{print $11}‘`
echo $authstr

##报告的初始时间和结束时间(前一天的0点到24点)
from=`date? "+%Y-%m-%d 00:00:00" -d"-1day"`
echo $from
now=`date? "+%Y-%m-%d 00:00:00"`

##转换为Linux时间格式,Zabbix只支持这种格式。
from=`date -d "$from" ‘+%s‘`
now=`date -d "$now" ‘+%s‘`

##每隔监控的网址在数据库中都有对应的一条记录,现在直接从数据库中获取所有的网址对应的ID。

##getID.sql的内容如下:

##select items.itemid from items join hosts on (items.hostid=hosts.hostid) where items.description like ‘%response time%‘ and hosts.host like ‘%WebSite%‘ and items.status=0; (sql文件可以根据实际情况编写,只要能得到所有受监控网址的ID就好。)

mysql --user=root --password=zabbix zabbix < getMalaysiaID.sql > /etc/scripts/outputMYID.txt

##mysql命令获取到的ID是有一个表头的,去掉。
sed ‘1d‘ /etc/scripts/outputMYID.txt > /etc/scripts/outputMYID_Daily.txt

##清理以前的临时文件
rm -rf /etc/scripts/dailyreports/tmpjson/*.txt

##获取每一个ID对应的网址的历史监控记录,Json格式,用时间段来做限定。
for i in `cat /etc/scripts/outputMYID_Daily.txt`
do
???? jsonstr="{\"jsonrpc\": \"2.0\",\"method\":\"history.get\",\"params\":{\"history\":0,\"itemids\":[\"$i\"],\"time_from\":\"$from\",\"time_till\":\"$now\",\"output\":\"extend\"},\"auth\": \"$authstr\",\"id\": 1}"
???? gethistory="curl -l -X POST -H ‘Content-Type: application/json‘ -d ‘"$jsonstr"‘ http://127.0.0.1/zabbix/api_jsonrpc.php"
???? echo $gethistory > /etc/scripts/tmp.sh
???? chmod a+x /etc/scripts/tmp.sh
???? /etc/scripts/tmp.sh > /etc/scripts/dailyreports/tmpjson/$i.txt
done

##新建一个文件夹!- -
now=`date "+%Y%m%d"`
mkdir /etc/scripts/dailyreports/dailyreports$now

##处理获取到的Json数据了
for i in `ls /etc/scripts/dailyreports/tmpjson/`
do
???? rm /etc/scripts/dailyreports/tmp/*

##获取所有的响应时间的记录

???? cat /etc/scripts/dailyreports/tmpjson/$i | sed -e ‘s/[{}]/‘‘/g‘ | awk -v k="text" ‘{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}‘ | grep value | grep -o ‘[0-9]\.[0-9]*‘ > /etc/scripts/dailyreports/tmp/values

##获取所有的时间节点的记录
???? cat /etc/scripts/dailyreports/tmpjson/$i | sed -e ‘s/[{}]/‘‘/g‘ | awk -v k="text" ‘{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}‘ | grep clock | grep -o ‘[0-9]*‘ > /etc/scripts/dailyreports/tmp/clocks_org

##获取到的时间节点要处理成人看的格式。
???? for c in `cat /etc/scripts/dailyreports/tmp/clocks_org`
???? do
????????? date [email protected]$c ‘+%Y-%m-%d %H:%M:%S‘ >> /etc/scripts/dailyreports/tmp/clocks_new
???? done

##设置新文件的文件名
???? itemidstr=`echo $i | awk -F [.] ‘{print $1}‘`
???? itemname=`mysql --user=root --password=zabbix zabbix -e "select key_ from items where itemid=$itemidstr;" | awk -F [\[,] ‘{print $2}‘`

##创建一个报告文件,并且加入表头
???? echo "Monitored URL:,$itemname," > /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
???? echo "Clock,Response Time(s)," >> /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv

##把时间节点的记录跟响应时间的记录合成一个文件,并且追加到刚刚的报告文件里。
???? paste -d "," /etc/scripts/dailyreports/tmp/clocks_new /etc/scripts/dailyreports/tmp/values /dev/null >> /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv

done

##清理临时文件
rm -rf /etc/scripts/dailyreports/tmpjson/*.txt

##把所有获得的报告都收集起来,然后把写好宏的Excel文件也收集到一起,打包发给需要的人。

##到时候在excel文件里会有一堆说明,点击哪儿哪儿的按钮就可以得到一份合适的Excel的报告啦。
mkdir /etc/scripts/dailyreports/dailyreports$now/csv
mv /etc/scripts/dailyreports/dailyreports$now/*.csv /etc/scripts/dailyreports/dailyreports$now/csv/
cp /etc/scripts/dailyreports/README.xls /etc/scripts/dailyreports/dailyreports$now/
cd /etc/scripts/dailyreports/
zip -r dailyreports$now.zip dailyreports$now/

cd /root/sendEmail-v1.51

./sendEmail –f [email protected] -t [email protected] -u KLDC DMZ1 Daily SLA Report for WebHosting -m KLDC DMZ1 Daily SLA Report For WebHosting -s 192.168.169.23:25 -a /etc/scripts/dailyreports/dailyreports$now.zip

rm -rf /etc/scripts/dailyreports/dailyreports*

利用Shell生成Zabbix监控的数字报表,布布扣,bubuko.com

时间: 2024-10-05 06:44:05

利用Shell生成Zabbix监控的数字报表的相关文章

Zabbix监控之Linux命令行/Shell脚本解析json

本文主要写了在Linux下如何用Shell脚本解析json数据,以便于在Zabbix中添加适合于业务应用的监控项. 为什么要使用json? json作为一种文本化的数据格式(文本化协议),符合UNIX编程的哲学,既符合透明性(透明性:设计可见,便于审查和调试)又符合文本性(文本性:数据应该保存为文本文件).关键在于json对Web程序或者java程序非常友好,对于开发人员来说,他们也喜欢使用json数据.业务逻辑.内部的依赖关系以及状态信息由程序员去做,运维人员只需要调用程序员开放出来的API接

利用Zabbix监控Web性能和可用性

怎么利用Zabbix监控web性能和可用性呢? 我们这边分为几个步骤:打开网站.登陆.登陆验证.退出,一共4个小step,看实例. 检测流程 1. 打开网站:如果http code为200,并且响应的html中包含Zabbix SIA表示打开成功(zabbix页面有这个标示) 2. 登陆后台:post用户名和密码到index.php,如果响应200,那表示post成功.并且通过正则表达式从响应的html中匹配sid,这个sid也就是一个宏变量,退出可以使用到 3. 验证登陆:打开首页,检索htm

利用shell监控cpu、磁盘、内存使用率

利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ############################################## #Author: Liuzhengwei - [email protected] #QQ:1135960569 #Last modified: 2017-04-19 21:50 #Filename: jiankong.sh #Description:  #########

利用random生成一组随机且不重复的随机数字

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { public static int Chaos_GetRandomSeed() { byte[] bytes = new byte[4]; System.Security.

Linux基础之-利用shell脚本实现自动监控系统服务

目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件:1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1); 需要的文件:    1. python邮件发送工具: 2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户: 3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令

利用Zabbix监控Lync的实时在线人数

大家都知道windows性能监控一般依靠性能计数器, Lync实时在线人数统计就是SQL数据库实时连接数. 使用windows性能监视器对Lync的实时在线人数进行监控. 这个数值就是lync的实时在线人数 通过zabbix监控 为了方便zabbix监控我们需要找出这个性能参数值 我们将SQL服务器的性能计数参数都导出来 我们需要为SQL服务器新建一个监控项目 键值为: perf_counter[\SQLServer:User Settable(User counter 1)\Query] 再为

shell脚本案例(四)利用 free 命令精确监控RAM的使用率

需求:利用free命令精确监控RAM的使用率具备知识:grep,free,awk,bc 脚本如下 [[email protected] scripts]# cat mem.sh #!/bin/bash - # free -m 代表着以M单位进行输出,如果内存足够大,那么您应该使用-g参数,容量以GB为单位输出. mem_total=`free -m | grep Mem | awk '{print $2}'` mem_used=`free -m | grep Mem | awk '{print

ZABBIX利用自带模板监控mysql数据库

***** ZABBIX利用自带模板监控mysql数据库**** 监控效果图 增删改查 慢查询 每秒总执行次数 1. 进入主题:先搭建好zabbix服务器,并把mysql作为agent端(建议先在线下测试好,再上生产环境). 2.zabbix_agent端(即mysql服务器,下同)使用which mysqladmin.which mysql查看命令行的绝对路径,修改脚本chk_mysql.sh脚本链接为http://blog.51cto.com/12131824/2344356 3.在mysq

zabbix监控利用Python脚本发邮件

最近实施了zabbix监控,开源软件杠杠的,甩nagios 好几条街-- 环境:centos6.6 + Zabbix 2.4.5 + Python 2.6.6 cd /usr/local/zabbix/share/zabbix/alertscripts #进入脚本存放目录vi SendAlertEmail.sh #编辑,添加以下代码#!/bin/shecho "$3" | mail -s "$2" $1:wq! #保存退出chown zabbix.zabbix /u