揭开监控的神秘面纱

2020 年 10 月 01 日

揭开监控的神秘面纱

本文作者以文章摘要介绍的方式,向大家分享了一些监控领域质量不错的文章。这些文章涵盖了监控的日志记录、数据追踪以及指标监控方面,非常值得大家学习。

在过去的几年中,可观察性概念在 DevOps 和监控领域异常火热。你可能对数据可观察性操作比较熟悉,比如日志记录、事件跟踪和指标监控展示等。 但是,你知道应该如何做好这三件事吗?

下面是一些与监控相关的在线资源的列表,可指导你与日志记录、事件跟踪和指标监控相关的工作。如果你有在拥有这些资源的团队工作过的经历,那么一定会迸发出一些关于如何应对监控挑战的想法。

日志记录,事件追踪及指标监控简介

日志记录,事件追踪以及指标监控

如果你想快速了解白盒监控/ 可观察性的三个核心方面,那么 Phil Winder 博士的文章可能会帮到你。他对每个方面进行了详细阐述,同时就其优缺点表达了自己的看法。检测和监控也被很多人称之为“指标监控”。

云原生时代下的监控

想要全面地了解当前可观测性和监控在业界发展的情况,需要好好阅读一下 Cindy Sridharan 的内容。本文介绍了可观察性的概念,定义了现代可观察性的三个核心概念——日志记录,请求跟踪和指标收集——并描述了它们的使用场景。Sridharan 在自己的一篇博文中进行了" Logs and Metrics "的讨论,这也是一篇质量很高的文章,文章短小精悍,信息量很大,推荐大家阅读。她还针对该主题编写了免费的电子书,书名为《分布式系统可观测性》

黑盒监控 vs. 白盒监控

指标监控已死?

在参加Monitorama 会议之后, Paul Dix 就现代指标监控的相关性(他称之为“常规时间序列”)分享了一些实用的意见和建议。这篇文章从多个角度,分别介绍了监控的三个核心方面。结论是,虽然事件追踪对于微服务更有用,但在更常见的单体架构中,指标、事件和日志才是最重要的。

日志记录

程序员日志管理应用指南

如果你是一个新手开发人员,那么FreeCodeCamp 是一个不错的增长自己技能的学习平台。任何执行操作和调试代码的程序员都应该知道日志处理的工作原理,这篇文章对于尚不了解如何输出日志的人来说,是一个不错的起点。作者 Stefanos Vardalos 从日志记录的诊断和审计两方面进行了阐述,同时还分享了分别适用于前端和后端开发的日志记录工具,如果你对日志记录不是那么了解,可以前去学习一下。

日志管理终极指南

该资源不仅仅是一篇文章,而是一个完整的教程网站。它是由日志管理供应商Loggly 创建的,但是内容与供应商无关,而且全权由社区维护。网站内容分为九个部分:.NET、Apache、Java、Linux、Node.js、PHP、Python、Systemd 和Windows。每个部分都提供了关于如何进行日志分析和解析、如何定位和处理常见问题以及如何在分布式系统中集中或聚合日志的基础知识,并附有相应的使用指南。

不间断的日志记录- 可操作性的基础

Matthew Skelton 在这次演讲视频中分享了自己关于现代日志管理的独特见解。他提到,日志记录管理的关键是使用正确的事务标识符,以便可以跨组件,服务和队列进行跟踪调用。他还有另一篇不错的文章,题目为《为什么以及如何进行日志测试》,推荐大家阅读一下。

关于日志,很多观点有一定的时代局限性

Honeycomb.io 博客是查找日志管理内容的理想地。它发布的很多博文都在讨论日志记录相关的话题,尽管 Honeycomb.io 是产品供应商,但许多发布的文章与供应商无关。

Honeycomb.io 的联合创始人 Charity Majors 撰写了一篇文章,题为《Lies My Parents Told Me》(父母讲给我的那些谎言,喻指老旧错误的观点),其中探讨了 11 种关于日志记录的错误示范。

Honeycomb.io 社区关于日志的其他不错的文章还有《你可以考虑使用结构化日志记录工具》”,文章中用30 行代码对可测试结构化日志进行了解释和展示;《使用NLog 实现简单结构化日志记录》这篇文章介绍了使用.NET 实现的一个日志记录库NLog 的用法示例;以及《从过去的单机服务到现在的分布式微服务》,该文章介绍了Snyk 如何构建日志记录系统,以使团队中的所有开发人员在远程工作时可以高效的定位和解决问题。

日志记录及其实时流处理

本文引用自 Jay Kreps 撰写的《日志之我见:事件数据,流处理和数据集成的一部分。 这本书收到众多资深开发者以及博客作者 Ben Nadel 好评。本文也是 Kreps 早期的一篇详细介绍日志处理的文章《软件工程师都应该知道的关于实时数据处理的统一抽象》的一部分。这些文章都从日志的处理和存储在日志管理中的面临的挑战这一角度进行了讨论,并提供了关于流数据处理概念的深入知识。

“事实证明,流是日志数据传递的体现,而日志是流处理的核心。”
—Jay Kreps

引入网络错误记录

Douglas Creager 在这篇文章中对基本网络监控理论进行了简要介绍。他介绍了一种经典的技术策略,其中涉及到服务器和客户端请求日志的收集,以帮助你了解网络黑盒中发生的事情。

日志与监控

Peter Bourgon 对于哪些日志需要记录以及应该监测什么指标提出了一些简明而又准确的建议。该文章可以帮助你掌控业务潜在的风险的同时,正确看待日志记录和监控指标采集之间的关系。比如你可以了解到,什么样的指标监控是有意义的,什么时候开始检测你的代码,日志中应该记录什么样的内容,日志级别应该怎么定义,以及应该将日志存储在什么位置。

Python 日志模块使用指南

对于应用程序级日志记录,在开始寻找外部库之前,你应该首先查看下所用的编程语言及框架的相关文档,了解它们具有哪些内置日志记录功能。在日志记录方面,某些语言比其他语言更易于使用。我不止一次听到开发人员称 Java 日志记录功能“一团糟”。因此,我分享了这篇基于 Python 日志记录的介绍,因为 Python 被广泛认为是一种优秀的面向初学者的编程语言。在本教程中, Mario Corchero 剖析了 Python 日志记录模块,并向你展示了如何使用、配置以及扩展它。

构建中央日志采集服务

就职于BrowserStack 的工程师 Akhil Labudubariki 分享了他所在的公司是如何在内部构建中央日志记录服务的案例。该日志记录服务会追踪关键产品的运行指标以及几个关键服务的健康指标,包括 API 响应延迟、网络性能等。

构建集中式日志采集程序

Vikesh Tiwari 维护了一个有趣的开源软件,它可用于构建集中式日志采集应用程序。他在文章中详细介绍了我们通常需要考虑的日志收集,传输,存储,分析和警报功能。(截止今日我发布该文章,他尚未更新这一系列的第二部分😂。)

集中式日志采集应用的数据流示意图

《经济学人》的日志采集及其监控系统

《经济学人》之前已经从单体架构过渡到微服务架构,但当时日志采集以及监控系统暂时无法与微服务架构匹配。在这篇文章中,该杂志公司的首席工程师 Kathryn Jonas 分享了她的团队构建标准化结构日志采集监控系统过程中的精彩故事。

OWASP 日志采集安全防御检查表

OWASP 即 Open Web Application Security Project,开放式 Web 应用安全项目的简称。

安全操作上下文的日志采集是一个非常大的主题,需要涉及到其他一些文章。在构建这样的日志采集系统架构时,请确保你的团队中包括安全专家或信息安全拥护者。日志采集对于检测攻击和系统入侵至关重要。结合 OWASP 日志记录安全防御清单以及其他安全操作资料,可以帮助你更好的学习安全相关的日志采集工作。

日志记录造成安全事件;我们从 GitHub 和 Twitter 的经历中学到了什么?

最近,Twitter 和 GitHub 在其应用程序或服务日志中意外地记录了用户的敏感信息(包括密码)。你如何确保你的日志记录也不会造成安全隐患? 可以阅读 Scott Helme 的文章,它介绍了 Report UI 填补系统安全漏洞的方法。

“日志记录功能非常好用,它可以记录很多关键信息,但选择记录哪些信息,需要谨慎考虑。”
Scott Helme

微服务设计:日志采集与监控

来自Azure 的这篇文章提出了几点关于微服务体系架构日志采集和监控相关的实用建议。它整理和提供了你在构建日志记录基础结构时可能会询问到的重要问题列表,并且包括了服务之间分布式追踪和监控的建议。最后还提供了一些技术实现方案的策略概述。

容器时代下的分布式日志架构

本文概述了在分布式系统和容器化微服务架构中日志记录的新要求。除了阐述了容器时代下新的挑战和要求,还介绍了日志聚合模式以及日志记录架构的弹性扩缩容模式。

源日志聚合与目标日志聚合

使用Docker logs 高效地调试应用

Ryan Davidson 的这篇文章简明扼要地列出了一些 Docker 日志处理技巧,这些技巧向你展示了如何有效地从 Docker 容器中获取日志数据。它们教你如何显示所有日志、如何定位和跟踪特定容器、如何使用 tail 和 grep 处理和搜索日志,以及如何使用组合命令将日志写入文件。

在Kubernetes 中设置日志选项

Arve Knudsen 分享了他在 AWS 部署的 Kubernetes 中创建日志管理系统的方法。该日志管理系统使用 Elasticsearch 作为搜索引擎,使用 Kibana 作为图形界面,并使用 Fluentd 进行日志收集。本文包含了很多代码示例。更多相关的介绍,可以查看 Kubernetes 的使用文档

Yubl 的 Serverless 迁移之路

Yan Cui 的所在的 Yubl(一款做社交软件的公司),在 AWS Lambda 上运行了 Serverless 应用程序。这篇文章介绍了该公司使用 ELK 日志收集、ID 关联追踪以及使用 CloudWatch 指标监控的成功案例,非常有指导意义,推荐大家阅读。

事件追踪

Linux 中用户及内核空间中的动态跟踪

数据追踪是监控的另一个主要组成部分,并在微服务架构中变得越来越重要。前面讲到的日志记录部分涵盖了部分数据跟踪的内容,通常建议使用有关联的ID 来追踪微服务架构中不同部分相关联的事务。

除了该策略以外,你可能还希望对操作系统级别的追踪有一定的深入了解。 Pratyush Anand 的这篇关于 Linux 动态跟踪的文章面向普通用户展开了介绍,文章开始先介绍了一些定义统一大家共识,最后给出了一个设置探测点的简单示例作为结束。

选择一个Linux 跟踪工具

Linux 跟踪方面, Brendan Gregg 是 Netflix 的性能架构师,也是 DTrace 工具包的创建者,如果感兴趣,赶紧订阅他的博客。不管你是一般的运营工程师还是性能 / 内核工程师,这篇文章可以帮助你选择适合你应用场景的追踪工具(这样的工具实在是太多啦!)。 有关如何使用 Linux 跟踪器的精彩介绍,请观看 Gregg 关于 Linux 性能追踪的 15 分钟演示。对了,一定要记得查看 Gregg 的其他教程,他们同样非常受欢迎。

Linux 追踪工具

Julia Evans 经常分享 Linux 性能追踪以及其他相关主题的文章,这些文章是非常好的学习资源,对于初学者非常友好,因为她站在一个初学 Linux 性能追踪人员的角度进行讲解。这篇文章首先快速概述了几种常用工具,提供了非常漂亮的图示图表,十分便于我们进行理解,让我们更容易上手 Linux 追踪工具的软件生态。

Windows 系统下的软件跟踪工具

如果你所在的公司或者组织使用 Windows 服务器,那么需要一套完全不同的系统追踪教程。这篇文章是微软硬件研发中心网站的一个文档,它包含了 12 个链接,每一链接的指向资源介绍了 Windows 系统下的追踪细节。

如何在分布式系统实现事务追踪

这篇文章概述了现代应用程序性能管理(APM)系统的功能点,这些功能可以让你在整个分布式系统上跟踪事务。文章解释了如何重建事务,如何在网络上对其进行跟踪,以及如何使用日志数据来获得系统的完整视图。 Baron Scwartz 分享过一篇不错的文章,可以作为该文章的后续《如果无法实现端到端追踪怎么办?》

OpenTracing:新兴的开放式分布式追踪行业标准

与上一篇推广 APM 工具的文章相反,这篇文章介绍了 OpenTracing 的标准,该标准与供应商无关,包括一系列 API 以及用于分布式跟踪的使用指南。作者 Nedim Šabić解释了为什么选择 OpencTracing:

“一般而言,APM 供应商拥有自己专有的跟踪代理工具和 SDK,它们可以自动地(黑盒检测)或者让用户修改被监控的应用程序源代码(白盒检测)来监控应用程序。很明显,这存在一些问题,比如用户容易被供应商捆绑限制,以及后续随着系统维护、技术迭代更新,对供应商的依赖会越来越高,后续的成本也会越来越大,难以掌控。”

Šabić写的这篇文章介绍了 OpenTracing 的技术细节,还写了另外三篇文章来介绍和比较 Zipkin Jaeger ,这是两个实现 OpenTracing 标准的开源工具。

前端性能分析工具之Chrome 开发者工具

提起前端追踪,我们必须要使用浏览器工具。Google 在介绍如何使用Chrome 开发者工具来追踪网页性能的问题上拥有非常出色的文档。 Kayce Basques 提供了可视化的分析及实战,并向你展示了如何读取和理解网站性能图。

日志记录!= 日志追踪

尽管这是一篇较老的文章,但中间部分提供了一些有关日志记录与追踪的有用建议。它说明了在系统体系架构中应该根据需求的目标来分别对待每一个需求,做到具体问题要具体分析。

指标监控

指标,监控以及告警简介

在这篇文章中, Justin Ellingwood 定义了指标,监控和告警的概念,同时还阐明了他们的作用。他还讨论了不同类型的监控指标,以及影响你选择的监控指标的因素。文章以一系列监控术语的词汇解释结尾。

如何监控SRE 黄金数据

使用Brendan Gregg 的 USE 方法、Tom Wilkie 的 RED 方法以及 Google SRE 书中介绍的方法, Steve Mushero 总结了我们应监控的“黄金信号”列表。首先,作者介绍了应该监控的五个黄金信号,然后解释了我们应该如何监控它们,文章末尾,作者列出了如何从负载均衡器 Web 服务器应用程序服务器,数据库服务器(包括 MySQL/RDS Aurora )以及 Linux 服务器中获取监控数据的相关链接。

云服务行业的10 个最关键监控指标

这篇文章比较广泛地探讨了云应用程序的关键监控指标,包括诸如安全性和存储容量等相关监控指标。文中对每个监控指标给出一个具体的定义,并解释其重要性的成因,而且以图形说明。这10 个指标是可用性、可靠性(故障之间的平均时间和平均修复时间)、响应时间、吞吐量、安全性、容量、可伸缩性、延迟、服务/ 技术平台以及单位客户的成本。

应用监控指南

Medium Capital One Tech 社区 Peter Christian Fraedrich 撰写了自己团队最关注的监控指标:每分钟请求次数、错误率、响应时间和网络利用率。在介绍了这四个监控参数以及对它们的整体评价之后,他继续发表了另外两篇有关监控告警展示以及故障响应及事故追踪的文章。

“工程师半夜被叫醒处理 CPU 或内存 Nagios 警报的日子已经一去不复返了。收集所有信息,对四个参数进行监控告警,并将所有信息关联起来,可以采用这种方式,因为如果真的在我们的某个应用程序主机上存在问题,这个问题会引起我们的四个关键指标之一出现剧烈变化。”
—— Peter Christian Fraedrich

为高性能系统构建低负载指标收集工具

收集指标不可避免具有一定的性能开销。Wallaroo(一个开源数据处理框架)的开发人员在尝试减少收集工具的性能开销时遇到了一些挑战。这篇文章介绍了Wallaroo 团队在什么情况下收集什么类型的指标以及如何展示它们时所作的一些决策。

指标时序图展示

在可观察性方面,以易于理解的形式显示指标非常重要。 John Matson 分享了由三部分内容组成的有关时序图指标展示文章,这些文章应该能够帮助你对可视化监控指标的展示做出更好的决策。这三篇文章分别介绍了时序图摘要图以及反模式制图(错误示范)

GitLab 是如何监控的

想要深入了解一些成功的互联网公司是如何进行监控的,我们可以以 GitLab 为例,查看其官网的内部监控文档。由于 GitLab 秉承开源精神,因此它们的所有内部知识库几乎都可以免费获取到。本文档可以为你提供关于监控工具选用以及流程监控的方法,但这毕竟是文档,你必须好好浏览,看看是否可以借鉴一些其他有用的监控思路。

Prometheus 指标监控

Prometheus 是一套流行的开源监控工具和标准,经常用于在云原生环境中进行监视。它如此受欢迎的原因之一是它丰富的指标展示功能,Cindy Sridharan 在她的《云原生时代的监控》一文中对此大表赞赏。 Mateo Burillo 的文章《 Prometheus Metrics 》详细地介绍了 Prometheus 的简单语法,进一步阐述了它如此流行原因。

Prometheus 数据结构图

在 Netflix 上构建可视化工具的经验教训

作为云原生运动最前沿的技术领导者之一,Netflix 是一家伟大的公司,就可视化方面它可以提供非常好的建议。这篇文章全面介绍了 Netflix 在解决日志记录、事件追踪和指标监控相关问题时面临的挑战。具体来说,团队成员描述了他们如何扩展日志记录、如何构建分布式的请求追踪、如何改进指标监控和告警、如何改进对数据存储系统的监控,以及如何针对不场景定制不同的监控指标和 UI 展示。

你还需要更多的监控相关的资料吗?

本文中提到的文章主要以概念性内容介绍为主,并有意避免对特定工具的使用进行示例讲解。但是,如果你正在寻找用于日志记录,事件追踪以及指标监控或可视化展示等方面的工具,可以试着从 GitHub 上查找一些很不错的工具,其中包括:

如果你还有其他不错的监控工具,请踊跃在评论中留言,欢迎与大家分享。

终身学习

下面分享一些学习资源供大家阅读。

作者介绍:

Mitch Pronschinske ,HashiCorp 高级编辑兼内容营销经理

原文链接:

Monitoring demystified: A guide for logging, tracing, metrics

2020 年 10 月 01 日 12:00 3268
用户头像
蔡芳芳 InfoQ高级编辑

发布了 454 篇内容, 共 210.1 次阅读, 收获喜欢 1150 次。

关注

评论 1 条评论

发布
用户头像
一个好的日志就想一篇好的文章一样,能让读者快速定位到重点和有用的信息,而不是简单的记流水账
2020 年 10 月 04 日 10:03
回复
没有更多评论了
发现更多内容

六年Java老鸟,写给1-3年程序员的几点建议,满满干货指导

周老师

Java 编程 程序员 架构 面试

阿里云服务器搭建

时间是一个人最好的证明

阿里云 服务器 域名

第四周作业

icydolphin

「架构师训练营第 1 期」

聊聊前端 UI 组件:组件体系

欧雷

前端工程 组件化 前端工程化

阿里内部绝密《百亿级并发系统设计》实战教程,冒着被劝退的风险免费分享

Geek_71bb95

Java 阿里巴巴 程序员 面试 编程语言

架构师训练营第一期-第四周课后作业

卖猪肉的大叔

架构师训练营第 1 期

第四周学习代码系统架构总结

三板斧

从格力直播看品牌商的渠道变革

boshi

数字化转型 品牌 直播带货 优化业务

看看专科程序员与本科程序员之间,到底有什么区别?

Java架构师迁哥

上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间

Java架构师迁哥

架构师训练营第 1 期第四周总结

Leo乐

「架构师训练营第 1 期」

数据库技术丨GaussDB(DWS)数据同步状态查看方法

华为云开发者社区

数据库 高可用

全面到哭!BAT内部Java求职面试宝典,必须人手一份!

Java成神之路

Java 阿里巴巴 程序员 面试 编程语言

大型互联网应用系统的技术方案和手段

饺子

本周学习总结

饺子

架构师训练营第一期-第四周学习总结

卖猪肉的大叔

架构师训练营第 1 期

5张表的sql整懵阿里p7:你们能看明白自己写的啥吗?

小Q

MySQL 数据库 学习 调优 mycat

如何设计一个牛逼的API接口

Java旅途

Spring Boot API

白话 Go 语言内存管理(二)解密栈内存管理

Kev

go 堆栈 内存管理 内存布局

通证、通证经济与区块链

CECBC区块链专委会

区块链 通证经济

《Linux学习笔记》从常用命令、常用操作到网络管理、性能优化

Geek_71bb95

Java Linux 程序员 面试 编程语言

京东区块链之供应链应用篇:溯源应用结合区块链能碰撞出什么火花?

京东智联云开发者

区块链 供应链

ARTS Week13

丽子

有符号类型引发的奇怪现象

jiangling500

Flink处理函数-6-4

小知识点

scala 大数据 flink

Java 中的反射是什么

Rayjun

Java 反射

《Java核心技术总结》+《面试题总结》PDF整理,阿里P8大牛熬了半个月肝出来的!

Geek_71bb95

Java 阿里巴巴 程序员 面试 编程语言

架构师训练营第四周作业

Shunyi

架构师训练营第 1 期

区块链将这样影响你的生产生活

CECBC区块链专委会

区块链 信息发展

研发和测试在多国陆续展开 全球央行数字货币研发驶入快车道

CECBC区块链专委会

数字货币 金融

架构师训练营 1 期 - 第四周 - 系统架构

三板斧

架构师训练营第一期

揭开监控的神秘面纱-InfoQ