最近一段时间由于服务器响应有些异常,所以花了半天做了一个简单实时监控页面。如下图
基本原理如下:
1、使用Filter拦截请求,采集服务器响应数据。
若是要收集响应状态码注意构造新的HttpServletResponse
package com.cmgame.ecms.statistic
import javax.servlet.http.HttpServletResponseWrapper
import javax.servlet.http.HttpServletResponse
/**
* 功能描述
* @author huzl
* @version 0.0.1, 12-7-30 下午3:11
*/
class StatusExposingServletResponse extends HttpServletResponseWrapper {
private Integer status = SC_OK;;
public Integer getStatus() {
return status
}
def StatusExposingServletResponse(HttpServletResponse response) {
super(response);
}
@Override
void sendError(int sc, String msg) {
super.sendError(sc, msg)
status = sc;
}
@Override
void sendError(int sc) {
super.sendError(sc)
status = sc;
}
@Override
void sendRedirect(String location) {
super.sendRedirect(location)
status = SC_MOVED_TEMPORARILY;
}
@Override
void setStatus(int sc) {
super.setStatus(sc)
status = sc;
}
@Override
void setStatus(int sc, String sm) {
super.setStatus(sc, sm)
status = sc;
}
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain){
long startTime = System.currentTimeMillis();
StatusExposingServletResponse response = new StatusExposingServletResponse(servletResponse);
Throwable exception = null;
try {
filterChain.doFilter(servletRequest,response)
} catch (Throwable e) {
exception = e;
throw e;
}finally{
statisticResult.completeRequest(servletRequest,response,exception,startTime);
}
}
若只统计错误状态码则区分Response Code是否大于400,小于400的都是正确响应
如200(OK),206(断点续传),301(永久重定向),302(临时重定向),304(内容未变),大于等于400的状态都是错误响应,计算响应速度区间和平均响应时间的代码我就不贴了
2、定时程序或线程把数据入库或保存到内存中。尽量不要使用java内嵌数据库如hsqldb,H2等,因为这些内存数据库运行时会把所有数据加到内存中,不太适合保存数据采集结果
3、使用Highcharts绘制监控页面
可以参照官网例子
http://www.highcharts.com/demo/dynamic-update,
var charts = new Array();
var serverCount = 6;
var lastTimes = new Array();
var max = ${params.int("max")?:120};
$(document).ready(function() {
Highcharts.setOptions({
global: {
useUTC: false
}
});
for (var i = 0; i < serverCount; i++) {
charts[i] = new Highcharts.Chart({
chart: {
renderTo: 'container' + i,
type: 'spline',
events: {
load: function() {
// set up the updating of the chart each second
var series = this.series;
var serverIndex = i;
lastTimes[serverIndex] = 0;
var loadData = function() {
$.getJSON("http://${request.serverName}:${request.serverPort}${request.contextPath}/toolkits/queryStatistics.gsp", {"lasTime":lastTimes[serverIndex],"proxy":true,"index":serverIndex,"max":max}, function(data) {
for (var k = 0; k < series.length; k++) {
for (var j = 0; j < data[k].length; j++) {
var point = data[k][j];
var isShift = series[k].data.length >= max;
console.log("series " + k + ".data.length=" + series[k].data.length);
var lastTime = 0;
if (series[k].data.length > 0)
lastTime = series[k].data[series[k].data.length - 1].x;
if (point[0] > lastTime)
series[k].addPoint([point[0],point[1]], true, isShift);
lastTimes[serverIndex] = point[0];
}
}
})
};
loadData();
setInterval(loadData, 60000);
}
}
},
title: {
text: '访问量实时监控'
},
xAxis: [
{
type: 'datetime',
tickPixelInterval: 120
}
],
yAxis: [
{
title: {
text: '总请求/分钟',
style: {
color: '#3E576F'
}
}
},
{
title: {
text: '平均响应时间',
style: {
color: '#00AA00'
}
},opposite:true
}
],
plotOptions: {
spline: {
marker:{
enabled: false,
states: {
hover: {
enabled: true,
symbol: 'circle',
radius: 5,
lineWidth: 1
}
}
}
}
},
tooltip: {
formatter: function() {
return '<b>' + this.series.name + '</b><br/>' +
Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
Highcharts.numberFormat(this.y, 2);
}
},
legend: {
enabled: true
},
exporting: {
enabled: false
},
series: [
{
name: '总请求数',
data: []
},
{
name: '错误请求数',
data: []
},
{
name: '平均响应时间',
yAxis:1,
data: []
}
]
});
}
})
需要注意的是:
1、在series的load事件中使用ajax定时加载数据,需要控制当前chart中的Point数据量,
series.addPoint(point, true, isShift);
当series中Point数量超过指定值,设定isShift为true,就可以移除第一个Point,防止浏览器内存占用太大无响应
2、ajax请求时只请求最新采集数据,所以每次加载采集数据后把最后时间保留下来,ajax请求时把当前chart中最后时间带上,获取最新数据
如果每秒采集一下数据并保存到数据库,可以扩充一下功能实现BI的数据挖掘和各维度的钻取该也不能。但由于是浏览器使用svg技术绘制曲线,采集的点太多时初次显示还是比较慢。
- 大小: 71.1 KB
- 大小: 102.8 KB
分享到:
相关推荐
Highcharts是一款强大的JavaScript图表库,用于在Web页面上创建各种互动图表,如折线图、柱状图、饼图等。...同时,通过动态加载数据,可以实现图表数据的实时更新,适用于各种数据分析和监控的场景。
这种架构在实时监控、数据分析、仪表盘等场景下非常常见,因为它可以实现实时刷新的图表,用户无需手动刷新页面即可看到最新的数据变化。 总结来说,这个例子涉及到的关键知识点有: 1. Highcharts:JavaScript...
要实现"实时显示highcharts曲线图,读取本地txt文件",首先需要对Highcharts的基本概念和API有深入理解。Highcharts的核心是配置对象,通过设置这个对象的各种属性,我们可以定制图表的样式、数据、交互行为等。例如...
本篇将详细介绍如何利用Highcharts结合MySQL数据库,实现在Web应用中动态生成折线图。 首先,我们需要了解Highcharts的基本使用。Highcharts是一个轻量级的图表库,它提供了丰富的API和配置选项,可以自定义图表...
在这个实例中,我们将关注如何使用Highcharts创建动态曲线图,并结合Java Native Access (JNA)库来实时监控CPU的使用率。 动态曲线图是一种能够实时更新数据的图表,常用于展示随时间变化的趋势。在Highcharts中,...
Highcharts还支持动态更新数据,可以通过调用`series.addPoint()`或`chart.update()`方法来实现图表数据的实时变化,这对于监控类应用非常实用。此外,Highcharts还提供了触摸事件和响应式设计的支持,确保在移动...
2. 动态更新的曲线图:演示了如何实现实时数据更新,这对于监控系统或实时数据分析至关重要。 3. 时间轴缩放和滚动:利用Highstock的功能,用户可以查看不同时间段的数据细节。 4. 雷达图和极坐标图:这些特殊的曲线...
曲线图是直线图的一种变体,它使用平滑的曲线来连接数据点,更适合用于展示连续变化的趋势。 ##### 3.4 饼状图 饼状图用于表示各部分占总体的比例关系。Highcharts 的饼状图支持多种样式和动画效果,使得图表更具...
在IT行业中,实时数据可视化是数据分析和展示的重要环节,特别是在Web应用中。...通过结合这些技术,我们可以实现在Web应用中展示实时动态曲线图的功能,这对于监控系统状态、数据分析等场景非常有用。
1. **动态数据更新**:这些插件允许实时更新图表,以反映后台数据的变化,这对于监控系统或者数据分析场景非常有用。 2. **多种类型**:不仅限于曲线图,许多插件还支持线性图、柱状图等多种图表类型,满足多样化的...
总结,动态加载曲线图是现代数据可视化的关键技术之一,它结合了前端技术与数据处理方法,实现了实时、高效的动态数据展示。通过选择合适的JavaScript库和通信协议,我们可以轻松构建出满足各种需求的动态加载曲线图...
Highcharts是一款功能强大的纯JavaScript图表库,它允许开发者通过简单的JSON数据来创建各种直观、美观的图表,包括柱状图、曲线图、饼图等多种类型。这个插件无需依赖任何其他重型库,如jQuery,因此它能保持轻量级...
在ASP中生成曲线图,主要是为了在网页上展示数据,这种图表通常用于数据分析、监控或者报告,使用户能够直观地理解数据的变化趋势。 生成曲线图的关键在于使用合适的图表库或组件。在ASP环境下,可以借助JavaScript...
JavaScript中的曲线图可以实时更新,非常适合动态监控数据变化。例如,使用D3.js库,我们可以定义数据数组,通过绑定数据到SVG元素上,然后使用scale函数进行数据映射,最后利用path元素和line函数生成曲线路径。 2...
本文将深入探讨jQuery图表控件,特别是基于jQuery实现的柱状图、曲线图、饼状图和仪表盘,这些都是数据可视化中不可或缺的元素。 柱状图是一种常用的数据表示方式,它通过矩形的长度来展示各分类的数值大小。在...
总之,"Ping值做曲线图"项目是一个结合了网络诊断、数据分析和可视化技术的实用工具,对于监控网络状态、优化网络性能有着重要的价值。通过这种方式,我们可以更加直观地理解网络延迟的情况,并据此做出相应的调整和...
Highcharts是一款强大的JavaScript图表库,用于在Web页面上创建各种数据可视化效果,如曲线区、饼状图和柱状图。版本2.1.4是该库的一个早期版本,但仍然具有很多实用功能。让我们深入了解一下Highcharts的核心特性和...
### Highcharts——强大的jQuery图表制作功能 #### 一、Highcharts简介 Highcharts是一个非常流行的...通过简单的定制和配置,Highcharts可以满足不同场景下的需求,无论是数据可视化项目还是实时监控系统。
- **教育**:在教学环境中,教师可以使用Highcharts帮助学生理解数学概念,如函数曲线、概率分布等。 4. **进阶功能** - **高亮和数据列**:可以设置特定数据点的高亮,或通过数据列突出特定时间段的数据。 - **...
通过jQuery,我们可以动态地更新数据,实现动态曲线图,这对于实时监控数据变化非常有用。 在描述中提到了“双曲线”,这可能指的是在同一图表中绘制两条曲线。在Chart.js中,可以通过添加额外的数据系列来实现。每...