结合centreon监控平台,对rrdtool的数据进行二次分析highchart展现

不知道,是不是所有的公司都会非常勤劳每个星期统计公司IDC的负载情况。如果有这方面需求,这个工作基本都是通过cacti或者centreon等等监控平台,手动选择特定时间特定服务的使用情况,如负载和内存等。最近有个需求,是要统计一天6个时间段的网络流量最大值和最小值,并登记入册。一般方法又是登陆监控平台,然后选择特定时间出图,然后再进行统计。这个方法,我真想说弱爆了,而我之前就一直重复着这样的工作。这次我打算利用自己不太娴熟的django、python、rrdtool、highcharts、jquery等来简化这一过程。

整个过程:

1.使用rrdtool xport工具,将流量数据导出成xml格式

2.django views视图来返回xml

3.前端通过jquery 来解析xml 生成6个时间段的监控值数组和一个时间数组

4.有了这个6个数组,计算出最大值和最小值,塞到表格里就可以了

5.有个表格,那么再根据表格使用highcharts进行出图。

效果图:

相关代码分享:

1.一个button

<button onclick="parsexml(‘/time/1/‘)" class="btn btn-primary" >1 day ago</button>

2.parsexml 解析函数:

function parsexml(xml){
        $.ajax({
        type:‘GET‘,
        url:xml,
        dataType:‘xml‘,//注意处理信息的类型为xml,默认为html
        success:function(docxml){
            var value0 = parseInt($(docxml).find(‘v‘).first().text());
            var timearray = new Array();
            var valuearray = new Array();
            $(docxml).find(‘row‘).each(function(){
            var time = parseFloat($(this).children(‘t‘).text());
            var value = parseFloat($(this).children(‘v‘).text());
            timearray.push(time)
            valuearray.push(value)
                        });//end each
            var starttime = getLocalTime(timearray[0]);
            var endtime = getLocalTime(timearray[1439]);
            var value10 = valuearray.slice(0,600);
            var value12 = valuearray.slice(600,720);
            var value14 = valuearray.slice(720,840);
            var value19 = valuearray.slice(840,1140);
            var value21 = valuearray.slice(1140,1260);
            var value24 = valuearray.slice(1260,1440);
            $("#10max").text(value10.max());
            $("#10min").text(value10.min());
            $("#12max").text(value12.max());
            $("#12min").text(value12.min());
            $("#14max").text(value14.max());
            $("#14min").text(value14.min());
            $("#19max").text(value19.max());
            $("#19min").text(value19.min());
            $("#21max").text(value21.max());
            $("#21min").text(value21.min());
            $("#24max").text(value24.max());
            $("#24min").text(value24.min());
            loadchart(starttime,endtime);

                    }  // end of success
                });   // end of ajax
                          } // end of parsexml

3.highcharts 生成图片函数:

function loadchart(starttime,endtime){
    $(document).ready(function(){

    $(‘#TrafficHighChart‘).highcharts({
        data: {
            table: document.getElementById(‘datatable‘)
        },
        chart: {
            type: ‘column‘
        },
        title: {
            text: ‘From ‘ + starttime + ‘ To ‘ + endtime
        },
        yAxis: {
            allowDecimals: false,
            title: {
                text: ‘IDC Traffic‘
            }
        },
        tooltip: {
            formatter: function() {
                return ‘<b>‘+ this.series.name +‘</b><br>‘+
                    this.y;
            }
        }
    }); //end of highcharts
});//end of documentready
            } //end of loadchart

4.计算数组最大值最小值函数:

    Array.prototype.min = function() {
    var min = this[0];
    var len = this.length;
    for (var i = 1; i < len; i++){
    if (this[i] < min){
    min = this[i];
    }
                                  }
    min = (min/1048576).toFixed(2);
    return min;
                                      }
    Array.prototype.max = function() {
    var max = this[0];
    var len = this.length;
    for (var i = 1; i < len; i++){
    if (this[i] > max) {
    max = this[i];
                        }
                                }
    max = (max/1048576).toFixed(2)
    return max;
                                    }
    function parsexml(xml){
        $.ajax({
        type:‘GET‘,
        url:xml,
        dataType:‘xml‘,//注意处理信息的类型为xml,默认为html
                        }
                                }
    max = (max/1048576).toFixed(2)
    return max;

5.表格格式:

    <table id="datatable" style="margin-left:20px;" class = "table table-bordered table-striped">
    <thead>
      <tr>
        <th>Time Range</th>
        <th>max(Mb/s)</th>
        <th>min(Mb/s)</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <th>00:00-10:00</th>
        <td id = "10max"></td>
        <td id = "10min"></td>
      </tr>
      <tr>
        <th>10:00-12:00</th>
        <td id = "12max"></td>
        <td id = "12min"></td>
      </tr>
      <tr>
        <th>12:00-14:00</th>
        <td id = "14max"></td>
        <td id = "14min"></td>
      </tr>
      <tr>
        <th>14:00-19:00</th>
        <td id = "19max"></td>
        <td id = "19min"></td>
      </tr>
      <tr>
        <th>19:00-21:00</th>
        <td id = "21max"></td>
        <td id = "21min"></td>
      </tr>
      <tr>
        <th>21:00-24:00</th>
        <td id = "24max"></td>
        <td id = "24min"></td>
      </tr>
    </tbody>
  </table>

6.highchart<div>

<div id="TrafficHighChart" style="min-width:700px;height:400px"></div>

7.django views:

rrd这个rrdtool的数据库文件名称,自己想办法找到。

def trfrrdxport(request,offset):
    try:
        offset = int(offset)
    except ValueError:
        raise Http404()
    rrd = ‘/var/lib/centreon/metrics/711.rrd‘
    start = int(time.mktime((datetime.date.today() - datetime.timedelta(days = offset)).timetuple()))
    end = int(time.mktime((datetime.date.today() - datetime.timedelta(days = offset - 1)).timetuple()))
    step = ‘60‘
    legend = ‘IDC_Traffic‘
    xport = rrdxport(rrd,start,end,step,legend)
    return HttpResponse(xport)

8.django urls:

(r‘^time/(\d)/$‘,trfrrdxport),

9.rrdxport()xml导出函数:

def rrdxport(rrd,start,end,step,legend):
    s = paramiko.SSHClient()
    s.load_system_host_keys()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        pkey_file=‘/home/tadu/.ssh/id_rsa‘
        key = paramiko.RSAKey.from_private_key_file(pkey_file)
        s.connect(‘xxx.xxx.xxx.xxx‘,22,‘root‘,pkey=key,timeout=5)
        cmd = "/usr/bin/rrdtool xport --start %s --end %s DEF:value1=%s:traffic_out:AVERAGE:step=%s  XPORT:value1:‘%s‘" % (start,end,rrd,step,legend)
        stdin,stdout,stderr = s.exec_command(cmd)
        return stdout.read()
    except Exception,e:
        return e

备注:这个函数我是通过ssh到监控机上获取的。

这只是一种通过rrdtool数据进行前端分析展现的方法,我通过这个例子来证明其可能性,如果想要分析100台服务器每周的内存使用平均值,然后绘制到一张图里,来看top10数据。这种方法也是可以实现的。

2014年7月17号,今天是个特殊的日子,之前的文章全部清空了。用这篇文章做个纪念,希望一切都好!

结合centreon监控平台,对rrdtool的数据进行二次分析highchart展现

时间: 2024-10-14 19:31:07

结合centreon监控平台,对rrdtool的数据进行二次分析highchart展现的相关文章

“产品+平台”安全狗用大数据驱动安全

?迅速发展的互联网技术仍在继续的改变着我们的生活,而"互联网+'的提出,使得通过数据化来改变业务,驱动业务发展已经成为一种趋势,安全行业同样如此. 在一个大型网络中,一般情况下安全运维和管理人员是网络安全相关工作的主要责任人.而安全工作除了基础的访问控制.入侵检测和身份识别等手段,随着技术的进步和发展也逐步开始包含更多内容.及时感知网络中的异常事件.了解整体安全态势正是其中之一.对于安全运维人员来说,从成千上万的安全事件和日志中,抽丝剥茧找到最有价值.最迫切需要处理和解决的安全问题,从而保障网络

数据可视化发挥流程的价值——江汽物流数据监控平台建设经验

一年的时间,江汽物流沉淀出一套流程可视化的经验.这里拿出来一同探讨. 关于江汽物流 安徽江汽物流有限公司成立于2013年,主营业务整车物流(采购物流.生产物流.销售物流),车辆管理和维修,客运.出租车及汽车租赁等业务.我们以整车业务.物流业务"两业联动"模式保障物流规划能力.物流运作能力.物流操作能力"三大能力"体系建设,控制两项指标"搞物流及时率""低货物质损率",最终提升客户满意度.目前获得荣誉有国家4A级综合型物流企业和

企业运维监控平台架构设计与实现(ganglia篇)

一.Cacti/Nagios/Zabbix/centreon/Ganglia之抉择 1.cacti Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 简单的说Cacti 就是一个PHP 程序.它通过使用SNMP 协议获取远端网络设备和相关信息,(其实就是使用Net-SNMP 软件包的snmpget 和snmpwalk 命令获取)并通过RRDTOOL 工具绘图,通过PHP 程序展现出来.我们使用它可以展现出监控对象一段时间内的状态或者性能趋势图. 2

Cacti监控平台搭建

作为一名Linux SA,日常最重要的就是保证网站正常稳定的运行,我们需要实时监控网站.服务器的运行状态,这时需要借助开源软件(cacti.nagios.zabbix等)监控来实现. Cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户.因此,snmp和rrdtool是cacti的关键. Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成.snmp抓到数据不是存

CACTI 仙人掌监控平台

CACTI 仙人掌监控平台组件: LAMP:提供运行平台       SNMP:提供网络数据的收集  简单网络管理协议 161       RRDtools: 汇总数据并绘制图片1.检查安全环境:   iptables -F      清空防火墙   setenforce 0    关闭SElinux2.检查IP地址3.安装软件环境   yum -y install httpd                                                            

部署Cacti监控平台

1 部署Cacti监控平台 1.1 问题 本案例要求部署一台Cacti监控主机,并安装相关监控组件,为进一步执行具体的监控任务做准备: 安装net-snmp.net-snmp-utils 安装LAMP及相关依赖软件包 部署Cacti监控平台 初始化监控页面 1.2 方案 使用1台RHEL6虚拟机,安装部署LAMP环境.Cacti及相关的snmp组件包,配置数据库并对Cacti监控平台进行初始化操作. 1.3 步骤 实现此案例需要按照如下步骤进行. 步骤一:准备基础软件包 1)安装LAMP环境 C

Security基础(五):部署Cacti监控平台、构建Cacti监测系统

一.部署Cacti监控平台 目标: 本案例要求部署一台Cacti监控主机,并安装相关监控组件,为进一步执行具体的监控任务做准备: 安装net-snmp.net-snmp-utils 安装LAMP及相关依赖软件包 部署Cacti监控平台 初始化监控页面 方案: 使用1台RHEL7虚拟机,安装部署LAMP环境.Cacti及相关的snmp组件包,配置数据库并对Cacti监控平台进行初始化操作. 步骤: 步骤一:准备基础软件包 1)安装LAMP环境 Cacti监控需要通过Web页面展示出来,并且还需要使

collectd+influxDB+grafana搭建性能监控平台

collectd+influxDB+grafana搭建性能监控平台 前言 InfluxDB 是 Go 语言开发的一个开源分布式时序数据库,非常适合存储指标.事件.分析等数据:键值时间数据库性能还不错 collectd 是C 语言写的一个系统性能采集工具 Grafana 是纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表.显示图表等.V3.0以上版本支持zabbix 数据库,可以非常方便直接由zabbix_agent 采集数据. 1 环境信息 测试环境174,175

监控平台实施方案

撰写:田逸([email protected]) 基本目标 ? 监控有效性:监控能正确反应系统.应用运行状态,发生故障能及时告警:对重要对象进行监控,能定位到问题即可:不面面俱到,增加负担及复杂度.? 平台可用性:监控平台本身也可能存在故障的风险,因此,需要建立起一套可用性保证机制.一是在硬件层面保证部分硬件失效时,监控服务不受影响:二是万一系统崩溃,能够重建平台并进行数据恢复.? 信息安全性:网络隔离及用户授权. 方案设计 ? 监控架构监控分服务器端及被监控端,其中服务器端独立部署,而被监控端