OneAPM 体验,以及开发过程中的小知识
发布于 9 年前 作者 dingyong666 5024 次浏览 最后一次编辑是 8 年前 来自 分享

对于新手来说比较实用!! 写个网站 当然必不可少的当然要用的 xml ,放一些 网站配置什么的 信息,当然也可以直接 用 json。json的话就很简单了,这里说xml ,想要 xml 解析 与创建 就用模块吧。 npm 安装 xml2js ----- 创建一个util var fs = require(‘fs’), xml2js = require(‘xml2js’); // obj 是要把某个对象 ,保存到 toPath的 地址 如 xxxx.xml 不用担心 < >这类 会自动转换,很是方便 exports.buildXml= function (obj,toPath) { var builder = new xml2js.Builder(); var xml = builder.buildObject(obj); fs.writeFile(toPath,xml, function (err) { if (err) throw err; }); }; //这个 很明显了 从 xmlPath 读 xml文件 ,callback回调 exports.buildJson= function (xmlPath,callback) { var parseString = xml2js.parseString; fs.readFile(xmlPath, function (err,data) { var xml = data.toString(‘utf-8’, 0, data.length); parseString(xml, function (err, result) { callback(result); }); }); }; xml的 读写 就算 结束了,想干啥 就干啥

下面 继续 java 里 比较常用 .propertys 文件 ,但是 我感觉确实 恶心。国际化 根本没必要。但是 可以 用这个 写个 对照表。比如 api 返回 code 1000代表成功,就可以 在 .propertys 里面定义 ,维护起来也很方便。如何 读 呢? var fs = require(‘fs’); exports.parse = function (uri, encoding) { try { var encoding = encoding == null ? ‘UTF-8’ : encoding; var content = fs.readFileSync(uri, encoding); var regexjing = /\s*(#+)/; var regexkong = /\s*=\s*/; var keyvalue = {}; var arr_case = null; var regexline = /.+/g; while (arr_case = regexline.exec(content)) { if (!regexjing.test(arr_case)) { keyvalue[arr_case.toString().split(regexkong)[0]] = arr_case.toString().split(regexkong)[1]; } } } catch (e) { return null; } return keyvalue; }; 很明显 能全部读出来 ,当然不能 每次 都调用 有个 io 会很慢!项目启动的 时候 调用 一次 ,生成一个 (全局的 常量)的 对象,在 用到的时候 使用 对象ok 。

最常用的 不能没有 日志记录吧,记录点用户操作日志啥的 。 npm install log4js ~~~~等待安装完成 创建一个 tools工具类 var log4js = require(‘log4js’); // logger configure log4js.configure({ appenders: [ { type: ‘console’ }, { type: ‘dateFile’, filename: ‘…/logs/log’, //这个是我的目录 ,你们随意。 pattern: “_yyyy-MM-dd”,//日志文件的 格式 maxLogSize: 1024, alwaysIncludePattern: false, backups: 4, category: ‘trace’ } ], replaceConsole: true }); module.exports = log4js.getLogger(“trace”); //然后就是 达到什么级别 会记录 trace及以上都会记录 //og4js的输出级别6个: trace, debug, info, warn, error, fatal 用的时候 var log4js = require(’…/tools/logger.js’);//改成上面你自己的路径 log4js.fatal(‘数据库连接异常 - xxx.js -45’); 在需要 记录的 地方 写上这个 即可 //如 log4js.info()…等等

然后 再就是 我以前自己 遇到的问题 mysql 模块 就是 这一段

Use pool directly.

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password        : 'secret'
});

pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].solution);
});

mysql 连接池 网上基本上也是这样的 ,这样的 写法只适合 运行一次 就是一个 js demo, 用在web上就不好使了,当初 我也没看就复制了 。后来 发现 ,每次 都会 createPool 会创建 n多 连接池。。。。。。不细心的 后果 所有 获取池子的时候 确保是 单例。

**最后 介绍 一个node.js程序 监控 oneapm 官方网址 :www.oneapm.com ** OneAPM是一家为企业和开发者提供APM解决方案的服务商,支持Java、.Net、PHP、Ruby、Python、Node.js、iOS、安卓、安卓NDK、HTML5等语言,用户整个应用程序这种环境的端到端的性能转化,支持用户体验管理,以及业务交易性能的管理。 安装: npm install oneapm 到官网 注册后登陆选择node.js ,即可看到key ,然后模块下的oneapm.js 复制到项目根目录打开填上刚刚的key,最后在网站最上面,即app.js 最上面require(‘oneapm’) 完成了

这个 是 我的项目,在访问几次过后的2分钟内就会产生数据。到 oneapm 官网 后台 查看 图片1.png

图片4.png 后台可以查看网站的响应时间,web事务跟踪。服务器的吞吐量,让你可以很容易的看到网站的隐藏数据,除了可以跟踪web之外, oneapm还是支持各种数据库的监控。如:redis、mysql、mongodb等等常用数据库,完美监控数据库的吞吐量和响应时间。 图片3.png

拓扑功能更是能够清晰的列出程序的运行轨迹,看出网站的结构,很心仪的功能。 图片5.png

通过这下面图可以看出,/api/public/ip 这个web事务耗时比较长,通过oneapm的慢事务跟踪可以查看详情,明显的可以看到问题所在,有一个外部HTTP调用。然后单击HTTP的云朵,会列出 http请求的地址以及相应时间。 图片6.png 每次调用的话确实是有点耗时,在经过代码修改过后,通过redis 缓存几分钟的数据。我们再来看oneapm的 表现。 图片7.png

Oneapm的图表很清晰的显示了出来 redis中间缓存时间以及http外部调用的时间。

图片8.png 这幅图可以查看报错信息,因为我的项目代码不出错(^__^) 嘻嘻…… So 看不到啦!

Oneapm还提供了事务报表统计,还能下载到本地。很实用的功能! 图片9.png

道听途说不如自己去试试 !!!童叟无欺。

4 回复

感谢你的分享 (づ ̄ 3 ̄)づ

我部署过了,试了试还分析的挺不错的。 还有T恤衫也收到了。

刚才试了下,有点意思。但是想问下,这个东西一直挂上去会不会有性能问题,或者安全问题。

@Hanggi 经过我们的严格测试,Agent 对自身应用的影响很小,不会超过2%。目前积木盒子,中国电信,去哪儿这种规模的公司也正在使用我们的产品,你可以放心。关于安全的问题,Agent 只抓取性能数据,数据均通过加密传输。我们不抓取应用数据,只抓取到方法类。

回到顶部