在本文中,我报告了我在大型应用程序上工作的经验,以及当我开始制作旨在解决业务关键问题的软件时,监控是如何进入我的旅程的。
解决客户的关键问题可以产生巨大的商机,但在这些情况下,您需要为真正的高客户期望做好准备。
为了服务这些客户并抓住这些商机,我很快意识到需要自动化大部分占用我大量时间的日常活动,从而对生产力产生负面影响。
我们每个月都有新客户;申请越来越复杂,官僚作风也越来越多,以前一个月一次的突发事件,现在每天都让我们加班到很晚。
我不知道我的应用程序已损坏,因为客户直接向我报告了错误。这些客户不报告错误或错误;他们停止使用应用程序寻找另一个组织更好的团队。
在担任了十多年的软件工程师之后,我花了很多时间来选择最好的工具来提高我的工作效率。
监控领域出现了很多混乱,可能是因为可以以多种不同方式使用大量数据。起初,这种方法对开发人员来说是一个挑战,他们很难理解什么是解决紧急情况的最佳组合。在这篇文章中,我写了我试图区分的经验:
应用监控工具一般由两部分组成:
代理是开发人员安装在其服务器或应用程序中的软件包(基于代理的设计方式)。其目标是收集有关应用程序行为和性能的相关信息。
此信息被发送到远程平台,该平台分析该数据并生成可视图表,以帮助开发人员轻松了解其应用程序中发生的情况。如果出现问题,它能够向开发人员发送警报。
这显然是一个简单的描述,可以涵盖大量的工具。
事实上,很多工具看起来像应用程序监控工具,但它们与应用程序监控无关。这些相似之处让我很难找到合适的工具来解决我的生产力问题。
这是我在旅途中学到的。
日志管理工具通常是我们倾向于使用的第一种工具,因为自从应用程序开发之旅开始以来,查看应用程序日志是每天最重要的活动之一,以了解我们应用程序中最重要的流程中发生的事情.
但是当应用程序开始扩展时(它在多台服务器上运行,需要复杂的架构等),我意识到很难从日志中提取有关应用程序性能的相关信息并随着时间的推移监控新版本的影响。
就像汽车发明时一样,人们最初是在寻找更快的马,因为他们习惯了使用马。然后他们意识到需要一种不同的工具才能将其提升到一个新的水平。
正常运行时间监控工具可以描述为更复杂的“ping”。
主要目的很简单:他们从多个区域 ping 您的应用程序端点,以了解位于不同地理位置的用户可以访问它的好坏程度。
此信息有助于了解云基础架构如何将您的应用程序带给最终用户(负载均衡器、CDN、网络等);它不提供有关您的应用程序内部发生的事情的任何信息。
就我而言,我的应用程序为世界各地的用户提供服务,因此外部 ping 统计信息通过决定我们应该将服务器放置在哪些区域来帮助我们了解哪些区域的延迟最高。
他们监控外部环境;你永远不会知道你的数据库是否变慢了。
这是最难理解的区别,我还没有找到任何有趣的文章来帮助我澄清职责分离,而不是试图向我推销各种工具的广告。
应用程序在服务器上运行,因此它们显然是两个严格相关的系统组件。这就是为什么一开始它可能会令人困惑。
但是服务器和应用程序监控完成了两个完全不同的需求。
服务器监控侧重于基础设施,而且基本上任何像样的云提供商都免费提供。
google GCP、AWS和DigitalOcean默认为您提供最重要的指标,如 CPU 使用率、存储、带宽等,完全免费,除了运行 VM 本身之外没有额外费用。
了解您的虚拟机必须扩大(或缩小)的时间是一项重要的必要条件,但说 CPU 处于 100% 可能意味着一切,但什么也不是:
如文章开头所述,服务器监控通过在服务器级别安装代理来工作,因此在您的应用程序“外部”。但是几乎不可能从外部查看您的应用程序并知道代码内部发生了什么。
应用程序监控最终将您的注意力集中在“应用程序”上。
这类工具为您提供了一个软件库,而不是安装在操作系统中的软件包。开发人员在他们的应用程序中安装集成库,就像任何其他依赖项一样,而无需触及服务器的配置。它会自动收集有关您的代码性能、错误和趋势的相关信息,以便在出现问题时提醒您,例如哨兵。
应用程序监控工具提供指标和警报来识别应用程序中的错误和瓶颈,而无需等待客户报告问题。
精心设计的应用程序监控解决方案为开发人员提供了将应用程序性能与业务成果联系起来所需的信息,并在性能问题影响最终用户之前识别并修复它们,从而实现更好的技术支持和最佳的服务连续性。
它就像一个哨兵,让您可以直观地探索代码的运行方式,完全自主地完成 90% 的分析工作。
这就是 Inspector 的设计目的以及它在监控市场中的定位。
这很重要,因为满意的客户是付费客户。
相对而言,拥有应用程序是容易的部分;任何人都可以做到。
真正的工作始于与客户建立融洽的关系并使他们成为第一。
如果您将客户放在首位,他们将仍然是您应用程序的忠实粉丝。另一方面,对您的企业来说最糟糕的事情之一是容易出错、有缺陷的软件。
没有什么比等待网站加载或完全关闭网站更快地驱走潜在的付费客户了。所以尽一切可能让他们开心,收入就会随之而来。
您应该能够轻松了解应用程序完成 HTTP 请求或完成后台进程(如作业、cron 任务等)需要多长时间,以了解系统中消耗最多的进程是什么。
每个执行周期通常称为“事务”。因此,在事务期间,应用程序可以执行许多不同的任务,例如 SQL 查询、读/写文件、调用外部系统、算法等。
我们将此任务列表称为“时间线”,您可以如下图所示直观地探索它:
所有这些信息都由监控工具自动收集,无需开发人员进行任何棘手的配置。
我真的相信清晰和简单的信息是做出更好决策的最重要的事情。
了解为什么、何时以及如何使用监控工具是我开发者旅程中最令人困惑的部分之一,我希望这段经历可以帮助您更清楚地了解您的需求以及您需要解决的正确工具是什么您的问题并提高您的生产力。