极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:13
登录|注册

9个技巧,解决K8s中的日志输出问题(上)

讲述:初明明大小:4.77M时长:05:13
来源:阿里巴巴云原生
如何为 Kubernetes 构建一个日志系统?这是很多技术人关心的话题,日志越规范化,越能减少收集、解析、分析的代价。日前,阿里云存储服务技术专家元乙以系列文章的形式分享了 Kubernetes 日志系统的落地实操经验。该系列的第三篇文章列举了 Kubernetes 中,日志输出的常见注意事项,具体如下。

1. 如何选择日志等级

日志等级是用来区分日志对应事件严重程度的说明,这是所有日志中必须具备的一个选项。通常日志会分为 6 个不同的等级:
致命(FATAL):用来输出非常严重或预期中不会发生的错误,遇到此种错误应当立即报警并人工介入处理;
错误(ERROR):非预期中的错误,此种错误可能导致部分系统异常但不会影响核心业务和系统正常运行;
警告(WARN):潜在的危险或值得关注的信息(比较核心的路径);
信息(INFO):应用执行过程中的详细信息,一般通过该信息可以看到每个请求的主要执行过程;
调试(DEBUG):用于线下调试的日志信息,用于分析应用执行逻辑,线上应用切勿开启;
跟踪(TRACE):输出最细致的运行轨迹,可能包含涉及的数据内容。
作为程序员,一定要合理设置日志等级,元乙在开发过程中总结了以下几点经验:
“致命”类型日志一定是非常严重的错误、需要人工处理的场景打印;
“错误”和“警告”的区别,可以从告警角度考虑:“错误”一般需要告警,“警告”不需要;
日志等级一方面是为了能够表示日志的严重程度,另一方面也是为了控制应用程序的日志输出量,通常线上只能打开“信息”或“警告”的日志;
“调试”日志可以多打,方便分析问题;
所有用户请求日志,必须记录;
对于不确定的外部系统调用,日志须尽可能覆盖周全;
程序中的日志库需要具备运行期间变更日志等级的能力,方便在遇到问题需要分析时临时更改日志等级;
在新功能上线时,涉及的日志可适当提升一个等级,方便实时观察和监控,待稳定后再调整到正常(记得加上注释,方便改回来)。

2. 日志内容规范

一个约束开发者的日志规范是有必要的,让所有日志看起来是一个人打印的而且是易于分析的,避免出现只有开发者自己才能看懂日志的情况,这很难进行分析和告警。
日志的字段
因为日志中通常必备的字段有:Time、Level、Location。对于特定模块 / 流程 / 业务,还需要有一些 Common 的字段,例如:
如果使用 Trace 系统,可以把 TraceID 附加到日志中;
固定的流程需要附加对应的字段;
HTTP 请求需要记录:URL、Method、Status、Latency、Inflow、OutFlow、ClientIP、UserAgent 等,详情可以参考 Nginx 日志格式;
如果多个模块的日志都打印到同一个流 / 文件中,必须有字段标识模块名。
日志的字段规约最好由运维平台 / 中间件平台自顶向下推动,约束每个模块 / 流程的程序员按照规定打印日志。
日志表现形式
建议使用 KeyValue 对形式的日志格式,这种格式可以完全自解析且易于理解,同时便于日志采集时自动解析。也可以采用 JSON 日志格式,支持以 JSON 格式输出的日志库很多,而且大部分的日志采集 Agent 都支持 JSON 格式的日志收集。
另外,绝大部分场景中不建议使用非可读的日志格式,例如 ProtoBuf、Binlog 等。
单条日志换行问题
非必要情况下,尽量不要一条日志输出成多行,否则采集、解析和索引的代价都比较高。

3. 合理控制日志输出量

日志的输出量直接影响磁盘使用以及对于应用的性能消耗,日志太多不利于查看、采集、分析;日志太少不利于监控,同时在出现问题的时候没办法调查。
一般线上应用需合理控制日志的数据量:
服务入口的请求和响应日志没有特殊原因都要输出并采集,采集的字段可以根据需求调整;
错误日志一般都要打印,如果太多,可以使用采样方式打印;
减少无效日志输出,尤其是循环中打印日志的情况需尽量减少;
请求型的日志一般不超过 5MB/s,应用程序日志不超过 200KB/s。
以上为选择日志等级、日志内容规范、日志输出量方面的注意事项,关于日志输出目标、控制日志性能消耗、选择日志库、选择日志形态、日志落盘介质、日志存储周期方面的注意事项,将在下文继续分享,欢迎持续关注。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 小斧
    1. 如何选择日志等级 2. 日志内容规范 3. 合理控制日志输出量
    2
收起评论
大纲
固定大纲
1. 如何选择日志等级
2. 日志内容规范
3. 合理控制日志输出量
显示
设置
留言
1
收藏
78
沉浸
阅读
分享
手机端
快捷键
回顶部