php+mysql日志系统设计
日志系统的作用:
1、了解线上系统的运行状态
2、快速准确定位线上问题
3、发现系统瓶颈
4、预警系统潜在风险
5、挖掘产品最大价值
6、……
设计目标:
1、支持高并发日志写入
2、亿级消息内容存储
3、支持监控报警
4、分布式、高可用
存储选择:
mysql TokuDB+redis
mysql TokuDB是一个支持事务的“新”引擎,有着出色的数据压缩功能。经测试,压缩后的数据只占原数据大小的10%以下。
redis用来做队列,解决日志并发写入的压力。
字段设计:
id 主键
type 日志类型
client_ip 客户端ip
service_ip 服务器ip
site 站点名
file_path 文件路径
name 日志名称
content 日志内容(数组需要json_encode)
cookie 当前的cookie内容(需要json_encode)
url 当前的url
params 当前的url参数(需要json_encode)
create_time 时间
notice 通知方式(对应通知类型的配置文件)
日志类型:
FATAL – The FATAL level designates very severe error events that will presumably lead the application to abort.
ERROR – The ERROR level designates error events that might still allow the application to continue running.
WARN – The WARN level designates potentially harmful situations.
INFO – The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.
DEBUG – The DEBUG Level designates fine-grained informational events that are most useful to debug an application.
对于日志级别的分类,有以下参考:
FATAL — 表示需要立即被处理的系统级错误。当该错误发生时,表示服务已经出现了某种程度的不可用,系统管理员需要立即介入。这属于最严重的日志级别,因此该日志级别必须慎用,如果这种级别的日志经常出现,则该日志也失去了意义。通常情况下,一个进程的生命周期中应该只记录一次FATAL级别的日志,即该进程遇到无法恢复的错误而退出时。当然,如果某个系统的子系统遇到了不可恢复的错误,那该子系统的调用方也可以记入FATAL级别日志,以便通过日志报警提醒系统管理员修复;
ERROR — 该级别的错误也需要马上被处理,但是紧急程度要低于FATAL级别。当ERROR错误发生时,已经影响了用户的正常访问。从该意义上来说,实际上ERROR错误和FATAL错误对用户的影响是相当的。FATAL相当于服务已经挂了,而ERROR相当于好死不如赖活着,然而活着却无法提供正常的服务,只能不断地打印ERROR日志。特别需要注意的是,ERROR和FATAL都属于服务器自己的异常,是需要马上得到人工介入并处理的。而对于用户自己操作不当,如请求参数错误等等,是绝对不应该记为ERROR日志的;
WARN — 该日志表示系统可能出现问题,也可能没有,这种情况如网络的波动等。对于那些目前还不是错误,然而不及时处理也会变为错误的情况,也可以记为WARN日志,例如一个存储系统的磁盘使用量超过阀值,或者系统中某个用户的存储配额快用完等等。对于WARN级别的日志,虽然不需要系统管理员马上处理,也是需要及时查看并处理的。因此此种级别的日志也不应太多,能不打WARN级别的日志,就尽量不要打;
INFO — 该种日志记录系统的正常运行状态,例如某个子系统的初始化,某个请求的成功执行等等。通过查看INFO级别的日志,可以很快地对系统中出现的 WARN,ERROR,FATAL错误进行定位。INFO日志不宜过多,通常情况下,INFO级别的日志应该不大于TRACE日志的10%;
DEBUG — 这两种日志具体的规范应该由项目组自己定义,该级别日志的主要作用是对系统每一步的运行状态进行精确的记录。通过该种日志,可以查看某一个操作每一步的执 行过程,可以准确定位是何种操作,何种参数,何种顺序导致了某种错误的发生。可以保证在不重现错误的情况下,也可以通过DEBUG级别的日志对问题进行诊断。需要注意的是,DEBUG日志也需要规范日志格式,应该保证除了记录日志的开发人员自己外,其他的如运维,测试人员等也可以通过 DEBUG日志来定位问题;
参考文档:
1、Seaslog http://blog.csdn.net/yangzaiqiu1986814/article/details/50728053
2、https://www.zhihu.com/question/21427267
3、https://zhuanlan.zhihu.com/p/27363484?hmsr=toutiao.io&utmmedium=toutiao.io&utmsource=toutiao.io
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OA系统中财务管理的关键点、难点解析
财务是一个组织在运作过程中物质、服务运动(流入和流出)所对应的资金运动及资金运动过程中所体现的经济关系,主要是财产和债务,即资产和负债。 财务管理(Financial Management)是在组织一定的整体目标下,关于资产的购置(投资),资本的融通(筹资)和经营中现金流量(营运资金:报销、借款、合同执行、订单执行),以及利润分配的管理。 财务管理是组织管理的一个组成部分,它是根据财经法规制度,按照财务管理的原则,组织企业财务活动、处理财务关系的一项经济管理工作。传统的财务管理系统注重结果管理和分析:会计科目、会计凭证、会计做账、会计核算等管理,更多的是结果管理。 而OA系统中的财务管理注重过程管理:通过预算设置、借款流程、报销流程、合同管理流程、费用支付流程(请款流程)来控制费用发生,按照一个组织的经营目标来控制费用发生过程。协同OA系统中的财务管理实际上就是费控系统(预算编制、预算执行、合同签订和履行管理、费用控制、费用分析报表)。 OA系统中财务管理的关键点 1)OA系统中的财务管理需要关注过程管理、企业经营性费用发生及控制的需求实现。 2)协同OA系统中的财务管理不管是预算和费...
- 下一篇
java如何将二进制转换为十进制
1、使用java内部提供的方法,直接进行api的调用 public static void binaryTodecimal2(int n) { String res = Integer.toBinaryString(n); System.out.println(res); // 将字符串转换为数字进行打印,但不建议这么做,当为负数时,int型的表示不了32的一个整数,另外,int的位数有大小,打印的值超出范围就会报错 int in = Integer.parseInt(res); System.out.print(in + "\n"); } 2、使用“移位”操作实现: public static void binaryToDecimal(int n) { for (int i = 8; i >= 0; i--) { System.out.print(n >>> i & 1); } } 3、除基倒取余法 public static void binaryToDecimal1(int n) { int t = 0; // 用来记录位数 int bin = 0...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7