Windows服务的心跳活动

4
我有许多Windows服务(用C#4.0编写),它们在不同的时间间隔连接到数据库并执行各种复杂任务。其中一些任务每天只发生X小时间隔一次。然而,服务器支持团队想知道Windows服务是否正在运行,因为任务之间可能存在很大的间隔。他们希望每个Windows服务都有一个心跳。每5分钟,Windows服务将执行可以由Microsoft System Center Operation Manager(SCOM)监视的操作。任何解决方案都必须易于由SCOM监视,因为服务器支持团队依赖于它。
如何实现此类功能的最佳方法是什么?我考虑使用性能计数器,并让SCOM监听这些计数器,但不确定这是否是性能计数器的最佳用法。
更新(完全忘记包括):目前,每个服务都会将此操作写入数据库,但SCOM在监视数据库记录和区分哪个服务正在执行什么等方面效果不佳。

操作管理器可以作为一个功能来监控Windows服务。您不需要在代码中实现任何额外的内容。 - Val Akkapeddi
看看这个是否有帮助:https://dev59.com/fXVC5IYBdhLWcg3wcgmd - Devjosh
1
@ValAkkapeddi 是的,我知道 Operations Manager 和 SCOM 可以查看服务是否正在运行、停止、暂停,但如果我的服务正在运行但由于某些原因未执行其任务怎么办?我希望 SCOM 知道我的任务是否正在执行。 - Scott Wylie
@ScottWylie 我明白了,在这种情况下,性能计数器似乎不是一个坏主意。你甚至可以设置智能指标,如任务执行时间等,以帮助您的支持团队更积极地识别和解决问题。 - Val Akkapeddi
4个回答

1
如果您的情况仅限于服务健康检查,我相信可以使用Windows工具(如Windows性能监视器)来完成此操作。收集它们的数据应该比在通常断开的环境中创建心跳信号更容易。
有很多服务器和服务监控工具。其中一些也是开源的,您可以选择作为初始步骤。

0
您可以为您的服务添加SNMP或WMI仪表板 - 这将允许您提高不仅是心跳消息,例如当您遇到需要重试操作的瞬态故障时,您还可以引发事件。
有很多SNMP库可供选择,而WMI支持已内置于.NET框架中。

0

仅供参考,我正在研究这个问题,因为我的做法是当服务应用程序轮询新作业时,每隔X秒记录一条心跳消息。在午夜时分,将从日志中删除一周前的所有心跳消息。我确实有一个应用程序在早上7点计划运行,检查最后一条心跳消息发送的时间,但看起来我需要不断地运行它以定期检查...并通知Solar Winds如果出现问题。


0

那如果只是向数据库或事件日志中写入呢?


抱歉,看到更新的问题。这现在是由数据库完成的,但它与SCOM不兼容。 - Scott Wylie
如果这个数据库有一个包含两列的表:servicename和heartbeattime,那会怎样呢?每个服务都会每x分钟更新它们。 - Bob Horn

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