解释错误日志的一般技巧

阅读日志文件可能会非常令人沮丧,因为从本质上讲,他们的内容对开发者来说,就像是问题本身一样。

(例如:“google是你的朋友”还是“某些错误代码比别人更多”或“记住警告和错误是非常不同的”)?

让开发人员偶尔排查生产问题。 这将为您的日志logging创造奇迹。 🙂

(1)分布式环境中的问题(2)大量的debugging信息分散在协同服务器和不同日志文件中(3)没有解释文档日志(4)没有在谷歌(5)没有线索(6)乒乓球员,而不是供应商的支持。

  • 首先,确保整个环境中的时间是同步的(ntp)。 如果不是,则忘记试图从日志文件中找出主机间关系。
  • 不要从随机日志中随机挑选一个“错误”来指责。 按时间顺序阅读日志,记住“错误”行也可能是正常软件操作的结果,并始终在那里。
  • 将正确操作的日志与问题情况的日志进行比较。 他们什么时候停止匹配? (vimdiff可能是有用的)
  • 如果在testing案例中您可以插入自己的自定义日志消息,请使用它。 (如syslog中的logging器)
  • 经过分析,如果你自己在许多巨大的日志之间来回切换,试图捕捉行动的stream程 – 尝试合并日志。 (使用sed在第一列放置时间,使用cat + sort来合并多个文件,当然grep -viE用于过滤不必要的行。

我对服务器日志的习惯是:定期检查他们,并调查/解决我发现的问题。 我主动做到这一点 – 不要等到用户在系统中断时才大声嚷嚷。 这是有效的主要原因,真正归结为几个老的说法:

小洞不补,大洞吃苦。 很明显,如果你在小问题上解决问题,那么你就是超前的,用户/pipe理层对你的咆哮的理由就会减less。 这是好事。

实践使得完美。 我认为这对系统pipe理员来说是更大的优势。 通过定期进入并主动阅读日志,您将获得经验和熟悉。 你正在学习那些神秘的日志消息是什么意思 – 哪些是微不足道的,哪些是重要的。 调查消息的过程中,你不会立即明白(这将是很多,他们一开始!)教你很多关于操作系统的内部和运行的应用程序。

通常当我得到一个新的系统来pipe理时,日志中会有很多错误,其中很多会经常发生。 之前的pipe理员经常耸耸肩,以“不太确定这是怎么一回事,但用户从来没有抱怨过,所以我没有认为它已经足够修复了”。

我使用这样的系统的目标是每周重新访问日志,直到我解决或理解每一个新出现的错误。 然后放松我的日志评论每月。 清理日志更容易阅读!

一个好的程序支持日志级别 。 通常,日志没有时间戳是毫无价值的。

大多数Linux发行版都附带了一个logwatch工具。 学会使用它并configuration它的忽略设置。 诀窍是适当地设置痛苦的阈值,以便没有任何关键的被忽略,但不是那么垃圾,pipe理员写邮件规则文件和忽略logwatch邮件。

我不相信任何通用的提示可以被用来解释错误日志,除了你必须逐个研究每个错误,例如用谷歌或者通过阅读来理解它。

为了处理像syslog这样的东西,特别是在聚合很多机器时,可以提出一个通用的build议。 保留要忽略的模式列表,以及立即提示的模式列表。 生成排除“忽略”消息的每日报告。 (或者甚至实时观看日志文件,排除可忽略的消息)。 使用此报告可将其添加到忽略列表和警报列表。 对于识别为真实错误的模式,请实时向pipe理员发送警报。 理想情况下,您的忽略列表应该足够彻底,以便您可以阅读所经历的消息,并且您的警报列表应该足够简单,以便您可以调查每个警报。 能够处理来自不能立即修复的破坏系统的警报洪水。 值得保留另外两层模式 – 那些值得重新审视但不可能成为问题的模式,那些值得警惕但不能干扰某人的模式。

在Unix环境下如果做不到这一点,很可能是最重要的(代价高昂的,破坏性的)普遍的监督。

请参阅开发人员随应用程序交付的日志文件的文档。

什么? 没有文件? 一个态度调整工具的时间

更严重的是,logging日志文件以及如何解释它们需要成为开发人员的任务之一。 他们的工作不是在代码完成的时候完成的,当操作人员可以运行应用程序并保持运行的时候就完成了,这意味着文档,交接会议,可pipe理性devise等等。

不要对日志文件做出假设。

字段格式需要检查。 例如:date是dd / mm / yy还是mm / dd / yy? 是数字字段十进制,hex,八进制或其他东西? 时间戳是一致的(其他人已经提到了设备之间同步时间的重要性:检查它是否已经同步或者计算出时间戳的来源并纠正它)?

所有的设备/进程是否都在相同的日志级别进行日志logging,以及您期望的日志级别?

日志在同一软件的不同版本之间是否一致? (检查日志输出是否与以前的版本一致,并且文档应该在testing新软件版本的列表中,但是可以忽略)