Windows服务的心跳活动

时间:2012-01-26 03:53:46

标签: c# windows-services

我有许多Windows服务(用C#4.0编写),它以不同的时间间隔连接到数据库并执行各种复杂的任务。其中一些任务仅每天每隔X小时进行一次。但是,服务器支持团队想知道Windows服务是否实际运行,因为任务之间可能存在很大的间隔。他们希望每个Windows服务都有一个心跳。每隔5分钟,Windows服务就会执行一些可由Microsoft System Center Operation Manager(SCOM)监视的操作。当服务器支持团队依赖SCOM时,任何解决方案都必须由SCOM轻松监控。

实现此类功能的最佳方法是什么?我想过使用性能计数器并让SCOM监听这些,但不确定是否最好使用perf计数器。

UPDATE(完全忘了包含):目前每个服务都会向数据库写入此操作,但SCOM不善于监控数据库记录并区分哪些服务正在执行哪些操作等。

4 个答案:

答案 0 :(得分:1)

如果您的情况仅限于服务运行状况检查,我很确定这可以通过Windows工具(例如Windows性能监视器)来完成。与在通常断开连接的环境中创建心跳相比,收集他们的数据应该是一件容易的事。
有很多服务器和服务监视工具。他们中的少数人还是开源的,您可以在开始时选择它。

答案 1 :(得分:0)

如何简单地写入数据库或事件日志?

答案 2 :(得分:0)

您可以将SNMP或WMI检测添加到您的服务中 - 这可以让您不仅仅提出心跳消息 - 例如,当遇到需要重试操作的瞬态故障时,您也可以引发事件。 p>

有很多SNMP库,并且.NET框架内置了WMI支持。

答案 3 :(得分:0)

仅供参考,我正在研究此问题,因为我的工作方式是服务应用程序在轮询Db进行新工作时每隔X秒记录一次监听消息。在午夜,所有超过一周的心跳消息将从日志中删除。我确实有一个计划在上午7点进行检查的应用程序,该应用程序将检查何时发送了最后一个心跳消息,但是看来我将不得不不断运行它以定期检查...并通知Solar Winds发送警报(如果有)一个问题。