性能文章>【译】什么时候应该给程序上性能监控?为什么,怎么上?>

【译】什么时候应该给程序上性能监控?为什么,怎么上?转载

3周前
192013

在本文中,分享了一些在大型程序项目上工作的经验,以及当我开始制作旨在解决业务关键问题的软件时,监控是如何进入我的架构生涯的。

解决客户的关键问题可以产生巨大的商机,但同时,我们也需要为真正的高客户期望做好准备。

为了服务这些客户并抓住这些商机,我们很快意识到了自动化的重要性,也意识到了它的负面性。

我们每个月都有新客户;申请越来越复杂,官僚作风也越来越多,以前一个月一次的突发事件,现在每天都让我们加班到很晚。

我不知道我的应用程序已损坏,因为客户直接向我报告了错误。

至于那些不报告错误的客户,他们自然是选了另外一家服务。

在担任了十多年的软件工程师之后,我花了很多时间来选择最好的工具来提高我的工作效率。

监控领域出现了很多混乱,可能是因为可以以多种不同方式使用大量数据。起初,这种方法对开发人员来说是一个挑战,他们很难理解什么是解决紧急情况的最佳组合。在这篇文章中,我写了我试图区分的一些经验:

  • 何时或在何种情况下监控可以有效?
  • 为什么你应该监控系统的某些部分而其他部分不?
  • 每个特定监控问题的最佳工具是什么?

什么是程序监控工具?

应用监控工具一般由两部分组成:

  1. 信息收集,The Agent
  2. 分析平台,The Analytics Platform

Agent是开发人员安装在其服务器或应用程序中的软件包(基于代理的设计方式)。其目标是收集有关应用程序行为和性能的相关信息。

此信息被发送到远程平台,该平台分析该数据并生成可视图表,以帮助开发人员轻松了解其应用程序中发生的情况。如果出现问题,它能够向开发人员发送警报。

他们不是什么

这显然是一个简单的描述,可以涵盖大量的工具。

事实上,很多工具看起来像应用程序监控工具,但它们与应用程序监控无关。这些相似之处让我很难找到合适的工具来解决我的生产力问题。

这是我在工作中逐步慢慢学到的。

日志管理工具

日志管理工具通常是我们倾向于使用的第一种工具,因为自从变成一个程序员开始,查看应用程序日志是每天最重要的活动之一,以了解我们应用程序中最重要的流程中发生的事情.

但是当应用程序开始扩展时(它在多台服务器上运行,需要复杂的架构等),我意识到很难从日志中提取有关应用程序性能的相关信息并随着时间的推移监控新版本的影响。

就像汽车发明时一样,人们最初是在寻找更快的马,因为他们习惯了使用马。然后他们意识到需要一种不同的工具才能将其提升到一个新的水平。

正常运行时间监视器

正常运行时间监控工具可以描述为更复杂的“ping”。

主要目的很简单:他们从多个区域 ping 你的程序端点,以了解位于不同地理位置的用户可以访问它的好坏程度。

此信息有助于了解云基础架构如何将你的程序带给最终用户(负载均衡器、CDN、网络等);它不提供有关程序内部发生的事情的任何信息。

就我而言,我的程序为世界各地的用户提供服务,因此外部 ping 统计信息通过决定我们应该将服务器放置在哪些区域来帮助我们了解哪些区域的延迟最高。

他们监控外部环境;你永远不会知道你的数据库是否变慢了。

服务器与程序监控

这是最难理解的区别,我没有找到任何有趣的文章来帮助我澄清职责分离,而不是试图向我推销各种工具的广告。

应用程序在服务器上运行,因此它们显然是两个严格相关的系统组件。这就是为什么一开始它可能会令人困惑。

但是服务器和应用程序监控完成了两个完全不同的需求。

服务器监控侧重于基础设施,而且基本上任何像样的云提供商都免费提供。

Google GCPAWSDigitalOcean默认为您提供最重要的指标,如 CPU 使用率、存储、带宽等,完全免费,除了运行 VM 本身之外没有额外费用。

了解你的虚拟机必须扩大(或缩小)的时间是一项重要的必要条件,但说 CPU 处于 100% 可能意味着一切,也可能什么也不是

  • 如果你的程序消耗太多资源,那需要重构程序的哪一部分?
  • 你如何确定为什么程序的某个部分速度变慢,从而给你的用户带来了负面体验?
  • 你又如何知道程序是否正在触发异常,为什么?

如文章开头所述,服务器监控通过在服务器级别安装代理来工作,因此它在程序“外部”。但是几乎不可能从外部查看你的程序并知道代码内部发生了什么。

程序监控最终只能将注意力集中在“应用程序”上。

这类工具为你提供了一个软件库,而不是安装在操作系统中的软件包。开发人员在他们的应用程序中安装集成库,就像任何其他依赖项一样,而无需触及服务器的配置。它会自动收集有关您的代码性能、错误和趋势的相关信息,以便在出现问题时提醒你,就像一个哨兵一样。

程序监控工具解决了什么问题?

应用程序监控工具提供指标和警报来识别应用程序中的错误和瓶颈,而无需等待客户报告问题。

精心设计的应用程序监控解决方案为开发人员提供了将程序性能与业务成果联系起来所需的信息,并在性能问题影响最终用户之前识别并修复它们,从而实现更好的技术支持和最佳的服务连续性。

它就像一个哨兵,让你可以直观地探索代码的运行方式,完全自主地完成 90% 的分析工作。

这就是 Inspector 的设计目的以及它在监控市场中的定位。

为什么程序监控很重要?

这很重要,因为满意的客户是付费客户。

相对而言,拥有应用程序是容易的部分;任何人都可以做到。

真正的工作始于与客户建立融洽的关系并使他们成为第一。

如果你将客户放在首位,他们将仍然是你应用程序的忠实粉丝。另一方面,对企业来说最糟糕的事情之一是容易出错、有缺陷的软件。

没有什么比等待网站加载或完全关闭网站更快地驱走潜在的付费客户了。所以尽一切可能让他们开心,收入就会随之而来。

你可以在程序中监控什么?

您应该能够轻松了解应用程序完成 HTTP 请求或完成后台进程(如作业、cron 任务等)需要多长时间,以了解系统中消耗最多的进程是什么。

每个执行周期通常称为“事务”。因此,在事务期间,应用程序可以执行许多不同的任务,例如 SQL 查询、读/写文件、调用外部系统、算法等。

我们将此任务列表称为“时间线”,您可以如下图所示直观地探索它:

我们将此任务列表称为“时间线”

所有这些信息都由监控工具自动收集,无需开发人员进行任何棘手的配置。

我真的相信清晰和简单的信息是做出更好决策的最重要的事情。

了解为什么、何时以及如何使用监控工具是我开发者旅程中最令人困惑的部分之一,我希望这段经历可以帮助你更清楚地了解您的需求以及你需要解决的正确工具是什么,从而提升你的生产力。

原文作者:Valerio Barbera

点赞收藏
一只菌

简简单单,认真生活。

请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步

为你推荐

学会这几招让 Go 程序监控自己的性能

学会这几招让 Go 程序监控自己的性能

编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案

编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案

【译】Maven 实现高可用性 (HA) 的 7 个小技巧

【译】Maven 实现高可用性 (HA) 的 7 个小技巧

【译】Java 编程中9个需要警惕日志记录陷阱

【译】Java 编程中9个需要警惕日志记录陷阱

【全网首发】抛砖系列之redis监控命令

【全网首发】抛砖系列之redis监控命令

图解 | 监控系统 Prometheus 的原理

图解 | 监控系统 Prometheus 的原理

3
1