`
laserdance
  • 浏览: 92517 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

日志统计平台

阅读更多
这是一个商用的项目,是给XX证券用的.其实现的功能是,将各个服务器上的日志文件下载(通过FTP或SFTP的方式),然后按照给定的日志格式分析并导入到DB中存储起来,然后再用WEB界面实现一个和用户交互的查询.
日志一天只要导入一次就可以的,从该平台的稳定性来考虑,用到了数据库的存储过程,用程序也是可以实现的,不过用数据库更稳定一些.所以该平台采用了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,即批导入的任务
3
0
分享到:
评论

相关推荐

    从日志统计到大数据分析.pdf

    在2008年,日志统计平台主要负责收集和处理各种系统的运行日志,这些日志包含了丰富的系统运行状态和用户行为信息。然而,当时的平台存在诸多问题,如需求响应周期长,运维成本高,运行速度慢,这不仅限制了工作效率...

    从日志统计到大数据分析.pptx

    2008年,日志统计平台的出现是这个过程的起点。这些平台主要用于收集和处理来自各种系统的日志数据,以获取运营和性能指标。然而,这样的系统存在一些明显的局限性,比如需求响应周期长,运维成本高,运行速度慢,...

    唯品会日志平台建设

    日志计算平台则涉及对收集到的日志数据进行深度加工和分析,如实时处理、存储和统计等。这部分内容在文档中没有详细的介绍,但可以推测,唯品会的日志计算平台可能包含了数据仓库、数据分析引擎等组件。数据可视化...

    企业级电商网站的大数据统计分析平台源码+项目说明(以 Spark 框架为核心,对电商网站的日志进行离线和实时分析).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学...企业级电商网站的大数据统计分析平台源码+项目说明(以 Spark 框架为核心,对电商网站的日志进行离线和实时分析)...

    java基于spark streaming和kafka,hbase的日志统计分析系统.rar

    在现代大数据处理领域,Java、Kafka、Spark和HBase是四大关键组件,它们共同构建了一个高效、实时的日志统计分析系统。这个系统利用这些工具的特性,实现了从数据采集到处理再到存储的完整流程。 首先,Kafka是...

    唯品会日志平台架构介绍

    ### 唯品会日志平台架构介绍 #### 唯品会简介 唯品会是一家专注于特卖的电商平台,自2012年3月23日在纽约证券交易所上市以来,凭借其独特的商业模式和高效的运营策略,在电商领域取得了显著的成绩,并成为少数实现...

    日志易V2.0入门手册

    通过安装日志易Agent,可以方便地采集本地系统的日志数据,并将其传输到日志易平台进行处理。 2. **rsyslog Agent**:这种方式适用于已经使用rsyslog5.8.0或更高版本的环境。用户需要拥有sudo权限,并通过配置...

    02于俊大规模日志数据平台架构面临的问题与挑战.pdf

    在当前数字化转型深入发展的背景下,企业对于日志数据平台的需求日益增大,尤其是高并发、大规模、多维度的数据处理与分析能力。本资料中提到的“于俊大规模日志数据平台架构面临的问题与挑战”主要涉及到了大规模...

    基于spark streaming和kafka,hbase的日志统计分析系统.zip

    《基于Spark Streaming、Kafka与HBase的日志统计分析系统详解》 在现代大数据处理领域,实时数据分析成为了不可或缺的一部分。为了实现高效的日志统计分析,技术栈通常会结合多个组件,如Spark Streaming、Kafka...

    c#log日志类和日志分析器(源码)

    3. **统计和报告**:生成统计图表和报告,展示日志信息的分布、趋势和异常情况。 4. **报警和通知**:当发现潜在问题或达到预设阈值时,发送报警通知。 5. **日志聚合**:对来自多个源的日志进行整合和分析,以全局...

    云智综合日志审计平台产品白皮书.pdf

    云智综合日志审计平台是针对企业日志审计需求量身打造的解决方案,旨在帮助企业管理者通过日志审计功能来提高安全风险管控能力和满足合规性要求。平台具备高性能日志采集能力、强大的分析功能、多维度日志审计、多样...

    人人网数据服务平台:基于日志分析的数据系统架构

    ### 人人网数据服务平台:基于日志分析的数据系统架构 #### 背景与挑战 在互联网行业,数据成为驱动业务发展的核心力量。人人网,作为中国早期的社交网络服务提供商,面临着海量用户数据的管理和分析挑战。传统的...

    云智综合日志审计平台产品白皮书.docx

    该平台具备高性能日志采集能力,提供了强大的分析功能,能够对大量分散设备的异构日志进行统一管理、集中存储、统计分析和快速查询。 平台特点: 1. 多类型数据采集支持:支持多种网络设备、安全设备、漏扫设备、...

    Web服务器日志统计分析完全解决方案[定义].pdf

    【Web服务器日志统计分析完全解决方案】 Web服务器日志统计分析是互联网服务提供商(ICP)和网站管理员不可或缺的一项工作,旨在了解网站的运行状态、访问量和用户行为。通过对Web服务器日志文件的深入分析,可以...

Global site tag (gtag.js) - Google Analytics