将日志信息(系统性能参数)记录到MongoDB --- 2:写入记录
2013-04-06 20:26
573 查看
到现在我们已经安装好了MongoDB,前面也得到了虚拟机的性能参数,现在我们要把这些参数写入DB。为了以后便于查询 ,我们需要把各个参数区分开来(之前是整个是一个字符串),而这一步可以在server端进行也可以在client端进行,为了减轻server的负担,还是选择在client端进行。为了方便server 端的插入,我们就在client端用hash_map存储分开后的信息,然后将hash_map传过来写入DB,注意对象在函数间传的是引用,所以用到clone()。
还需要注意的是之前socket传递的是字符串,这里需要传递的是对象(hash_map)。
在SystemMonitor里面加一个得到hash_map的函数:
在client端送hash_map:
在server端收has_map:
MongoDB部分:
一些用于设置的就省略了。
还需要注意的是之前socket传递的是字符串,这里需要传递的是对象(hash_map)。
在SystemMonitor里面加一个得到hash_map的函数:
@SuppressWarnings("unchecked") public static HashMap<String,String> getInfoHashMap() throws Exception{ HashMap<String,String> info_map = new HashMap<String,String>(); String total_info = getTotalInfo(); info_map.put(InfoMapKey.TOTAL, total_info); info_map.put(InfoMapKey.IP, getIP()); String[] lines = total_info.split("\n"); //1 int part_num = 0; int line_num = 0; String[] parts = lines[line_num++].split(","); String[] s = parts[part_num++].split("up"); String[] s2 = s[0].split(" "); info_map.put(InfoMapKey.REPORT_TIME, s2[2]); if(s[1].contains("day")) { s2 = s[1].split("day"); info_map.put(InfoMapKey.EXIST_TIME, s2[0].trim() + ":" + parts[part_num++].trim() ); } else info_map.put(InfoMapKey.EXIST_TIME, "0:" + s[1].trim()); s = parts[part_num++].split("u"); info_map.put(InfoMapKey.USER_NUM, s[0].trim()); s = parts[part_num++].split(":"); info_map.put(InfoMapKey.LOAD_AVERAGE_1, s[1].trim()); info_map.put(InfoMapKey.LOAD_AVERAGE_5, parts[part_num++].trim()); info_map.put(InfoMapKey.LOAD_AVERAGE_15, parts[part_num++].trim()); //2 part_num = 0; parts = lines[line_num++].split(","); s = parts[part_num++].split("total"); s2 = s[0].split(":"); info_map.put(InfoMapKey.TASK_TOTAL, s2[1].trim()); s = parts[part_num++].split("running"); info_map.put(InfoMapKey.TASK_RUNNING, s[0].trim()); s = parts[part_num++].split("sleeping"); info_map.put(InfoMapKey.TASK_SLEEPING, s[0].trim()); s = parts[part_num++].split("stopped"); info_map.put(InfoMapKey.TASK_STOPPED, s[0].trim()); s = parts[part_num++].split("zombie"); info_map.put(InfoMapKey.TASK_ZOMBIE, s[0].trim()); //3 part_num = 0; parts = lines[line_num++].split(","); s = parts[part_num++].split("%"); s2 = s[0].split(":"); info_map.put(InfoMapKey.CPU_US, s2[1].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_SY, s[0].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_NI, s[0].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_ID, s[0].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_WA, s[0].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_HI, s[0].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_SI, s[0].trim()); s = parts[part_num++].split("%"); info_map.put(InfoMapKey.CPU_ST, s[0].trim()); //4 part_num = 0; parts = lines[line_num++].split(","); s = parts[part_num++].split(":"); s2 = s[1].split("k"); info_map.put(InfoMapKey.MEM_TOTAL, s2[0].trim()); s = parts[part_num++].split("k"); info_map.put(InfoMapKey.MEM_USED, s[0].trim()); s = parts[part_num++].split("k"); info_map.put(InfoMapKey.MEM_FREE, s[0].trim()); s = parts[part_num++].split("k"); info_map.put(InfoMapKey.MEM_BUFFER, s[0].trim()); //5 part_num = 0; parts = lines[line_num++].split(","); s = parts[part_num++].split(":"); s2 = s[1].split("k"); info_map.put(InfoMapKey.SWAP_TOTAL, s2[0].trim()); s = parts[part_num++].split("k"); info_map.put(InfoMapKey.SWAP_USED, s[0].trim()); s = parts[part_num++].split("k"); info_map.put(InfoMapKey.SWAP_FREE, s[0].trim()); s = parts[part_num++].split("k"); info_map.put(InfoMapKey.SWAP_CACHED, s[0].trim()); return (HashMap<String, String>) info_map.clone(); }
在client端送hash_map:
public class MClient { public static void main(String[] args) throws Exception { int count = 0; Socket socket = new Socket(SocketSetting.SERVER_IP, SocketSetting.SERVER_PORT); ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream()); while (true) { // HashFunction.printMap(MySystemMonitor.getInfoHashMap()); os.writeObject(MySystemMonitor.getInfoHashMap()); os.flush(); TimeUnit.MINUTES.sleep(1); if(count ++ > 10) break; } socket.close(); } }
在server端收has_map:
private static void invoke(final Socket client) throws IOException { new Thread(new Runnable() { public void run() { ObjectInputStream in = null; try { MongoClient mongoClient = null; mongoClient = new MongoClient(); SysInfoRecord info_record = new SysInfoRecord(mongoClient); in = new ObjectInputStream(new BufferedInputStream(client.getInputStream())); while (true) { Object obj = in.readObject(); @SuppressWarnings("unchecked") HashMap<String,String> info_map = (HashMap<String,String>)obj; // HashFunction.printMap(info_map); info_record.insertByMap(info_map); } } catch (IOException ex) { ex.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block //e.printStackTrace(); } finally { try { in.close(); } catch (Exception e) { } try { client.close(); } catch (Exception e) { } } } }).start(); }
MongoDB部分:
public class SysInfoRecord { String db_name = DbSetting.SYS_INFO_DB; String coll_name = DbSetting.SYS_INFO_RECORD; private DBCollection coll; public SysInfoRecord(MongoClient mongoClient){ DB db = mongoClient.getDB(db_name); this.coll = db.getCollection(coll_name); } public boolean insertByMap(HashMap<String,String> map){ BasicDBObject info_record = new BasicDBObject(InfoMapKey.IP, map.get(InfoMapKey.IP)). append(InfoMapKey.REPORT_TIME, map.get(InfoMapKey.REPORT_TIME)). append(InfoMapKey.EXIST_TIME, map.get(InfoMapKey.EXIST_TIME)). append(InfoMapKey.USER_NUM, Integer.parseInt(map.get(InfoMapKey.USER_NUM))). append(InfoMapKey.LOAD_AVERAGE, new BasicDBObject("1 min", Float.parseFloat(map.get(InfoMapKey.LOAD_AVERAGE_1))). append("5 min",Float.parseFloat(map.get(InfoMapKey.LOAD_AVERAGE_5))). append("15 min",Float.parseFloat(map.get(InfoMapKey.LOAD_AVERAGE_15)))). append(InfoMapKey.TASK, new BasicDBObject("total", Integer.parseInt(map.get(InfoMapKey.TASK_TOTAL))). append("running",Integer.parseInt(map.get(InfoMapKey.TASK_RUNNING))). append("sleeping",Integer.parseInt(map.get(InfoMapKey.TASK_SLEEPING))). append("stopped",Integer.parseInt(map.get(InfoMapKey.TASK_STOPPED))). append("zombie",Integer.parseInt(map.get(InfoMapKey.TASK_ZOMBIE)))). append(InfoMapKey.CPU, new BasicDBObject("us", Float.parseFloat(map.get(InfoMapKey.CPU_US))). append("sy",Float.parseFloat(map.get(InfoMapKey.CPU_SY))). append("ni",Float.parseFloat(map.get(InfoMapKey.CPU_NI))). append("id",Float.parseFloat(map.get(InfoMapKey.CPU_ID))). append("wa",Float.parseFloat(map.get(InfoMapKey.CPU_WA))). append("hi",Float.parseFloat(map.get(InfoMapKey.CPU_HI))). append("si",Float.parseFloat(map.get(InfoMapKey.CPU_SI))). append("st",Float.parseFloat(map.get(InfoMapKey.CPU_ST)))). append(InfoMapKey.MEM, new BasicDBObject("total", Integer.parseInt(map.get(InfoMapKey.MEM_TOTAL))). append("used",Integer.parseInt(map.get(InfoMapKey.MEM_USED))). append("free",Integer.parseInt(map.get(InfoMapKey.MEM_FREE))). append("buffer",Integer.parseInt(map.get(InfoMapKey.MEM_BUFFER)))). append(InfoMapKey.SWAP, new BasicDBObject("total", Integer.parseInt(map.get(InfoMapKey.SWAP_TOTAL))). append("used",Integer.parseInt(map.get(InfoMapKey.SWAP_USED))). append("free",Integer.parseInt(map.get(InfoMapKey.SWAP_FREE))). append("cached",Integer.parseInt(map.get(InfoMapKey.SWAP_CACHED)))); coll.insert(info_record); return true; } }
一些用于设置的就省略了。
相关文章推荐
- 将日志信息(系统性能参数)记录到MongoDB --- 1:准备工作
- 用ASP.NET将网页错误信息写入系统日志
- slf4j中的Logger 使用占位符{} 来传入参数记录日志信息
- 利用Log4net记录系统日志信息(支持6种数据库)
- 用ASP.NET将网页错误信息写入系统日志
- Nginx 模块开发之日志模块---实时记录http请求信息写入flume
- syslog 系统日志服务 --记录daemon出错信息
- [置顶] 使用拦截器获取请求参数信息并写入日志
- linux系统日志输出,记录用户登入信息以及登入ip,登入操作记录等
- 用Log4Net来记录系统的日志信息
- postgresql中参数logging_collector对数据库系统启动日志和操作日志信息目的地的影响
- 用ASP.NET将网页错误信息写入系统日志
- 显示指定的错误页面,同时把错误信息写入系统日志文件
- C#创建创建文本文件写入读取,可以用来做系统日志或程序操作日志或者错误记录
- 用ASP.NET将网页错误信息写入系统日志----简单
- 用ASP.NET将网页错误信息写入系统日志
- 用ASP.NET将网页错误信息写入系统日志
- c语言库函数syslog--将信息记录至系统日志文件
- sql:存储过程,事务,out参数 ,可以记录错误信息,系统变量的集合