博客/工程

一切事物日志:最佳实践日志和Grafana洛基

2022年5月16日9分钟

多元宇宙中最悲伤的日志行是什么?一个日志行没有上下文。

这是根据Grafana软件工程师和实验室bob电竞频道Grafana洛基技术主管埃德•韦尔奇加入Grafana实验室文化马特Tobacbob电竞频道k和工程主管副总裁垫黑麦的最新一集”Grafana大帐篷:“我们新的播客关于人、社会、科技和工具在可观测性。

听最新的”一切事物日志”和学习如何处理你的日志策略集的结局,为什么结构化的日志将会改善你的生活质量,并听到logfmt口号,你不知道存在于社区。

也更多的日志记录和Grafana洛基,加入我们的免费研讨会”缩放和保护你的日志Grafana洛基”5月19日。

注意:这个成绩单已经编辑了长度和清晰。

介绍日志策略和日志级别

垫黑麦:多早在这个过程中我们应该开始思考日志策略?

艾德·韦尔奇:日志记录可能是我们最熟悉的一件事,我们真的不认为很多关于。这是一个事后的事情,你回头发现你有太多的日志或你不能理解他们。因此预先思考这个问题并试图建立一些想法如何接近他们肯定会帮助每一个人。

每当你日志,你真的应该考虑——这是什么日志行用于?谁会使用它吗?它应该被记录在什么水平?这是一个艰难的一个。但它确实有助于思考的生命周期,日志行。它怎么能在未来有用吗?如果它不是,你真的需要它吗?

垫:日志级别是什么?

艾德:好问题。每一个水平的编程语言都有不同的定义。范围从类似的跟踪、调试、警告、错误,和信息。大多数伐木工让你选择一个严重性日志。如果你只选择信息,警告和错误日志将显示出来。如果你选择跟踪,一切都会显示出来。

垫:每个人都使用相同的水平?

艾德:不。没有人使用相同的水平,没有人可以就如何使用这些水平。

垫:我倾向于使用两个水平。每个日志级别,所以你标记一个日志行说这是一个错误,这是非常有用的,或者你有另一个层面就是信息。警告在那儿。很难分离出这些不同的水平,,我试着去尽可能少。我通常两个,这是一个错误或信息。有时候你想要额外的比特调试,当事情真的是错误的。

“每当你日志,你真的应该考虑——这是什么日志行用于?谁会使用它吗?它应该被记录在什么水平?”
——埃德·韦尔奇

日志的最佳实践

垫:那么如何做一个日志行有用的人?我们可以把某些错误runbook链接吗?

艾德:这是一个模式,我非常,非常熟悉。和这是我认为日志解决方案应该试着接受并给熟悉命令行能够说,我在看垃圾。bob彩票中奖计划我想开始挑选了无关紧要的事情,减少结果的东西,希望会帮助我了解我在找什么。

垫:知道前期可以帮助。所以现在我们思考当我们写日志,我们要故意思考以后我们想做的事情。也许你可以给我们一个小介绍到什么是结构化的记录。它很新。什么是结构化的日志和你建议吗?

艾德:实际上是改变随着时间的推移,但结构化日志基本上是当你想记录一些机器可读的格式,并在一个相对简单的方法。我想让它容易匹配一个特定的模式或登录在JSON序列化格式,因为日志也需要人性化。我们必须通过时间和浏览我们的日志。和JSON并不是人类可读的。它不是。很好记录JSON,无处不在,所有的日志工具一起工作得很好。但保持对象很简单。如果你需要记录复杂的数据,使用一个数据库或存储别的地方。有一个混合的常见的世界:logfmt。这是一个键值,但它也是一个结构化的一对。

垫:我喜欢你使用“fmt的事实。fmt“随时有人说去社区外,它还征求一个有趣的反应。我很高兴你做的比我早。那么logfmt是什么?

马特:这是真实的吗?人们大声说出来吗?当一群人聚在一起,他们只是去“fmt”?

艾德:我只听过两个人大声说出来,垫就是其中之一。

垫:我们不唱它,虽然。它不像FMT !FMT !FMT !它不像的顺序走。如果有的话,这是科学。但是我们说“fmt,”。好吧,我做的。这很奇怪。艾德说,第一位。

艾德:所以日志格式,logfmt,空间分隔的键-值对。值是用引号是否有空间的,然后里面的引号转义。这是结构化的,但我喜欢它,它消除了花括号和很多逗号引号更凝聚,容易扫描作为一个人试图读取日志行。

每个日志行需要的一件事

垫:有什么共同的东西,你认为我们应该总是把日志行吗?有什么,只是低垂的果实,我们都应该做什么?请告诉我们这些。现在。

艾德:的每个日志行需要一些背景。上下文的好例子是类似traceId或orderId。非常独特的东西。你希望能够搜索所有的事件在你巨大的分布式系统,对应的流动通过您的系统。如果你不登录的orderId或者requestId traceId,所有的日志,都是没有背景的一部分,他们是无用的。你永远不会找到他们,他们真的不应该被记录。

马特:这是非常合理的。想想一个故障诊断工作流程。不知道接下来要去哪里,那将是令人沮丧的凌晨3点。

垫:一个伟人曾经说过,“一个日志行没有上下文是悲伤的和无用的。“那是。流行,一件t恤。

我故意很有趣的和愚蠢的错误。这是不必要的,但我开始说“试试,试试,试试这个”和链接。它实际上是非常有用的。人们这样做吗?这是好的做法吗?

艾德:我认为这应该是一个实践——考虑将来谁会读这条消息,在什么情况下?越多,你在错误日志可以提供有用的信息,这意味着少有人复制错误日志,打开编辑器,搜索代码来找出他们应该做什么。所以未来的你写错误消息。

“一个伟人曾经说过,一个日志行没有上下文是悲伤的和无用的。“埃德。流行t恤。”
——垫黑麦

如何使用标签为大规模日志Grafana洛基

垫:当你开始运行系统规模,突然所有的日志真的开始增加。像你之前说的,有一个价格一个日志,我以前从来没想象过的。当涉及到存储日志,我们怎么做?的方法是什么?

艾德:记录现在的规模问题。很明显我有点偏见但我认为Grafana洛基是一个很好的方法来解决这个问题。洛基,我们考虑它作为第一和第二搜索问题规模问题。这就是索引你的日志就变得很重要。如果你建立一个大的指数,你必须存储和加载它。如果你的规模达到一定程度,这一指数成为自己的规模问题。你有一个可以搜索的东西非常快,如果你可以给它足够的内存和资源。

洛基,指数是故意保持小,它只是一些元数据日志从何而来,让它容易找到它们。而不是一个快速查找索引在书的后面说这个词是在23页,我们有一个目录,告诉我们这个词是介于100 - 300页。然后我们告诉100台电脑去阅读所有这些页面在同一时间。有资源的成本,但成本是短暂的,你可以控制它。你可以设置你想要读多少并行性同时存储一个很小的指数。

垫:为什么洛基的索引那么小?

艾德:很大程度上是因为它只是一些键值对。键-值对识别日志流,这是独特的,我们商店。日志来流,我们包了这些流分成一定大小的小块,然后冲洗它们并将它们存储在一个对象存储。键-值对是如何找到你的日志。

标签在洛基可能是最重要的一个正确理解和做的事情,因为如果你选择高基数标签,你最终有效地建立反向索引。你拥有一个标签会告诉你哪里你的日志行,但是现在该指数变得非常大,它违背了这一原则。

垫:那么好的标签,你见过洛基的例子呢?

艾德:环境、集群、应用程序。在Kubernetes世界中,我们使用“pod”作为一个标签。理想的情况是你不想一天生产300000多个流的。目标应该始终认为标签是一个直观的方式找到你的日志。我喜欢接近标签通过考虑我如何找到我要找的东西。和通常的地图很好一个好的标签集。

不要错过任何最新一集的“Grafana大帐篷”!你现在可以订阅我们的新的播客苹果播客Spotify