Windows服务需要监视错误日志记录吗?想法



我有一个windows服务,它在我们的一台服务器上全天候运行。

它与一家外部公司有联系,最近该公司已经倒闭了很多。

我需要设置一些东西,当我们在该服务的错误日志中的最后一分钟出现25个错误时,它将基本上进行监控。

我猜我将不得不创建一个表,并在记录这些错误时将其插入到表中,然后设置一些东西,通过tsql查询检查最后一分钟是否发生了25个错误?(然后发送电子邮件或更新仪表板监控页面以获得支持)

真的,我的问题是,有人比这更好的主意吗?过去一定有人做得比这更好。我想我从来没有尝试过直接从日志中阅读。也许那会是一条更好的路线。

任何想法方向都会在这一点上得到极大的赞赏。谢谢

日志记录很有趣。:/

你的选择基本上是:

  1. 登录到数据库服务器-优点:易于从其他位置读取。缺点:您需要一个数据库服务器。如果这个项目还没有包括一个,可能会很痛苦。此外,如果网络连接出现问题,则日志记录将失败。

  2. 记录到事件日志-优点:本地写入速度快。可以远程读取。。具有正确的用户权限。缺点:您将对此进行大量查询,而事件日志并不是为此而构建的。

  3. 登录到文件-优点:写入速度极快。缺点:需要大量权限设置才能访问远程代码。可能损坏/丢失/删除等

  4. 使用其他软件,如System Center Operations Manager。优点:这正是为之构建的东西。缺点:成本/设置。


这些是我喜欢的顺序。

我的Windows服务定期调用的外部web API也有类似的问题。

我的解决方案是只使用NLog将错误写入文本日志文件,并在服务本身中保留失败次数的计数器。如果计数器超过了可配置的阈值,我会向NLog写入一个Critical条目,而不是Error条目,并将NLog配置为通过电子邮件发送一个别名,当发生Critical事件时,操作团队中的几个人会得到该别名。

如果您需要严格实现"最后一分钟有25个错误"语义,您可以将错误写入内存受限的队列(最多25个项目)。如果队列长度达到25,请检查队列中的第一个项目是否在最后一分钟内。如果是,请在日志中写入一个严重错误。

最新更新