- 浏览: 90372 次
- 性别:
- 来自: 北京
最新评论
-
xiangzihehao:
非常感谢~
JFreechart V1.0.9 Guide(英文版) -
minn84:
...
一个老程序员的忠告:不要一辈子靠技术生存 -
小斌江:
非常非常非常的感谢楼主。。。
JFreechart V1.0.9 Guide(英文版) -
yutian8888:
谢谢你老兄!我找了很久,在你这里得到的解决!!
Java web 根据url下载文件IE出错,FF正常 -
liuwenbo200285:
学习了,面试的时候经常问这个问题,估计有的面试官也不知道如果不 ...
StringBuilder StringBuffer and "+"
这是一个商用的项目,是给XX证券用的.其实现的功能是,将各个服务器上的日志文件下载(通过FTP或SFTP的方式),然后按照给定的日志格式分析并导入到DB中存储起来,然后再用WEB界面实现一个和用户交互的查询.
日志一天只要导入一次就可以的,从该平台的稳定性来考虑,用到了数据库的存储过程,用程序也是可以实现的,不过用数据库更稳定一些.所以该平台采用了sqlserver2005的存储过程.
WEB界面展示的数据是用图形显示的,所以引用了大名鼎鼎的jfreechart来作图表展现.
1 日志文件的存储格式(采用CSV无列头,以comma分隔,\n\r结束为一条日志记录的方式)
2 日志文件的下载(将ftp或sftp的参数配置在xml文件),然后写成定时任务(由于日志是按天生成的,所以定时任务也是一天执行一次)
3 日志下载完成以后就是解析了,然后就将数据批量导入到数据库中存储起来.
4 写数据库存储过程,将原始数据处理
5 写web界面的查询,数据显示以图表展现(JFreechart)
以上就是分的模块.
日志文件格式还包括日志文件名,但为了灵活使用,我们将日志文件名在配置文件中实现,假设我们有三种格式的日志文件要下载--下载日志,交易日志,行情日志.然后我们可以在配置文件中配置日志的名字,以及日志名字中的日期的格式,以及日志文件内容的字段,见一代码片段:
我详细解释一下以上配置文件中每一个细节:
task name是给任务取的名字,用来区分多个任务的,csvreader是读取该文件的类,executetime是该定时任务执行的时间
sql这段是批量导入数据库时用到的insert sql语句,maxCommitNumber是批量导入时的最大commit数,table中的csvindex就是指明该字段在表中的位置.遇到日期这样的我们要规定一下日期的表现形式,如yyyyMMddHHmmss.这个格式其实是指明了日志文件中该字段的日期表现形式,而导入数据库时用的是timestamp的形式.这里要注意的是该表的字段和下面table中的都是一致的,这里所有的顺序还和日志文件中内容相一致,这就实现了最大化的定制性(customize),假设另一个日志文件内容为downloadtime,ipaddress,mobilefac,filename,哪我们就可以将以上内容分别替换为
datasource就是配置的ftp或sftp的连接,端口及路径的参数了,如果有多个ftp下载,照上面一datasource copy一个,并列即可,我们的处理xml的xmlManager会将多个ftp下载源读出来的.
filepath就是将远程日志下载以后存放的路径,如果有多个ftp下载我们可以用ftp的ip作为文件名的前缀然后再加文件名来区分不同ftp来源的日志文件.
看,就这一小段配置文件就把我们上面所说的定时任务,日志文件格式,数据库字段,批量导入时的最大commit数全部解决了.
这里面我们平台在运行过程中发生的问题就是多线程读取日志文件到库中时,产生了一些问题,后来更正了.由于每个日志文件的规则不同,所以我们实现的csvreader就不同,所以我们提供csvreader,具体实现由您自己扩展.该平台中由于只有交易日志和其他两个日志规则不同,所以我们只实现了两个reader.
如有疑问,请在后面留言.
下面我们来看定时任务.
start里的遍历就是查找有几个task,如果有多个就会循环运行,下篇文章我们来讲ImportTask,即批导入的任务
日志一天只要导入一次就可以的,从该平台的稳定性来考虑,用到了数据库的存储过程,用程序也是可以实现的,不过用数据库更稳定一些.所以该平台采用了sqlserver2005的存储过程.
WEB界面展示的数据是用图形显示的,所以引用了大名鼎鼎的jfreechart来作图表展现.
1 日志文件的存储格式(采用CSV无列头,以comma分隔,\n\r结束为一条日志记录的方式)
2 日志文件的下载(将ftp或sftp的参数配置在xml文件),然后写成定时任务(由于日志是按天生成的,所以定时任务也是一天执行一次)
3 日志下载完成以后就是解析了,然后就将数据批量导入到数据库中存储起来.
4 写数据库存储过程,将原始数据处理
5 写web界面的查询,数据显示以图表展现(JFreechart)
以上就是分的模块.
日志文件格式还包括日志文件名,但为了灵活使用,我们将日志文件名在配置文件中实现,假设我们有三种格式的日志文件要下载--下载日志,交易日志,行情日志.然后我们可以在配置文件中配置日志的名字,以及日志名字中的日期的格式,以及日志文件内容的字段,见一代码片段:
<?xml version="1.0" encoding="gbk"?> <dataconfig> <task name="quote" csvReader="这里填写该任务的读取实现类" excutetime="02:00:00"> <!-- 批量导入数据库的SQL语句及一次批量插入最多的记录条数--> <sql insert="insert into quotelogs (visittime,ipaddress,pageviews) values(?,?,?)" maxCommitNumber="100"/> <table name="quotelogs"> <column name="visittime" type="datetime" format="yyyyMMdd HHmmss" csvindex="0" /> <column name="ipaddress" type="string" csvindex="1" /> <column name="pageviews" type="int" csvindex="2" /> </table> <!-- fileMaxSize是以M为单位的,此处200是指200M即 200*1024*1024 --> <datasource server="192.168.10.21" port="21" username="ftptest" password="ftptest!@#" fileMaxSize="200" fileName="accessquote.log.{yyyyMMdd}" initPath="/home/ftptest/" /> <!-- 存放下载日志的路径--> <filePath path="F:/Logs/" /> </task> <task>......</task> <task>......</task> </dataconfig>
我详细解释一下以上配置文件中每一个细节:
task name是给任务取的名字,用来区分多个任务的,csvreader是读取该文件的类,executetime是该定时任务执行的时间
sql这段是批量导入数据库时用到的insert sql语句,maxCommitNumber是批量导入时的最大commit数,table中的csvindex就是指明该字段在表中的位置.遇到日期这样的我们要规定一下日期的表现形式,如yyyyMMddHHmmss.这个格式其实是指明了日志文件中该字段的日期表现形式,而导入数据库时用的是timestamp的形式.这里要注意的是该表的字段和下面table中的都是一致的,这里所有的顺序还和日志文件中内容相一致,这就实现了最大化的定制性(customize),假设另一个日志文件内容为downloadtime,ipaddress,mobilefac,filename,哪我们就可以将以上内容分别替换为
<sql insert="insert into downloadlogs (downloadtime,ipaddress,mobilefac,filename) values (?,?,?,?)" maxCommitNumber="100" /> <table name="downloadlogs"> <column name="downloadtime" type="datetime" format="yyyyMMddHHmmss" csvindex="0" /> <column name="ipaddress" type="string" csvindex="1" /> <column name="mobilefac" type="string" csvindex="2" /> <column name="filename" type="string" csvindex="3" /> </table>
datasource就是配置的ftp或sftp的连接,端口及路径的参数了,如果有多个ftp下载,照上面一datasource copy一个,并列即可,我们的处理xml的xmlManager会将多个ftp下载源读出来的.
filepath就是将远程日志下载以后存放的路径,如果有多个ftp下载我们可以用ftp的ip作为文件名的前缀然后再加文件名来区分不同ftp来源的日志文件.
看,就这一小段配置文件就把我们上面所说的定时任务,日志文件格式,数据库字段,批量导入时的最大commit数全部解决了.
这里面我们平台在运行过程中发生的问题就是多线程读取日志文件到库中时,产生了一些问题,后来更正了.由于每个日志文件的规则不同,所以我们实现的csvreader就不同,所以我们提供csvreader,具体实现由您自己扩展.该平台中由于只有交易日志和其他两个日志规则不同,所以我们只实现了两个reader.
如有疑问,请在后面留言.
下面我们来看定时任务.
public class SchedulerEngine { Logger logger = LoggerFactory.getLogger(SchedulerEngine.class); private Document doc; // 定时执行调度类,来定时调度 private ScheduledExecutorService schuledExecutor; // 所有定时任务的Future private Map<String, Future<?>> futureMap = new Hashtable<String, Future<?>>(); /** path配置文件的路径 . */ final static String confpath = "/conf/dataconfig.xml"; public void init() { try { URL url = getClass().getResource(confpath); //URLDecoder.decode不懂的查API FileInputStream fis = new FileInputStream(URLDecoder.decode(url .getFile(), "UTF-8")); byte[] buf = new byte[fis.available()]; fis.read(buf); String strXml = new String(buf, "GBK"); doc = XmlManager.createDomByString(strXml); } catch (Exception e) { logger.error(e.toString(), e); } } public void start() throws Exception { try { schuledExecutor = Executors.newScheduledThreadPool(3); NodeList tnl = XmlManager.queryList("/dataconfig/task", doc); for (int i = 0; i < tnl.getLength(); i++) { Element ele = (Element) tnl.item(i); String name = ele.getAttribute("name"); String schtime = ele.getAttribute("excutetime"); long curTime = System.currentTimeMillis(); DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tmpstr = df.format(new Date(curTime)); String tmpstr2 = tmpstr.substring(0, 11) + schtime; long executeTime = df.parse(tmpstr2).getTime(); long ONEDAY = 24 * 60 * 60 * 1000; // 启动定时task任务 long delay = executeTime - curTime < 0 ? (executeTime - curTime + ONEDAY) : (executeTime - curTime); // delay = 0; // 调度服务监控代码 ImportTask task = new ImportTask(ele); Future<?> future = schuledExecutor.scheduleAtFixedRate(task, delay, ONEDAY, TimeUnit.MILLISECONDS); futureMap.put(name, future); } } catch (Exception ex) { logger.error(ex.toString(), ex); throw new Exception(ex); } } public void reload() throws Exception { stop(); start(); } public void stop() { schuledExecutor.shutdown(); for (Future<?> fu : futureMap.values()) { fu.cancel(true); } futureMap.clear(); } }
start里的遍历就是查找有几个task,如果有多个就会循环运行,下篇文章我们来讲ImportTask,即批导入的任务
发表评论
-
last year log statistics source code download
2009-07-31 16:48 841只提供两天下载,下周一就失效!! -
学习Apache Mina
2009-05-12 14:50 1700Mina的几个重要接口: I ... -
JFreechart V1.0.9 Guide(英文版)
2008-12-31 09:48 3178本人在0day上发现了JFreechart V1.0.9的Gu ... -
Java web 根据url下载文件IE出错,FF正常
2008-12-26 12:39 1866本人在web开发中,导出csv文件时遇到这一问题的,如下 当用 ... -
日志统计平台3之Jfreechart显示篇
2008-12-19 16:15 1500jfreechart功能十分强大了,在我们平台中用到了柱图和曲 ... -
日志统计平台2
2008-12-19 15:41 1327ImportTask里面我们就实现了ftp下载日志文件,然后批 ... -
(随时添加更新)本人code中积累或总结
2008-11-25 09:43 12201 一定要注意资源使用以后要释放,比如数据库的连接,流的使用, ... -
StringBuilder StringBuffer and "+"
2008-10-16 17:20 2010String字符串是Java中最常用的数据结构. " ... -
再用Maven2
2008-09-24 16:35 1563上次用Maven只是别人搭建好的工程,我们使用,今天项目不多, ... -
今天公司培训Scrum有感
2008-09-23 22:24 2577据说Scrum是一种敏捷的灵活的软件管理过程.你可以用它来迭代 ... -
定时执行调度任务
2008-07-21 15:36 2179这里我们用JDK 5.0里的ScheduledExecutor ... -
jdbc 分页
2008-07-20 00:34 2990在网上看了好多的分页程序,有好多hibernate的或是jdb ... -
IntrospectorCleanupListener 简介
2008-05-22 19:12 3437org.springframework.web.util.In ... -
java 读取dbf文件
2008-04-11 13:52 6079先来定义dbf文件的格式,先来定义dbfheader,impo ... -
*.sql的导入与导出
2008-01-24 09:49 947导出:x:\mysql\bin\mysqldump --dat ... -
java程序打开指定的网址
2008-01-24 09:43 15842007-04-19 13:57:42 import j ... -
tomcat5.0.*迁移Tomcat5.5.*的问题:jsp页面显示空白
2008-01-24 09:39 32042007-05-09 12:51:19 本机环境:Win ... -
在Tomcat中添加支持3GP/MP4格式文件的下载
2008-01-24 09:37 13677近日在工作中遇到3gp和mp4格式的文件问题。我用Nokia3 ... -
MySQL常用命令
2008-01-24 09:35 10942007-06-13 20:37:22 1.连接M ... -
Core Java:java除法中保持小数点位数的两种方法
2008-01-24 09:31 6336Method One: (double)(Mat ...
相关推荐
了,因此有可能比其他日志统计工具统计的数字要低,来自公司内部的访问也可以通过IP 过 滤设置过滤掉(暂不提供)。 · 可以生成超过30 个以上的各种图表,并付带有多个3 维统计图.,并且支持导出pdf、excel 等各 式...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学...企业级电商网站的大数据统计分析平台源码+项目说明(以 Spark 框架为核心,对电商网站的日志进行离线和实时分析)...
本次的任务是统计出apache访问日志中访问次数最高的ip地址并统计访问次数。 任务 python apache日志分析 任务知识点 Apache日志 Python apache日志分析注意的地方 知识点: Apache日志 Apache日志 Apache Apache是...
Loggrove是对本地、远程日志文件进行 分页阅读、实时阅读、关键词匹配、统计、监控、钉钉告警、Highcharts图表展示 的 Web 平台服务,并包含 用户认证、LDAP认证、操作审计 等基础服务。
本课程重点构建ELK海量日志分析平台,包括Filebeat多数据源采集、打标记、多行异常信息整合,Logstash数据解析、过滤、清洗,ElasticSearch对数据进行存储、搜索以及分析,Kibana实现大数据分析和数据可视化。...
分析网站的访问情况时我们一般会借助Google/百度/CNZZ等方式嵌入JS做数据统计,但是当网站访问异常或者被攻击时我们需要在后台分析如Nginx的具体日志,而Nginx日志分割/GoAccess/Awstats都是相对简单的单节点解决...
基于JSP的网站流量统计系统在本人两个多月的努力下基本告一段落,本网站界面比较美观、友好,兼容性较好、使用较方便,同时也是一个能提供多样化功能的便捷平台。 在这几个月的时间里,自从零开始学习JSP语言,第一...
煤矿企业日志数据分析系统中,对数据的聚合统计,多数据源的数据关联是各种分析的基础操作。设计基于Hadoop的日志数据分析架构,并针对大数据关联准确率低的现象,将Bloom Filter算法与Map-Reduce处理架构融合。相比于...
TcStatInterface是自定义统计SDK,完全放弃第三方平台,让app拥有自主的数据统计功能,支持页面统计 自定义事件统计 APP启动退出统计,不同渠道统计。客户端SDK功能概述在使用统计服务前,开发者先要拿到本身APPID。...
为您提供Logstash日志管理系统下载,Logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供Web接口用于查询和统计。Logstash现在是ElasticSearch家族...
Perf4j则是通过对自定义监控范围进行日志记录,再经统计分析生成所需性能数据,Perf4j提供了对常用日志工具的扩展以方便与产品集成,它产生的数据可用于生成可视化的性能图表。在实际部署的生产环境能够以较低的风险...
低侵入: 基于日志文件进行统计,无需修改原程序 使用说明 2.1 下载工具包 log_monitor.tar.gz,并解压 2.2 之后进行参数配置,可以拷贝现有的,各个参数说明如下: ...
Serlog是一款好用的服务器日志分析工具,软件回答了一些关键的营销问题, 还包括所有标准统计信息和报告,这些统计信息和报告是您希望从服务器日志分析器得到的:命中、会话、访问者、浏览器、平台、蜘蛛、带宽、...
项目概述 本项目来源于企业级电商网站的大数据统计分析平台, 该平台以 Spark 框架为核心, 对电商网站的日志进行离线和实时分析。 该大数据分析平台对电商网站的各种用户行为( 访问行为、购物行为、广告点击行为等...
webjoker网站访客统计系统运行于php mysql平台,加入统计代码后,可实现网站访问页面、... webjoker网站访问统计系统已经过了多次修正,功能在趋于不断的优化完美中,关于系统的更新日志,请参见压缩包内的官方说明。
5、系统统计功能,通道发送状况,通道图表统计,发送状态统计,用户组发送统计,用户发送统计,用户通道发送统计 6、系统日志,程序错误日志,短信发送服务日志 7、系统设置,菜单管理,平台菜单自定义管理设置,...
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、...
利用真实TB 级数据集对多种 Hadoop 列存储格式及压缩算法进行性能测试,并对比Hive和Impala引擎日志扫描及统计查询效率,选用Gzip压缩的Parquet格式可将日志体积压缩80%,且将Impala查询性能提升至5倍。基于该平台已...
还包括一些用于字数统计和日志文件处理的示例作业。 Vagrant 是 VirtualBox 的前端,允许在任何平台上轻松创建和启动虚拟机。 此处包含的 VagrantFile 将使用 Apache Spark 创建并完全配置 Linux VM。 有关 ...