2022-12-13 137 发布于吉林
版权
举报
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
良好的日志是运维、开发人员排查问题的好工具,本文建议定义 JSON 格式的结构化日志格式,从而有效优化人工以及机器排查日志的效能,并能方便创建机器索引。原文: The Art of Logging
从历史上看,日志对于诊断应用程序和基础设施性能非常重要,被广泛应用于业务仪表板的可视化和性能分析。
对日志文件中的数据进行结构化,以便能够有效提取、操作和分析数据(除了便于人类理解,也便于机器分析)的重要性正在迅速上升。此外,微服务的兴起也带来了另一个挑战,即怎样在整个系统中跟踪请求的传播。
本文将介绍便于人和机器解析、理解的日志结构的最佳格式,特别是跟用户登录有关的关键信息及数据结构的建议,并将尝试提供一些重要的注意事项。
为什么日志应该是人类可读的?尽管日志最初是由机器来解析、处理和存储的,但现在正越来越多的由人类来读取、理解和诊断。日志是我们调查凶杀现场的最佳指标,而凶手正是我们的死敌: Bug!
没什么比试图理解冗长而且非结构化的日志线中丢失的信息更令人沮丧和耗时的了。日志必须有有意义,并且人们应该可以很容易理解和深入挖掘与他们有关的内容。
66.249.65.159 - - [06/Nov/2014:19:10:38 +0000] "GET /news/53f8d72920ba2744fe873ebc.html HTTP/1.1" 404 177 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.16)"
尽管我们已经习惯了默认的 Nginx 格式,但上面的示例仍然很难阅读和处理。例如,这是为了再现生产 bug 而提取的巨大日志文件的一部分,很难理解其背后含义是什么。
JSON 相对于其他数据交换格式(如 XML)的优势非常明显,这是一种在数组中有序嵌套的键值对的简单语法,对人类来说很容易读、写和理解。
那么,用 JSON 编写的日志消息是什么样子的呢?以下是与之前相同的 JSON 格式的 Nginx web 服务器日志示例:
{ "time": "06/May/2022:19:10:38 +0100", "remote_ip": "66.249.65.159", "remote_user": "-", "request": "GET /news/53f8d72920ba2744fe873ebc.html HTTP/1.1", "response": 404, "bytes": 177, "referrer": "-", "agent": "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.16)" }为什么日志应该是对机器友好的?
再次考虑上面的日志线示例:
66.249.65.159 - - [06/Nov/2014:19:10:38 +0000] "GET /news/53f8d72920ba2744fe873ebc.html HTTP/1.1" 404 177 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.16)"
为了理解,我们需要:
理解语法不幸的是,这种逻辑很脆弱,如果日志格式发生了更改(比如开发人员添加了一个新字段或更改了字段顺序),那么解析器就会崩溃,相信任何人都有面对或经历类似问题的时候。
而这就是像 JSON 这样的结构化格式可以提供帮助的地方。键值对使提取特定值和跨数据集筛选和搜索变得容易,如果添加了新的键值对,解析日志消息的软件将只是忽略那些非期望的键,而不会完全失效。
Alex Knight@Unsplash
在机器上使用 JSON 日志的好处是:
具有结构化的格式,因此便于分析日志和查询每个字段。通常,我们可以在日志解析系统(ELK、newRelic、Datadog 等)中聚合 JSON 数据,从而为我们提供强大的报告、搜索和对数据的洞察能力。这些工具使索引某些字段变得更容易,从而解决在微服务环境下跟踪请求的问题。
应该包含哪些信息?这里列举了应该包含在日志中的信息列表,有些元素是可选的,字段名前面的(o)表示可选字段。
message : 用于描述情况的人类可读的信息,在过滤时易于阅读,以获得对内容的概述。建议格式
那么,用 JSON 编写的日志消息是什么样的呢?
以下是示例建议的日志概念格式:
使用 carbon 生成的示例消息
观察
在日志服务器中,应该为以下元素建立索引,以便更快搜索: owner_id、tenant_id、correlation_id、level、level_name和application。最佳实践
花时间设计日志结构,使格式满足我们的需要,并且可以很容易复制。然而,有些团队可能需要不同的版本,还要考虑适合需求的粒度级别。通常,公司内部的"日志概念"文档可以让所有团队遵循同一种模式,并且有新的开发人员加入时会非常有用。最后
本文不是要推动标准,而是要尝试创建一种逻辑化组织的日志格式,以优化如 newRelic 或 ELK 等日志解析系统。这一格式将帮助我们生成有用的仪表板、指标和事件通知(例如,在错误百分比超过 5%时触发警报)。相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关知识
仙花日志花店加盟费,仙花日志连锁加盟
仙花日志花店连锁,面向全国开放加盟
南京花嫁丽舍备婚日志(一)
中式插花 桃花依旧笑春风#插花艺术 #东方插花 #插花固定技巧 #中式插花 #插花艺术 #禅意插花
celery 任务在Django中成功,但在花卉或celery 日志上没有显示
种植日志:哪些花卉种类能叶插?适合叶插繁殖的盆栽花卉有哪些?
.NET单元测试的艺术
命令行的艺术
插花艺术的艺术概论
插花艺术的原则和艺术特点
网址: 日志的艺术 https://m.huajiangbk.com/newsview105125.html
上一篇: JavaScript DOM编程 |
下一篇: HTML中的ASCII艺术我无法 |