监控.NET ASP.NET应用程序

7
我有一些在ASP.NET上运行的应用程序需要监控,我关心的主要是:
- 异常:我们目前使用一些自定义代码来在异常发生时向我们发送电子邮件。如果应用程序崩溃得很厉害,它会崩溃我们的Outlook... 我知道(并使用)elmah部分解决了这个问题,但它仍然只是一个大的异常表格,带有一个漂亮(有点)的用户界面。我想要的是能够理解所有这些异常的东西(例如将异常分组、在新异常发生时发出警报、告诉我哪些是我应该修复的常见异常等)。 - 日志记录:我们目前记录到文件中,然后通过共享文件夹让开发人员进行grep和tail。有没有更好的呈现此信息的方法?在理想情况下,我希望将其与异常相关联。 - 性能:请求时间、内存使用、CPU等任何可用的统计数据。
我猜这可能需要使用多种工具来解决,有人有什么建议吗?

1
解决异常问题的最佳方法是立即修复它们。为什么你有这么长时间没有修复异常呢? - John Saunders
2
当你找到修复异常按钮时,请告诉我。我已经找了几周了。 - P.Brian.Mackey
@所有人:修复异常按钮被称为“选择一个,重现它,修复它,重复”。首先,您可能需要修复异常处理,以便仅记录每个异常一次。 - John Saunders
如果你所剩下的唯一异常是那些你无法复现的异常,那么你做得非常好。 - John Saunders
我认为你偏离了话题。我们都想要解决异常问题。更重要的是,根据对客户的价值,你应该先修复哪一个(如果需要修复)。因此,詹姆斯希望通过报告来支持决策。 - Bealer
显示剩余3条评论
8个回答

3

我们目前的解决方案与之前完全相同。我的收件箱里充斥着邮件,但大多数都被忽略了。在假期期间,一个错误导致开发人员的收件箱达到了上限 ;)

那么我们的解决方案是什么呢?

  1. 我们已经为所有异常生成了类,但它们很少从多个位置使用。这基本上是第一步,但我们是这样开始代码库的。
  2. 我们修改了生成器,为所有异常创建唯一的HRESULT值。
  3. 再次添加了一个生成器,为每个异常创建.MC消息资源文件。
  4. 现在每个异常都可以将自己写入Windows事件日志,因此我们删除了所有电子邮件等内容,并依赖于事件日志。
  5. 现在有了包含每个异常的唯一消息代码和参数的事件日志信息,我们可以使用现成的工具来聚合、监视和警报。

异常生成器(上述修改之前)位于此处:

它通过将ResX生成器替换为以下内容来与Visual Studio集成:

我还没有发布MC生成器或HRESULT生成器;但是,当我有时间时,它们将在上述位置提供。

-- 更新 --

所有工具和源代码现在都可以在线获得。那么我接下来该怎么做呢?

  1. http://code.google.com/p/csharptest-net/下载源代码或二进制文件。
  2. 查看CmdTool.exe Visual Studio Integration的帮助文档。
  3. 然后查看ResX和MC文件的生成器概述的帮助文档,有几种方法可以从ResX文件生成MC文件或完整的消息DLL。选择适合您的方法。
  4. 运行CmdTool.exe REGISTER将该工具注册到Visual Studio中。
  5. 像平常一样创建一个ResX文件,然后将自定义工具更改为CmdTool
  6. 您需要向resx文件添加一些条目。最少应该创建以下内容:
  7. 现在应该已经生成了一个编写日志事件的异常类。您需要使用以下内容之一将MC文件构建为预/后生成操作:
    • CSharpTest.Net.Generators.exe RESXTOMESSAGEDLL /output=MyCustomMessages.dll /input=TheProjectWithAResX.csproj
  8. 最后,您需要注册它,运行框架的InstallUtil.exe MyCustomMessages.dll

这样就可以让您开始工作了,直到我有时间把所有内容都记录下来。


3
你应该看一下Gibraltar,虽然我没有使用过,但它看起来非常不错!它还可以与nLog和log4net配合使用,所以如果你使用这些工具,那就太幸运了!

有很多好的建议,但这个看起来最有前途。我打算对此进行一个尝试。谢谢 :) - James Hollingworth
1
我们有一些好消息!Gibraltar现在是免费的。更多细节请见下面的单独回答。 - Jay Cincotta

1

在处理异常或记录日志方面,log4net值得一看。我总是将我们的log4net设置为不仅写出文本文件,而且附加到数据库中。这样l4ndash可以轻松分析它。它会分组您的错误,让您看到哪里经常发生问题。您可以获得一个免费的开发许可证。

对于Elmah,我们只需定期下载日志。它可以导出为csv,然后我们使用Excel过滤/分组数据。这不是理想的解决方案,但它有效。编写脚本自动化这个过程会很好。我没有看到其他关于Elmah的东西。


1

你知道 Exceptioneer 发生了什么事吗? - Alex

1

我首选使用log4net。SmtpAppender可以等待N个异常累积后再发送电子邮件,避免崩溃Outlook。而且log4net还可以记录到可以存储在网络驱动器上、可以用cat和grep读取的日志文件中。

关于统计数据,您可以使用相同的工具执行健康/性能日志记录,即生成一个线程,每分钟记录CPU使用情况等。

对于问题的第一部分,我没有具体的答案,因为它涉及自动化日志分析和合并。在大学里,我们制作了一个工具,旨在完成其中的一部分工作,但不适用于您的情况(但它与log4net双向集成)。


0

您可以通过在IIS日志上运行LogParser来获取一些关于请求时间(以及保存的其他任何内容)的指标。


0

我们已经开发了一个简单的监控应用程序,它位于桌面上,并在服务器上的应用程序之一写入事件日志时或将错误写入数据库的错误日志表时闪烁红色。它还监视数据库健康状况,检查碎片化等。

我们唯一遇到的问题是,它可能会对桌面有点侵入性,因为如果出现问题,它会不断弹出红色消息框。但是,它确实鼓励您尽快解决问题。

我们目前在几台开发人员的机器上运行此应用程序。我们正在考虑改进的是,在服务器上运行一个监控应用程序,然后发布一个RSS源,以便该应用程序仅在一个地方进行检查,但我们可以使用任何方法随时消费信息(例如,当我们不在办公室时通过手机)。


0

你可以从你的异常表中选择一个RSS订阅源(和其他内容)。 然后你可以在MS Outlook或任何智能手机上订阅这个RSS订阅源。我使用一个名为NewsRob的RSS订阅阅读器,因为它会在有新内容时提醒我。

我在博客中介绍了如何做到这一点HERE.

作为相关步骤,我找到了一种方法来通知自己当某些事情没有发生时。那篇博客在HERE.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接