日志——被低估的勇士

文中内容有一部分参考文末的reference

0.Fun

有日志的TDD是test driven development;
没有日志的TDD是tragedy driven development。

1.简介

日志用来做记录,日志记录涉及networks, servers, containers, cloud infrastructure, applications, application infrastructure, message bus(kafka), load balancers等。一般的管理流程如下,通常由DevOpers完成:

  1. instruct and collect
  2. centralize and index
  3. serch and analyze
  4. monitor and alert
  5. report and dashboard

好的日志可以帮助:

  1. 了解线上系统的运行状态
  2. 快速准确定位线上问题
  3. 发现系统瓶颈
  4. 预警系统潜在风险
  5. 挖掘产品最大价值
  6. ...

2.分类

本文关注applications的日志管理,从记录内容区分通常包括两种:一种是异常日志,另一种是业务日志。

  • 异常日志
    服务运行时会出现两种异常,一种是没有被预期到抛出的异常,另一种是被预期到捕获的异常。
    前者通过异常管理工具控制,例如Sentry,在服务初始化的时候设置SENTRY_DSN(data source name)和SENTRY_ENVIRONMENT,项目运行时如果出现了被抛出的异常则会通过rpc发送给相应的dsn,在控制台可以看到相应情况,成熟的管理工具可以看到清晰的异常上下文,帮助记录,同时方便debug。


    image

    image

    后者又有两种常见模式,一种是后端管理UI异常显示,另一种是前端管理UI异常显示。前端管理的异常显示后端比较自由,可以将异常上下文返回给前端,好处是方便在浏览器控制台快速调试,坏处是信息显示在前端不安全且传输量可能比较大。更常见的是后端管理的异常显示,将UI需要显示的信息返回给前端,将上下文的信息记录在日志中,方便后续管理和debug。

  • 业务日志
    服务运行时往往需要记录非异常数据,例如对一些节点的计数,访问信息的记录和分析。

从功能上来说,日志通常包括诊断日志、统计日志、审计日志。

  • 诊断日志
    请求入口和出口
    外部服务调用和返回
    资源消耗操作: 如读写文件等
    容错行为: 如云硬盘的副本修复操作
    程序异常: 如数据库无法连接
    后台操作:定期执行删除的线程
    启动、关闭、配置加载
  • 统计日志
    用户访问统计:用户IP、上传下载的数据量,请求耗时等
    计费日志(如记录用户使用的网络资源或磁盘占用,格式较为严格,便于统计)
  • 审计日志
    管理操作

3.内容

记录原则:

  1. 相关日志应该在一条中记录,而不是拆分成多条;
  2. 只输出需要的日志,过滤不需要关注的信息;
  3. 能反映debug需要的充要信息,例如系统配置信息,数据结构,异常类型,报错信息,系统执行时间等

记录示范:

[INFO] RequestID:b1946ac92492d2347c6235b4d2611184, auth failed due to token expiration
[INFO] RequestID:b1946ac92492d2347c6235b4d2611185, content digest does not match, expect 7b3f050bfa060b86ba781151c563c953, actual f60645e7107917250a6408f2f302d048
[INFO] RequestID:b1946ac92492d2347c6235b4d2611186, request ip(=202.17.34.1) not in whitelist

结构制定:

[year-month-day hour:min:sec <IP>] [<LEVEL>]: <ENV>, <RequestID>, <error_msg>, <PARAMS>

4.级别

常用级别,低到高:

  • TRACE – The TRACE Level designates finer-grained informational events than the DEBUG
  • DEBUG – The DEBUG Level designates fine-grained informational events that are most useful to debug an application.
  • INFO – The INFO level designates informational messages that highlight the progress of the application at coarse-grained level.
  • WARN – The WARN level designates potentially harmful situations.
  • ERROR – The ERROR level designates error events that might still allow the application to continue running.
  • FATAL – The FATAL level designates very severe error events that will presumably lead the application to abort.

DEBUG/TRACE: 记录新功能开发的核心节点日志,用于确保功能开发的切实落地;
INFO:记录子系统初始化,核心请求正常执行,用于查询更高级别日志的上下文;
WARN:记录系统可能出现的问题,例如网络波动,硬盘空间不足等,不需要立即处理,但要及时维护;
ERROR:影响个别用户访问的问题,需要立即处理;
FATAL:影响大范围用户访问的问题,需要立即处理,谨慎使用,设置这个级别的日志一定数量一定要控制,已有人力能够立即修复。

5.评估

  • 根据问题出现后的定位速度评估日志系统的优劣;
  • 根据日志分析得出的系统瓶颈和开发指导来评估日至系统的优劣;
  • 根据高级别日志出现的频率来评估日志系统的优劣;
  • 根据运维和开发人员沟通的情况来评估日至系统的优劣。

日志是一个容易被忽略的管理内容,一个好的团队会重视日志的管理,定期优化。日志是开发和运维质量的试纸。

Reference:
http://blog.jobbole.com/56574/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • 原文:https://zhuanlan.zhihu.com/p/27363484?hmsr=toutiao.io&...
    No_21312阅读 1,146评论 0 12
  • 网易视频云分享:最佳日志实践 - vcould163的博客 - 博客频道 - CSDN.NEThttp://blo...
    葡萄喃喃呓语阅读 543评论 0 9
  • 比特科技: 存储、数据库、大数据技术 » 最佳日志实践 http://www.bitstech.net/2014...
    葡萄喃喃呓语阅读 1,614评论 0 13
  • 他是朝歌的青铜爵 名门世家景,公子世无双 她是西岐的古藤杯 朝歌弃官投西岐,一别两宽拂袖去 他丰朗俊逸,棱角分明 ...
    青橘阅读 736评论 0 2