zabbix中的IT service可以是树状结构。

这就要求脚本要有这个功能点:能收集到一个节点的所有子节点信息。(这是典型的递归循环的使用场景)。

接着上篇博客,我们已经可以获取到zabbix的auth信息。

使用zbxapi_login.pl脚本获取认证串这里是2080444abc88afe37b59456d4b7ee0a1

打开页面的IT service,点击某个你关心的节点。之你可以在地址栏看到如下信息。serviceID就在里面。

http://x.x.x.x/zabbix/report3.php?serviceid=4&year=2016&period=weekly

现在我可以用如下命令获取到IT service信息了。第三第四个参数分别是起止时间。

perl getsla.pl 2080444abc88afe37b59456d4b7ee0a1 4 `date -d '2015-10-01 00:00:00' +%s` `date -d '2015-11-01 00:00:00' +%s`

以下是脚本内容

#cat getsla.pl
use Text::CSV_XS;
use JSON::RPC::Client;
use Time::Local;
use Data::Dumper;
use strict;
use warnings;
my $csv = Text::CSV_XS->new ({ binary => 1, eol => $/ });sub getsla {my($auth,$serviceid,$from,$to) = @_;my $client = new JSON::RPC::Client;my $uri    = 'http://zabbixIP/zabbix/api_jsonrpc.php';my $callobj = {jsonrpc  => '2.0',method  => 'service.getsla',params => {       serviceids => [$serviceid],intervals  => [{ from => "$from" , to => "$to" }],#intervals  => [ from => "1443913200" , to => "1444518000" ],} ,auth => "$auth",id  => '1',};my $res = $client->call($uri, $callobj);return $res->result;
}sub getservice{my($auth,$serviceid) = @_;my $client = new JSON::RPC::Client;my $uri    = 'http://zabbixIP/zabbix/api_jsonrpc.php';my $callobj = {jsonrpc  => '2.0',method  => 'service.get',params => {       serviceids => [$serviceid],selectDependencies  => "extend",output  => "extend",},auth => "$auth",id  => '1',};my $res = $client->call($uri, $callobj);my $return = $res->result;return $return;
}sub average {my (@num) = @_;my $num = scalar @num;my $total;foreach (0..$#num) {$total += $num[$_];}return ($total/$num);
}sub getobj{my($auth,$serviceid,$from,$to) = @_;my @array;my %hash;$hash{'sla'}=getsla($auth,$serviceid,$from,$to);$hash{'service'}=getservice($auth,$serviceid);${$hash{'service'}}[0]{'countdependencies'}=scalar(@{$hash{'service'}->[0]{'dependencies'}});my @num;if (${$hash{'service'}}[0]{'countdependencies'} > 0 ){my $sid ;foreach $sid (@{$hash{'service'}->[0]{'dependencies'}}) {my $child=&getobj($auth,$sid->{'serviceid'},$from,$to);push (@array,$child);push (@num,$child->{'sla'}{$child->{'service'}[0]{'serviceid'}}{'sla'}[0]{'sla'})}my $num = scalar @num;my $total;foreach (0..$#num) {$total += $num[$_];}$hash{'sla'}{$serviceid}{'sla'}[0]{'sla'}= $total / $num;}push (@array,\%hash);return @array;
}sub caltime{my($period) = @_;my $days = int($period/(24*3600));my $hours = int($period%(24*3600)/3600);my $mins = int($period%3600/60);my $secs = $period%60;return $days."d,".$hours."h,".$mins."m,".$secs."s";
}open my $out,">", "/data/HTI_sla.csv" or die "Can NOT create file:outputfile:$!";
my @title=( 'Service Name','SLA','Down Time','Problem Time','OK Time','Period','from','to');
my $status = $csv->print ($out, \@title);my @ultobj;
@ultobj= &getobj($ARGV[0],$ARGV[1],$ARGV[2],$ARGV[3]);
my $obj;
foreach $obj (@ultobj){my @crow=();push(@crow,$obj->{'service'}[0]{'name'});push(@crow,$obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'sla'}."%");push(@crow,caltime($obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'downtimeTime'}));push(@crow,caltime($obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'problemTime'}));push(@crow,caltime($obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'okTime'}));push(@crow,caltime($obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'to'} - $obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'from'}));my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'from'});$year = $year+1900;$mon=$mon+1;push(@crow,$year."-".$mon."-".$day." ".$hour.":".$min.":".$sec);($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($obj->{'sla'}{$obj->{'service'}[0]{'serviceid'}}{'sla'}[0]{'to'});$year = $year+1900;$mon=$mon+1;push(@crow,$year."-".$mon."-".$day." ".$hour.":".$min.":".$sec);my $status = $csv->print ($out, \@crow);
}#print Dumper(@ultobj);

转载于:https://blog.51cto.com/chcearth/1734878

导出zabbix的IT service报表相关推荐

  1. SQL Server 2012--Reporting Service报表阅览工具 - Power View【转载】

    微 软SQL Server 2012是一个全面的数据库平台,使用集成的商业智能 (BI) 工具提供了企业级的数据管理.其中Reporting Service报表系统是目前最流行的报表设计,开发以及生成 ...

  2. python 导出数据并发邮件_Python自动化导出zabbix数据并发邮件脚本

    Zabbix没有报表导出的功能,于是通过编写脚本导出zabbix数据并发邮件.效果如下: 下面是脚本,可根据自己的具体情况修改: #!/usr/bin/python` `#coding:utf-8` ...

  3. api zabbix 拓扑图 获取_Zabbix报表系统

    Zabbix监控资源之后,常需要对资源的的监控数据进行导出,制作成为报表,如周报,日报等形式,目前zabbix还未自带报表功能.近期学习go语言,开发了一个简单的Zabbix报表工具. 在线试用 ht ...

  4. ActiveReports中如何在后台导出运行时绑定数据源报表

    ActiveReports支持运行时绑定数据源功能,这种绑定数据源方法使用较为普及,然而很多系统中都需要在后台导出报表文件,所以用户就很困惑,ActiveReports中如何在后台导出运行时绑定数据源 ...

  5. 如何解决Form中不能导出数据和不能输出报表的问题

    Metalink推荐的解决方法.[@more@] 如何解决Form中不能导出数据和不能输出报表的问题 1.以root用户登陆 2.切换到orporcli用户 #su orporcli 3.启动数据库 ...

  6. 导出带图片的Excel报表

    导出带图片的Excel报表 先引用 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll程序集,然后在后台页面引用using Excel = Microsof ...

  7. zabbix生成资源性能报表+邮件自动发送

    使用python调去zabbix数据库groups,hosts_groups,hosts,items,trends,trends_uint表格中的数据组个而成的字典形式,并将其写入excel表格中. ...

  8. zabbix企业应用之报表功能

    对于运维来说,监控是一个重要的工作,如果做好了监控可以解决以下问题: 1.做了硬件监控,如果服务器出现硬件问题可以提前知晓,提前安排好解决方案,避免突然出现问题造成损失: 2.做了系统与服务的监控,如 ...

  9. cognos报表导出excel_有了这个报表工具,一键生成自定义的各种报表,还可以导出Excel...

    EasyReport是一个简单易用的Web报表工具,它的主要功能是把SQL语句查询出的数据转换成报表页面, 同时支持表格的跨行(RowSpan)与跨列(ColSpan)配置. 同时它还支持报表Exce ...

最新文章

  1. JQ用变量关联input name
  2. AppDomain,应用程序域
  3. Window 窗口层次关系
  4. 两台电脑可以用同一IP上网吗?
  5. 农村房屋能抵押做贷款吗?
  6. HDU 4035 Maze
  7. 全局eslint不生效的处理
  8. kali linux之edb--CrossFire缓冲区溢出
  9. 《MySQL——连接查询》
  10. Python使用正则表达式检查书稿中不应该出现的重复字
  11. 【MyBatis笔记】03-映射文件的sql语句中 #{} 和 ${} 的区别以及实现模糊查询
  12. openssh 加固
  13. KinectV2+Ubuntu 14.04+Ros 配置
  14. 网游设想二:九重天[]
  15. 某大型电商云平台实践
  16. 计算机芯片制造原理,制作芯片与下围棋——一张图说明芯片的工作原理
  17. FreeRtos 任务优先级和中断优先级
  18. kylin构建cube时step1报错MoveTask
  19. 计算机桌面背景设置,电脑桌面背景设置图文教程
  20. 在线编辑、在线预览、在线转换,基于wps.js + java + react / vue,无需任何插件,零安装

热门文章

  1. php 设计模式系列,一看就懂系列之 php设计模式(一)-Go语言中文社区
  2. BeanUtils.copyProperties使用
  3. java 事件分发机制_读Android源码之事件分发机制最全总结
  4. java订单重复提交_java表单重复提交常用解决办法
  5. html头部协议,TCP/IP协议头部结构体
  6. python import system_[Python Basics]引用系统(The Import System)
  7. 创建图片mat_OPENCV(二)——Mat类与几个函数的简介
  8. tablepc是什么平板电脑_tablepc平板电脑怎么截图
  9. python更改文件路径 unable_python 安装无效:无法打开/usr/lib/python2. 7/config/Makefile ( 没有此类文件或者目录)...
  10. 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)