09月26, 2016

数据在手,天下我有

其实这篇文章前几天就想写了,只是最近略忙,导致一再拖延,刚给 @煤老板 庆生回来,忽然想到这个月黑风高的夜晚,在双人床上独自的我何不做点什么呢?对,就写好她吧。


何为数据

常见的莫过于我们天天听到的大数据时代、统计信息、日志系统、数据库、数据分析等,其实我理解万物即是数据。她就在我们身边,小到一个时间节点,大到人生轮回乃至整个宇宙,这就是数据~人们把这些数据信息以某种载体存于世间以让人用来阅读、观看,这就是统计、日志。

这里主要写下最近在处理日志数据、统计信息的一些感触,跟你们的mysql里用户数据没关哈。

由来

1. @小琴的shell启发

因为@小琴常写shell,经过几次全作,发现他的脚本都会把一些错误信息、输出信息记录到Y-m-d.log中,甚至她的crontab脚本的输出都有记录,起初我并不在意这些,甚至对这些很不解,但经过一次出问题->找问题后,我深知保留数据信息的重要性,从价值来说要远远高于硬盘。

2. 某位老大的一句话

工作中某老大提了个需求: 想看某天的某数据情况。

我一想,对啊,本身这些数据我就有,如果我把这些数据以天为单位存储下来,后续想怎么查就怎么查啊,并且瞬间就想到写个配置文件型的抓取生成nodejs架子,使用crontab每小时去执行node run.jsrun.js负责读取配置文件,去抓取对应的数据,存到缓存,并推送到远程服务器。

那么既然我有这些数据了,我就周一、三、五显示饼状图,周二、四、六显示曲线图,当然这些都不是事。

3. 平常日常的一些使用感悟

  • qq在以漫游聊天记录、保留聊天记录来作为vip的诱惑条件 - 至今我还有好几年跟我老婆的聊天记录
  • 支付宝的年度历史账单 - 各种花花花、买买买
  • 微信的【微信公开课PRO版】 - 还记得大家都在晒使用微信的时间点图吗?
  • 各个公司的线上机器监控系统
  • 孩子生日往墙上画个线,看每年的成长
  • ...

其实太多太多了,我们时常通过一些手段来记录这些数据,那么对于程序员的我们在开发时是不是也可以关注下数据呢?那么让我们一起手拉手拥抱数据吧。

拥抱数据

warning信息

合理使用运行环境,在develop环境下善于输出不影响正常使用,但不正确的warning信息,并且信息要提示明确,因为这些信息会帮助你定位问题,比如:

  • 升级带来的参数兼容问题 - 帮助修正参数
  • 不规范形为的警告 - 提高规范化
  • 常见错误的警告 - 合理的输出错误信息
  • ...

error信息

warning信息不同的是,这类信息会直接影响程序的运行,甚至导致程序无法运行,应该给予错误提示,如果可以应该返回对应的http状态码

日志数据格式

日常程序在输出日志数据时,可以考虑使用天级、小时级等命名名称,日志内容要体现时间、类型,比如:

Y-m-d.log

[2016-06-21 18:20:44] [log] 程序启动成功,appid: 1
[2016-06-21 18:20:44] [error] 程序异常退出,错误码: 123
[2016-06-21 18:20:44] [warning] 非法参数: {a: 1}

日志格式借鉴于 thinkjs 输出的日志

这样当有问题时可以以类型、时间去筛选对应的日志数据,快速定位。当然你还可以单独的区分功能文件。

模拟场景

1. bug排行榜

  • 思路: 每天定时从QA测试库里查询buglist,并以团队中人为单位去天级的存储记录数,以这些数据画出bug排行榜,甚至还可以做个bug标签,哪结最容易范、哪些机率小
  • 收益: 激励同事互相PK

2. 用户体验分析

  • 思路: 在页面交互型操作时发送日志,比如停留时间、点击次数、滚动高度、设备型号等
  • 收益: 分析用户数据更加优化用户体验,比如找到用户最佳停留区域、最佳交互方式

当然还有其他的比如项目上线速度统计、项目体积大小统计、项目提交次数统计等,当然具体的需要哪些需求由你自己说了算。


貌似说了很多费话,其实就是一个主题: 数据无价,一定要保留数据,并且注重日志数据的输出。

本文链接:https://xuexb.com/html/log-data.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。