Diagnostics Kit - .NET 应用程序的监控解决方案





5.00/5 (5投票s)
一套可帮助您诊断和监控 .NET 应用程序的工具
引言
我很高兴向大家介绍一个我花了一些时间开发的.*项目。它是一套可以帮助您诊断和监控 .NET 应用程序的工具。它不仅仅是一个日志聚合器,还具有使它在市场上现有的诊断解决方案中独一无二的功能。让我们来看看它们。
架构
Diagnostics Kit 由几个层组成,但其架构非常简单:安装在您的应用程序中的 Musketeer 实例和 Harvesters 将日志发送到一个中心点,称为 Diagnostics Castle。您将在接下来的段落中找到每个组件的详细描述,但现在,让我们先多谈谈架构部分。为了简化配置,应用程序以其路径进行标识,因此安装在不同服务器上相同路径下的应用程序的日志将被视为来自一个应用程序的日志。我知道这相当严格,但请相信我:这使得维护工作更加轻松。日志通过 HTTP 传输,处理时间对大多数设置来说应该足够短;尽管日志收集的速度高度依赖于所使用的日志存储。
您现在可能会想,我为什么要编写这个工具(市面上已经有很多了)以及它能为您带来什么?让我同时回答这两个问题。我是一名 .NET 开发人员,在我的职业生涯中,我见过太多项目没有人关心应用程序日志。它们通常存储在文件或数据库的某个地方,并且往往很难检索。运维人员没有时间设置一个像样的监控解决方案,开发人员也没有足够努力去实现一个。话虽如此,我必须承认,在这方面的情况越来越好,有越来越多的日志意识强的开发人员以及使日志记录过程顺畅的产品/库。Diagnostics Kit 是为开发人员设计的监控解决方案。其主要目的是使您的应用程序中的错误诊断更加容易,并且在该领域具有一些独特的功能。如果您已经在生产环境中使用了监控解决方案,您仍然可以考虑在您的测试环境中使用 Diagnostics Kit。它使用 .NET 编写,每个 .NET 开发人员都应该能够设置和自定义它。我有没有提到它是免费且开源(GPL 许可证)的? :)
Diagnostics Castle
Castle 分析收到的日志并将其保存在您选择的 Log Store 中。同时,它会在仪表板上显示应用程序的当前状态。一个示例文本板可能如下面的图像所示
这种布局的优点是,您可以立即看到哪些应用程序和哪些服务器行为异常。这样,您可以轻松地区分部署后可能出现的各种问题。例如,您收到来自测试人员的信息,说应用程序不稳定,对于相同的 HTTP 请求有时返回 200,有时返回 500。如果您然后查看 Castle 仪表板并在应用程序行中,只有一个单元格是红色的,您可能会怀疑服务器配置不当。
仪表板中的每个单元格都是可点击的。白色单元格表示应用程序未在该服务器上安装(或运行)。绿色单元格显示应用程序的当前 CPU 和内存使用情况,并告知在过去两分钟内,该服务器上未报告任何错误。单击应用程序名称时,会弹出一个包含有关您的应用程序在服务器上如何配置的信息(绑定、路径等)的弹出窗口,例如
单击状态单元格(绿色或红色)时,您将被重定向到日志查看器,日志以反向时间顺序显示,例如
之后,您可以按日期、级别、日志记录器名称和一些关键字(例如 HTTP 状态、URL 等)过滤日志记录。如果您使用的是支持全文搜索的日志存储(例如 Elastic Search),您甚至可以在关键字字段中键入任何文本来过滤结果。默认情况下,我们显示来自各种日志记录器的所有日志记录,因此您将看到 IIS 日志(由 Musketeer 收集)以及您的应用程序日志(来自 Harvesters)。还有一个额外的列(紧随应用程序名称之后),它将重定向到显示来自所有服务器的给定应用程序日志记录的页面。
正如我之前提到的,**日志存储**的选择非常重要,它将影响日志记录收集的速度。目前,有两个可用的日志存储:Elastic Search 和 MySql,因此有两个不同的 Diagnostics Castle 版本可供下载。在这两种情况下,您都需要调整 Diagnostics Castle web.config 中的配置设置 - 详细信息可以在 github wiki 中找到。日志存储对数据进行分区以使其可维护,并定期删除旧分区。
关于 Diagnostics Castle,我需要提及的最后一点是它的安全性。您可以为整个应用程序启用身份验证(使用 ASP.NET Identity 实现)。至于授权,目前只支持两个角色:普通用户(日志查看器和应用程序管理)和管理员(所有访问权限)。
Musketeer
Musketeer 是一个服务,它将静默监控您的应用程序(读取性能计数器)、读取 IIS 日志并将其发送到 Castle。这样,您将获得所有诊断信息集中在一处。安装很简单,您可以在 github wiki 中找到详细说明。如果 Castle 中有更新版本的软件包可用,Musketeer 将自动更新。
象
Bishop 是一个与 Castle 集成的 Fiddler 插件,提供了不同的请求篡改方法。借助它,您可以
- 绕过负载均衡器,直接将请求发送到您部署了应用程序的服务器。
- 在测试/开发应用程序时,在本地模拟边界路由器 HTTPS 加密。
- 测试负载均衡器或反向代理的正则表达式规则。
- 将所有流量转发到您的测试服务器(例如 Docker)。
启动时,Bishop 从 Diagnostics Castle 加载您的服务器配置,并在 Fiddler 的 Bishop 菜单下将其列出
您可以选择要测试的服务器,Bishop 将篡改请求,忽略负载均衡器(如果存在)。重定向引擎非常智能,会根据服务器配置中找到的绑定来篡改请求。它不会触及当前选定服务器无法服务的请求。还有一个选项可以将所有传入流量重定向到一个服务器。在需要测试负载均衡器或反向代理配置时,这可能会很有用。
另一个有趣的选项是**localhost 的 HTTPS 模拟器**。如果启用它,请求将在浏览器和 Fiddler 之间进行加密(您可以在浏览器中看到 Fiddler 证书),但您的应用程序将收到一个纯 HTTP 请求,其中包含一个附加标头(X-OriginalBaseUrl),其中包含原始 URL - 这通常是边界路由器执行加密的方式。因此,使用 Bishop,您可以测试您的应用程序在这样的路由器后面的行为。在需要测试/实现身份验证/授权层时,这可能非常有用。
最后一个但非常强大的功能是能够篡改通过 Fiddler 的任何请求。查看 Tampering Options 以了解您可以设置的各种选项
使用此示例规则,我们将 URL 路径中的 `accountId` 提取出来,并将其作为查询参数。请查阅 Bishop wiki 以了解更多关于其功能的信息。
Harvesters
我们已经讨论了 Musketeer 收集的 IIS 和性能日志。但是应用程序日志呢?这就是 Harvesters 的用武之地。您可以使用 Nuget 将它们安装在您的应用程序中。支持许多日志记录库(请参见下面的列表),并且还有更多待添加。通用的日志收集过程在 wiki 中进行了描述。
可用的 nuget 包有
- LowLevelDesign.Diagnostics.Harvester.AspNet
- LowLevelDesign.Diagnostics.Harvester.AspNet.Mvc
- LowLevelDesign.Diagnostics.Harvester.AspNet.WebAPI
- LowLevelDesign.Diagnostics.Harvester.SystemDiagnostics
- LowLevelDesign.Diagnostics.Harvester.log4net
- LowLevelDesign.Diagnostics.Harvester.NLog
结束语
源代码存储库位于 github:https://github.com/lowleveldesign/diagnostics-kit,二进制版本也将在那里发布。
感谢您对 Diagnostics Castle 的关注!我希望您能在您的基础设施中使用它,如果您使用它,请在评论中告诉我。如果您有一些空闲时间并想为这个项目做出贡献(通过编写新的 harvester 或 log store 或任何您喜欢的内容),请这样做!任何 pull request 都欢迎。 :)
历史
- 2016 年 5 月 27 日 - 第一个版本